Последнее время, мне приглянулся дистрибутив Arch Linux. Вообще я симпатизирую «rolling release» дистрибутивам из-за постоянного актуального состояния системы. Я пока не знаю, насколько это стабильно работает в Arch Linux, но в целом идея замечательная. Недостатки того, что после обновления что то может упасть, я намерен компенсировать регулярными бекапами. Мне надоели форки RHEL, поэтому возникла задача на практике пощумать Arch Linux и понять, насколько эта система подходит мне в рабочей среде.
Статья ожидает быть долго, начну с самого начала и всех подробностей, которые мне могут пригодится в будуще. Первое что начнем, это с установки Arch Linux на VPS Proxmox. Описывать подробно процесс создания виртуалки не буду, отмечу только, что тип сетевого интерфейса virtio.
IPv4 у нас настроен на этапе установки Arch Linux, поэтому, нам останетя только прописать настройки IPv6. На этом этапе я остановлюсь более подробно. У меня сервер в OVH. Первое что нам нужно это посомтреть IPv6 шлюз для сервера и выделенную IPv6 подсеть. В моем случа это fe80:0000:0000:0000:0000:0000:0000:0001 и 2001:41d0:11c:c700::/56 сооствественно. В сокращенном виде адрес шлюза fe80::1, его я и буду испольховать далее. Вы можете просто скопировать шлюз из панели.
Далее нам необходимо прописать IPv6 на уровне настроек сети. У меня настройки хранятся в файле 20-ens18.network, имя конфига может отличаться от вашего.
nano /etc/systemd/network/20-ens18.network
В секцию [Network] нужно добавить IPv6 адрес и параметр IPv6AcceptRA=no
[Network] Address=2001:41d0:11c:c700::777/64 IPv6AcceptRA=no
Далее ниже еще одну дублирующую секцию [Route]
[Route] Gateway=fe80::1 GatewayOnLink=yes
В итоге конфиг стал выглядеть сдледующим образом:
[Match] Name=ens18 [Network] Address=51.51.5.15/32 Gateway=100.64.0.1 DNS=1.1.1.1 DNS=8.8.8.8 Address=2001:41d0:11c:c700::777/64 IPv6AcceptRA=no [Route] Gateway=100.64.0.1 GatewayOnLink=yes [Route] Gateway=fe80::1 GatewayOnLink=yes
Сохраняем файл и применяем настройки командой
systemctl restart systemd-networkd
Далее набор команд, для проверки, что IPv6 поднялся:
# ip -6 addr show dev ens18 2: ens18:mtu 1500 qdisc fq_codel state UP group default qlen 1000 altname enp0s18 altname enx020000772c58 inet6 2001:41d0:11c:c700::777/64 scope global valid_lft forever preferred_lft forever inet6 fe80::ff:fe77:2c58/64 scope link proto kernel_ll valid_lft forever preferred_lft forever # ip -6 route 2001:41d0:11c:c700::/64 dev ens18 proto kernel metric 256 pref medium fe80::/64 dev ens18 proto kernel metric 256 pref medium default via fe80::1 dev ens18 proto static metric 1024 onlink pref medium # ping -6 -c 3 2001:4860:4860::8888 PING 2001:4860:4860::8888 (2001:4860:4860::8888) 56 data bytes 64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=112 time=4.73 ms 64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=112 time=4.50 ms ^C --- 2001:4860:4860::8888 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 4.496/4.612/4.728/0.116 ms # ping -6 -c 3 2001:4860:4860::8888 PING 2001:4860:4860::8888 (2001:4860:4860::8888) 56 data bytes 64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=112 time=4.52 ms 64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=112 time=4.52 ms 64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=112 time=4.52 ms --- 2001:4860:4860::8888 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 4.515/4.519/4.522/0.003 ms
Как можете видеть из вывода сеть поднялась, IPv6 работает.
Мы настраиваем почтовый сервер, поэтому нам необходимо прописать AAAA запись в DNS для нашего IPv6 адреса. В моем случае это mx.codebeer.ru. И далее проверимь досутпность нашего IPv6 по домену mx.codebeer.ru из внешней сети. Для этого можно использовать сервис https://dnschecker.org/ping-ipv6.php
Настройка DNS записей
Нужно создать A и MX записи для почтового домена. Я не буду подробно описывать этот процесс.
Далее вторая по важности это прописать SPF запись:
"v=spf1 mx ~all"
Следуюет ометить, что для формления записи используются кавычки.
Записи DKIM и DMARC будут далее в статье.
Установка Postfix
Устаналиваем Postfix, включаем автозапуск, проверяем статус:
pacman -Syu postfix systemctl enable --now postfix systemctl status postfix --no-pager
Убедимся что имя хоста соотвествует нашему почтовому домену:
# cat /etc/hostname mx.codebeer.ru
Приводим /etc/hosts к следующему виду:
127.0.0.1 localhost ::1 localhost 51.51.5.15 mx.codebeer.ru mx
Настраиваем Postfix под наш домен:
postconf -e "inet_interfaces = all" postconf -e "myhostname = mx.codebeer.ru" postconf -e "mydomain = codebeer.ru" postconf -e "myorigin = \$mydomain" postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost, \$mydomain" postconf -e "mynetworks = 127.0.0.0/8 [::1]/128" postconf -e "home_mailbox = Maildir/" postconf -e "smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination" postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination" postconf -e "message_size_limit = 36700160" postconf -e "mailbox_size_limit = 0"
Теперь сгенерируй базу алиасов, команда пригодится в будущем, если необходимо будет прописать алиасы для почтовых ящиков.
# ls -l /etc/postfix/aliases* -rw-r--r-- 1 root root 11516 Dec 7 15:08 /etc/postfix/aliases -rw-r--r-- 1 root root 20480 Feb 2 14:29 /etc/postfix/aliases.lmdb
Если нужно что бы Postfix работал только через IPv4 протокол, нужно отредактировать параметр в файле /etc/postfix/main.cf
inet_protocols = ipv4
Применяем настройки Postfix
systemctl restart postfix
Проверка, что Postfix слушает 25 порт:
# ss -lntp | grep ':25'
LISTEN 0 0 0.0.0.0:25 0.0.0.0:* users:(("smtpd",pid=4713,fd=6),("master",pid=4428,fd=13))
Отправляем тестовое письмо на свою почту:
echo "Test from mx.powervps.net" | sendmail -v [email protected]
Включить автоперезапуск Postfix при падении
Необходмо создать файл drop-in:
mkdir -p /etc/systemd/system/postfix.service.d cat > /etc/systemd/system/postfix.service.d/restart.conf <<'EOF' [Service] Restart=on-failure RestartSec=5s StartLimitIntervalSec=300 StartLimitBurst=5 EOF
Применяем настройки:
systemctl daemon-reload systemctl restart postfix
Проверяем работает ли автоматическое поднятие сервиса:
pkill -9 master sleep 2 systemctl status postfix --no-pager