Последнее время, мне приглянулся дистрибутив Arch Linux. Вообще я симпатизирую «rolling release» философии — поддержка постоянного актуального состояния системы. Я пока не проверил на практике, насколько стабильно работает Arch Linux, но в целом идея замечательная. Сервера я использую в рабочих целях, поэтому, необходимо обеспечить стабильную работу системы. Проблема в том, что установка обновлений, есть угроза что-то сломать. Для компенсации этого недостатка, я намерен компенсировать регулярными бэкапами, что которые и так у меня регулярно выполняются. Сейчас я использую Alma Linux. Но мне надоели форки RHEL, поэтому, возникла задача на практике пощупать Arch Linux и понять, насколько эта система подходит мне для рабочей среды.
Статья будет длинной, поэтому, буду разбивать ее на логические части. Начну с самого начала и всех подробностей, которые мне могут пригодится в будущем.
IPv4 у меня настроен на этапе установки Arch Linux, поэтому, мне останется только прописать настройки IPv6. На этом этапе я остановлюсь более подробно. В моем случае IPv6 адрес 2001:41d0:11c:c700::/56, а шлюз fe80:0000:0000:0000:0000:0000:0000:0001. В сокращенном виде шлюз fe80::1, его я и буду использовать далее.
Настройка IPv6
Сейчас нам необходимо прописать 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"
postconf -e "smtpd_sasl_auth_enable = yes"
postconf -e "smtpd_sasl_type = dovecot"
postconf -e "smtpd_sasl_path = private/auth"
postconf -e "smtpd_sasl_security_options = noanonymous"
postconf -e "smtpd_sasl_tls_security_options = noanonymous"
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/run/opendkim/opendkim.sock
postconf -e "smtp_tls_security_level = may"
postconf -e "smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt"
postconf -e "smtp_tls_loglevel = 1"
postconf -e "smtp_tls_session_cache_database = btree:\${data_directory}/smtp_scache"
Теперь необходимо сгенерировать базу алиасов. Эта команда пригодится в будущем, если необходимо будет прописать алиасы для почтовых ящиков.
# 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.codebeer.ru" | 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
В случае проблем, для анализа причины и устранения используем лог:
journalctl -u postfix -n 200 --no-pager
Следующий этап настройки Postfix настройка TLS шифрования