Zimbra Część 2 – Konfiguracja uprawnień przesyłania wiadomości

  1. Wstęp Dostałem kiedyś zlecenie, aby przygotować wdrożenie serwera pocztowego, który miałby zastąpić płatnego Exchange. Wybór padł, na Zimbre. Z wielu przetestowanych rozwiązań to wydawało się być najlepsze i […]

 

1. Wstęp

Dostałem kiedyś zlecenie, aby przygotować wdrożenie serwera pocztowego, który miałby zastąpić płatnego Exchange. Wybór padł, na Zimbre. Z wielu przetestowanych rozwiązań to wydawało się być najlepsze i z 3 letniej perspektywy muszę powiedzieć, że wybór był całkiem trafny.
Jednym z podstawowych wymagań była pełna kontrola uprawnień do wysyłania i odbierania poczty tzn. możliwość konfiguracji, kto i na jakie adresy może wysyłać i z jakich adresów odbierać pocztę.

Uwaga!!!
Ponieważ Zimbra jako MTA używa Postfix’a, przedstawione tu rozwiązanie jest w 100% kompatybilne z każdą instalacją Postfix 😉

W ramach projektu tego zrealizowano też pełna synchronizację miedzy globalna książka adresową Zimbry i Exchange. Jeżeli ktoś byłby zainteresowany takim rozwiązaniem proszę o kontakt przez formularz kontaktowy.

Przedstawiam tu rozwiązanie, jakie zostało zastosowane pozwala ono na pełna kontrolę ruchu pocztowego, przewiduje możliwość tworzenia grup odbiorców, które to grupy mogą być później podstawą konfiguracji poszczególnych klientów systemu.
Rozwiązanie to działa od 3 lat i obsługuje 700+ klientów. Konfiguracja uprawnień odbywa się w plikach tekstowych.

2. Skrypt filtrujący pocztę

Skrypt filtrujący pocztę korzysta z modułów Getopt::Std, MIME::Lite. Należy je ściągnąć z CPAN i zainstalować w innym wypadku skrypt będzie zgłaszał błędy.

Ze względów bezpieczeństwa skrypty nie powinny być uruchamiane z konta root’a. Zakładamy więc konto dla użytkownika uruchamiającego filtry:

#groupadd filter
#useradd -d /opt/zimbra/postfix/conf/scripts -s /bin/false -g filter filter

Tworzymy katalog do przechowywania skryptów:

#mkdir /opt/zimbra/postfix/conf/scripts
#chown root /opt/zimbra/postfix/conf/scripts
#chgrp filter /opt/zimbra/postfix/conf/scripts
#chmod 770 /opt/zimbra/postfix/conf/scripts

Tworzymy nowy skrypt:

#touch /opt/zimbra/postfix/conf/scripts/perms.pl
#vi /opt/zimbra/postfix/conf/scripts/perms.pl

Nadajemy skryptowi prawa do wykonywania:

#chown root /opt/zimbra/postfix/conf/scripts/perms.pl
#chgrp filter /opt/zimbra/postfix/conf/scripts/perms.pl
#chmod 750 /opt/zimbra/postfix/conf/scripts/perms.pl

 

Skrypt filtrujący:

Skrypt zapisuje pliki tymczasowe w lokalizacji podanej w sekcji konfiguracyjnej skryptu. Domyślnie /var/spool/altermime. Trzeba zadbać o to żeby skrypt miał możliwość zapisywania plików w tej lokalizacji.

# mkdir /var/spool/altermime
# chown filter:filter  /var/spool/altermime

perms.pl sprawdza uprawnienia użytkownika do przesłania poczty.

Skrypt oczekuje, że uprawnienia będą zdefiniowane w plikach w katalogu: /opt/zimbra/postfix/conf/scripts/perms. Powinny tam być zdefiniowane pliki o nazwach takich samych jak adres lokalnych użytkowników.

W pliku konfiguracyjnym określamy adresy mailowe, które są dozwolone dla danego nadawcy. Komunikacja jest dwustronna tzn. jeżeli zdefiniujemy adres jako dozwolony oznaczać to będzie że zarówno lokalny użytkownik będzie mógł wysłać maila pod wskazany adres jak i użytkownik zdalny będzie mógł napisać maila do użytkownika serwera Zimbra.

W plikach z uprawnieniami możemy zagnieżdżać pliki z grupami adresów dopisując nazwę danego pliku do listy. Nazwa plików grupowych musi się zaczynać od dyrektywy:

@include=ścieżka_do_pliku

Uwaga:
Ścieżka do pliku jest ścieżką względną od katalogu /opt/zimbra/postfix/conf/scripts/perms

Komentarze:
Wszystkie linie rozpoczynające się od znaku „#” będą traktowane jako komentarze.
Znak komentarza dozwolony jest też w dowolnym miejscu pliku. Oznacza on, że wszystko od miejsca wystąpienia znaki do końca linii traktowane będzie jako komentarz.

Allow all:
Jeżeli w pliku zostanie wpisana dyrektywa: @allow_all konto będzie miało możliwość wysyłać i odbierać pocztę z dowolnych adresów

Przykładowa zawartość pliku uprawnień:

#comments – This is comment
#comment2 – and this is also comment
@include=group1
@include=in/group2
root@mailtest.mojadomena.pl
test@mailtest.mojadomena.pl
admin@mailtest.mojadomena.pl
test2@mailtest.mojadomena.pl
jakis-adres@wp.pl
inny-adres@onet.pl

Logika systemu uprawnień:

  1. Użytkownik lokalny sam do siebie = zawsze dozwolone
  2. Użytkownik lokalny – dozwolone, jeżeli:
    1. Istnieje plik uprawnień dla Wysyłającego i ma on tam zdefiniowane konto Adresata
    2. Nie istnieje plik uprawnień dla Wysyłającego ale istnieje taki plik dla Adresata i jest tam zdefiniowane konto Wysyłającego
    3. Istnieje plik dla adresata bądź Wysyłającego i w którymś z nich zdefiniowana jest dyrektywa @allow_all
  1. Użytkownik zdalny – dozwolone, jeżeli:
    1. Istnieje plik uprawnień dla Wysyłającego i ma on tam zdefiniowane konto Adresata
    2. Nie istnieje plik uprawnień dla Wysyłającego ale istnieje taki plik dla Adresata i  jest tam zdefiniowane konto Wysyłającego
    3. Istnieje plik dla adresata bądź Wysyłającego i w którymś z nich zdefiniowana jest dyrektywa @allow_all

Strony: 1 2