Przekierowanie poczty root
Jeśli masz włączone automatyczne aktualizacje na serwerze Linux fajnie byłoby otrzymywać maile gdy taka aktualizacja się wykona. Najprostszym rozwiązaniem jest zainstalowanie na tym serwerze standardowego klienta poczty. Wtedy automatycznie takie maile są wysyłane na konto root. Jednak aby taką pocztę przeczytać musisz zalogować się na każdy serwer. Rozwiązaniem jest przekierowanie poczty root na dowolny zewnętrzny adres email.
Instalacja mailutils
Na początek sprawdźmy czy mamy zainstalowaną pocztę na serwerze. Wydajemy polecenie mail:
user@srv:~$ mail
-bash: mail: command not found
Jeśli polecenie zwróci komunikat podobny do powyższego to należy zainstalować pakiet mailutils komendą:
sudo apt install mailutils
Teraz po wykonaniu komendy mail na prawach naszego użytkownika pojawi się komunikat:
user@srv:~$ mail
Cannot open mailbox /var/mail/user: No such file or directory
No mail for user
Jeśli chcemy przejrzeć pocztę użytkownika root wydajemy polecenie przez su:
user@srv:~$ sudo mail
No mail for root
Przekierowania maili
Po instalacji mailutils warto przejrzeć plik /etc/aliases, u mnie wygląda tak:
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: user
Plik /etc/aliases
Jak widać poczta użytkownika root jest przekierowania na użytkownika user. Możesz ją przekierować w tym miejscu dowolnie, ale bez dodatkowej konfiguracji nie wyślesz maila poza serwer lokalny. Zajmiemy się tym poźniej, teraz sprawdźmy jak działa skrzynka.
Testowanie maila
Możesz teraz sprawdzić czy uda się wysłać maila do użytkownika root. Żeby wysłać maila wykonaj komendę mail root:
user@srv:~$ mail root
Cc:
Subject: Test mail
content of mail
Polecenie mail posiada tutaj jeden argument - nazwa użytkownika do którego chcesz wysłać wiadomość. Po zaakceptowaniu klawiszem [Enter] pojawia się do wypełnienia pole Cc:. Kolejna linijka to temat maila. Po zaakceptowaniu przechodzimy w tryb edytora wiadomości mailowej gdzie wpisujemy treść wiadomości.
Konfiguracja przekieruje każdego maila wysłanego do root na skrzynkę użytkownika user. Będąc zalogowany tym użytkownikiem wydaj polecenie mail:
user@srv:~$ mail
"/var/mail/user": 1 message 1 new
>N 1 user Wed Aug 21 19:36 16/543 Test mail
?
Aby przeczytać maila wpisz jego numer (tutaj 1) i klepnij [Enter]:
user@srv:~$ mail
"/var/mail/user": 1 message 1 new
>N 1 user Wed Aug 21 19:36 16/543 Test mail
? 1
Return-path: <user@srv.local>
Envelope-to: root@srv.local
Delivery-date: Wed, 21 Aug 2024 19:36:39 +0200
Received: from user by srv.local with local (Exim 4.96)
(envelope-from <user@srv.local>)
id 1sgftX-0000Uv-2W
for root@srv.local;
Wed, 21 Aug 2024 19:36:39 +0200
To: root@srv.local
Subject: Test mail
User-Agent: mail (GNU Mailutils 3.15)
Date: Wed, 21 Aug 2024 19:36:39 +0200
Message-Id: <E1sgftX-0000Uv-2W@srv.local>
From: darek <user@srv.local>
content of mail
x - wyjście z programu mail z zachowaniem obecnych wiadomości
q - wyjście z programu i usunięcie czytanej wiadomości
h - wyświetlenie listy maili
d 1 - usunięcie maila nr 1
Jak widzisz powyżej wysłaliśmy maila na root który został automatycznie przekazany do użytkownika user.
Konfiguracja wysyłki na zewnątrz
W chwili obecnej nie możesz wysyłać maili do serwerów zewnętrznych ponieważ konfiguracja serwera pocztowego na to nie pozwala. Przy instalacji pakietu mailutils automatycznie instalowany jest server exim4. Zmień jego konfigurację poleceniem:
sudo dpkg-reconfigure exim4-config
Pojawi się konfigurator:

W pierwszym oknie wybierasz "internet site(...)":

Tutaj podaj pełen adres serwera:

Tu należy podać adres IP serwera, zostawiasz bez zmian:

W poniższych trzech krokach nic nie zmieniasz:



Jeśli masz połączenie dial-up powinieneś wybrać Yes, przy stałym połączeniu do Internetu wybierasz No:

W tym miejscu ustawiam konfigurację aby korzystała z formatu mbox:

Nie chcę dzielić plików konfiguracyjnych więc tu ustawiam No:

Po zakończeniu konfiguracji możesz przetestować wysyłkę poczty na serwer zewnętrzny. Spróbuj komendą mail wysłać pocztę na swoją skrzynkę zewnętrzną (analogicznie jak robiliśmy to wyżej, tylko wpisując adres mailowy poczty zewnętrznej):
user@srv:~$ mail mojmail@adres.serwera.pocztowego
Cc:
Subject: Test mail
content of mail
Większość serwerów które testowałem odbierają taką wiadomość, ale wrzucają ją w folder Spam. W zależności od serwera można ustawić taką pocztę jako pożądaną aby wpadała od razu w folder odebrane.
MTP error from remote mail server after pipelined end of data: 550-5.7.26
Your email has been blocked because the sender is unauthenticated. Gmail
requires all senders to authenticate with either SPF or DKIM.
Komunikat zwrotny z serwera Gmail w logu exim4: /var/log/exim4/mainlog
Powyższe wiąże się z koniecznością posiadania domeny zewnętrznej oraz stałego zewnętrznego adresu IP. Oczywiście trzeba także odpowienio skonfigurować rekordy TXT dla SPF i DKIM w DNS.
Jeśli maile nie docierają na Twój serwer sprawdź logi serwera exim4 znajdujące się w folderze /var/log/exim4/. Najnowszy plik z logami będzie się nazywał mainlog. Możesz go wyświetlić za pomocą komendy:
sudo cat /var/log/exim4/mainlog
Przekierowanie maila root na adres zewnętrzny
Teraz wrócę do konfiguracji przekierowań. W pliku /etc/aliases ustawiamy przekierowanie wiadomości dla root na adres zewnętrzny:
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: mojadres@serwer.zewnetrzny.pl
Zapisujemy konfigurację i od teraz wszystkie maile które będą lokalnie wysyłane na konto root zostaną przekierowane na zewnętrzny adres mailowy podany w konfiguracji. Takiego samego przekierowania możemy użyć dla pozostałych userów.