Zmiana serwera mail w OpenBSD 5.3
04.03.2013 | aktual.: 10.05.2013 18:40
Osoby, które czytały moje wpisy, z pewnością zauważyły, że lubię system OpenBSD. Używam go w pracy jako firewall. Ci co znają choć trochę OpenBSD, wiedzą, że domyślnym serwerem poczty jest Sendmail. A ci co znają Sendmail'a wiedzą, że jego konfiguracja jest co najmniej niebanalna ;‑) Uważny czytelnik z pewnością zapyta: serwer poczty na firewall'u? A no tak, na firewall'u. Tyle, że nasłuchujący wyłącznie na interfejsie loopback, czyli obsługujący pocztę wewnętrzną (np. wiadomości od działających programów do administratora) i wychodzącą, bez możliwości przyjmowania maili z zewnątrz. W OpenBSD istnieje usługa sprawdzająca raz w ciągu doby stan systemu. Wygenerowany przez tą usługę (czy może raczej skrypt) raport zawiera min: ilość przesłanych danych, kolejkę niedostarczonych maili, ilość błędów w przesłanych pakietach itp. Jednak najważniejszą informacją jest rodzaj wprowadzonych modyfikacji w plikach systemowych bo w razie czego zauważymy, że ktoś majstruje w naszym systemie. Przykładowy raport wygląda tak:
[code=]OpenBSD 5.2 (GENERIC) #278: Wed Aug 1 10:04:16 MDT 2012 deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC 1:30AM up 6:50, 0 users, load averages: 0.08, 0.08, 0.08 Checking subsystem status: disks: Filesystem 1K‑blocks Used Avail Capacity Mounted on /dev/wd0a 1028878 42736 934700 4% / /dev/wd0k 17898974 114 17003912 0% /home /dev/wd0d 2618606 10 2487666 0% /tmp /dev/wd0f 2061054 381456 1576546 19% /usr /dev/wd0g 1028878 183440 793996 19% /usr/X11R6 /dev/wd0h 5184846 100926 4824678 2% /usr/local /dev/wd0j 2061054 822 1957180 0% /usr/obj /dev/wd0i 1653630 738660 832290 47% /usr/src /dev/wd0e 4137918 9362 3921662 0% /var Last dump(s) done (Dump '>' file systems): mail: MTA|a48144e392a64770|ENQUEUED|root@jakas-subdomena.no-ip.org|nazwa_uzytkownika@tlen.pl|1362347629|345600|3|150 Can not connect to MX MTA|688243a51738037e|ENQUEUED|mic@jakas-subdomena.no-ip.org|nazwa_uzytkownika@tlen.pl|1362347629|345600|3|150 Can not connect to MX MTA|a3f90421115ed63b|ENQUEUED|root@jakas-subdomena.no-ip.org|nazwa_uzytkownika@tlen.pl|1362347629|14400|2|150 Can not connect to MX MTA|0cbb35649a6ea320|ENQUEUED|root@jakas-subdomena.no-ip.org|nazwa_uzytkownika@tlen.pl|1362347629|14400|2|150 Can not connect to MX network: Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Colls lo0 33196 18 0 18 0 lo0 33196 ::1/128 ::1 18 0 18 0 lo0 33196 fe80::%lo0/64 fe80::1%lo0 18 0 18 0 lo0 33196 127/8 127.0.0.1 18 0 18 0 vr0* 1500 00:40:63:ef:9a:cd 0 0 0 0 vr1 1500 00:40:63:ef:9a:cc 2254 0 2132 0 vr1 1500 10.0.0/24 10.0.0.2 2254 0 2132 0 vr1 1500 fe80::%vr1/64 fe80::240:63ff:feef:9acc%vr1 2254 0 2132 0 rl0 1500 00:a1:b0:a0:a4:31 0 0 2 0 rl0 1500 192.168.1/24 192.168.1.1 0 0 2 0 rl0 1500 fe80::%rl0/64 fe80::2a1:b0ff:fea0:a431%rl0 0 0 2 0 enc0* 0 0 0 0 0 pflog0 33196 0 0 341 0[/code]
Domyślnie Sendmail wysyła maila na konto użytkownika systemu, więc żeby go odczytać trzeba się zalogować do systemu. Nie jest to zbyt wygodne rozwiązanie, więc warto zmienić to tak aby Sendmail wysyłał maila na zewnętrzną skrzynkę. I tu zaczynają się schody jeśli Twój ISP blokuje port 25, który jest standardowym portem serwera SMTP. Przyznać się muszę, że nigdy nie interesowałem się serwerami email, Sendmailem zwłaszcza. Pomimo kilkudniowych prób zmiany portu z 25 na 587 dla połączeń wychodzących nie udało mi się zmusić go do korzystania z portu 587 przy wysyłaniu maili. Wobec tego zapadała tytułowa decyzja: dziękujemy Sendmailowi i używamy czegoś współczesnego. Zespół OpenBSD od jakiegoś czasu pracuje na własnym serwerem poczty, który nazywa się OpenSMTPD. Jako że, OpenSMTD jest integralną częścią systemu OpenBSD, nie trzeba nic instalować aby go uruchomić. No to zaczynamy. Na początek zatrzymujemy Sendmaila:
[code=]# /etc/rc.d/sendmail stop[/code]
Następnie informujemy system żeby korzystał z OpenSMTPD. Zawartość pliku /etc/mailer.conf zamieniamy na:
[code=] sendmail /usr/sbin/smtpctl send-mail /usr/sbin/smtpctl mailq /usr/sbin/smtpctl makemap /usr/libexec/smtpd/makemap newaliases /usr/libexec/smtpd/makemap [/code]
Następnie krótka seria poleceń:
[code=] # newaliases # echo "sendmail_flags=NO" >> /etc/rc.conf.local # echo "smtpd_flags=" >> /etc/rc.conf.local # /etc/rc.d/smtpd start [/code]
i system już wie, że ma używać OpenSMTPD zamiast Sendmaila. Teraz przystępujemy do konfiguracji OpenSMTPD. Tworzymy plik haseł:
[code=]# touch /etc/mail/secrets[/code]
Zmieniamy uprawnienia dostępu:
[code=] # chmod 640 /etc/mail/secrets # chown root:_smtpd /etc/mail/secrets [/code]
Uzupełniamy plik: etykietą, nazwą użytkownika i hasłem:
[code=] # echo "gmail username:password" > /etc/mail/secrets # makemap /etc/mail/secrets [/code]
Do pliku /etc/mail/smtpd.conf wprowadzamy następujące dane:
[code=] listen on lo0 expire 4h table aliases db:/etc/mail/aliases.db table secrets db:/etc/mail/secrets.db accept for local alias <aliases> deliver to mbox accept for any relay via tls+auth://gmail@smtp.gmail.com:587 auth <secrets> [/code]
Na koniec uruchamiamy OpenSMTPD:
[code=]# /etc/rc.d/smtpd start[/code]
Od tego momentu OpenBSD będzie wysyłał nam raporty na adres podany w pliku /etc/mail/aliases za pośrednictwem Google Gmail.