Przesyłanie wiadomości administracyjnych na zewnętrzny e-mail

Założenia

Nasz serwer ma stały dostęp do sieci i będzie wykorzystywał zewnętrzny serwer pocztowy i konto na nim do wysyłania wiadomości na wskazany adres e-mail. Wszystkie wiadomości systemowe których adresatem jest root trafią do zwykłego użytkownika a następnie zostaną przekazane na zewnętrzny adres e-mail. Aby to osiągnąć trzeba będzie:

  • skonfigurować wysyłanie poczty z maszyny
  • przekierować wiadomości
  • zabezpieczyć przesyłane wiadomości

Exim4 i jego konfiguracja

apt-get install exim4
dpkg-reconfigure exim4-config

W uruchomionym kreatorze ustawiamy kolejno:

Poczta wysyłana przez pośrednika - otrzymywana przez SMTP lub fetchamil
Nazwa pocztowa: NAZWA_HOSTA
Adresy IP: 127.0.0.1 ; ::1
Inne systemy docelowe dla których poczta jest przyjmowana: PUSTE
Komputery dla których przekazywać pocztę: PUSTE
Adres IP lub nazwa pośrednika przyjmującego wychodzącą pocztę / IP address or host name of the outgoing smarthost: SMTP.ZWENETRZNYSERWERPOCZTY.COM::587
Ukrywać lokalną nazwę w wychodzącej poczcie? TAK
Widoczna nazwa domeny dla lokalnych użytkowników: NAZWA_LOKALNEJ_MASZYNY
Utrzymywać ilość zapytań DNS na minimalnym poziomie (dzwonienie na żądanie) / Keep number of DNS-queries minimal (Dial-on-Demand): NIE
Format dostarczania poczty lokalnie: WEDLE GUSTU
Podzielić konfigurację na małe pliki / Split configuration into small files: NIE

W pliku /etc/exim4/passwd.client wprowadzamy w nowej linii:

  • adres zewnętrznego serwera pocztowego
  • login użytkownika na zdalnym serwerze
  • hasło użytkownika na zdalnym serwerze Każde z pól oddzielamy symbolem dwukropka
    smtp.zewnetrznyserwerpoczty.com:user@domena.com:4laMa#Psa

Przekierowanie wiadomości

Wiadomości systemowe które trafiają do użytkownika root przekierowujemy na konto zwykłego użytkownika modyfikując plik /etc/alises:

root: USER

Robimy to ponieważ na koncie użytkownika root mimo ustawienia pełnej nazwy często nie jest ona przekazywana w nagłówku wiadomości e-mail co utrudnia późnejsze sortowanie poczty.

Modyfikujemy plik /etc/email-addresses wskazujący jakimi adresami powinien się legitymować dany użytkownik by serwer zewnętrzny przyjął korespondencje, którą ma wysłać dalej

root: user@serwer.com
USER: user@serwer.com

Bez tego zabiegu zewnętrzny serwer otrzyma informację, że nadawcą jest root@NASZA_MASZYNA a nie użytkownik serwera zdalnego za pomoca którego chcemy nadać wiadomość. Takie e-maile są odrzucane a w niektórych przypadkach operatorzy blokują na jakiś czas przyjmowanie wiadomości z adresu IP, który próbuje w taki sposób zmieniać tożsamość nadawców.

Sprawdzamy czy wysyłanie poczty działa wysyłając testową wiadomość na adres DOCELOWY_ADRES_EMAIL:

echo 'Sprawdzamy czy działa wysyłanie poczty z '$HOSTNAME | mail -s 'Test poczty' DOCELOWY_ADRES_EMAIL

Jeżeli wiadomość nie doszła to sprawdzamy w /var/log/exim4/mainlog co poszło nie tak.

Otrzymana wiadomość w polu od ma jedynie adres e-mail. W przypadku jeśli chcemy by więcej użytkowników / maszyn używało tego samego e-maila możemy w polu Od: dodać identyfikator. Aby to zrobić należy dla danego użytkownika na maszynie wysyłającej pocztę wywołać komendę chfn.

Szyfrowanie

Wiadomości systemowe mogą zawierać wrażliwe dane dlatego przed przesłaniem ich na zewnątrz warto je zaszyfrować. Do tego celu użyty zostanie procmail wraz gnupg

apt install procmail gnupg

Na koncie użytkownika który będzie odbiorcą wiadomości systemowych na danym komputerze (zdefiniowany w /etc/aliases jako odbiorca wiadomości od root) dodajemy klucz publiczny którym wiadomości mają być szyfrowane:

gpg --import /tmp/klucz.pub

Dodajemy odpowiedni skrypt do ~/.procmailrc:

SUBJECT=`formail -xSubject:`
FROM=`formail -xFrom:`
:0c
* ^To:.*
|formail -I "" | gpg --trust-model always -ear "ADRES_EMAIL_WYSTAWCY_KLUCZA" | mail -s "$SUBJECT" DOCELOWY_ADRES_EMAIL

Możemy sprawdzić działanie wysyłając wiadomość:

echo 'Sprawdzamy czy wiadomość jest zaszyfrowana '$HOSTNAME | mail -s 'Test poczty' root

Zaszyfrowany e-mail powinien trafić na naszą zewnętrzną skrzynkę.

Powiadomienie o logowaniu

Dodatkowo możemy ustawić powiadomienie o logowaniu na dane konto shell dodając w pliku ~/.bash_profile następującą treść:

echo -e 'Dostep do shella (user@server):\n' `date` '\n' `who` '\n' | mail -s "Logowanie na user@server" NASZ_USER_PRZEJMUJĄCY_KOREPONDENCJĘ

Poprzedni wpis Następny wpis