Inne wpisy w tej serii
- Zimbra Część 1 – Instalacja Serwera (6 maja 2011)
- Zimbra Część 2 - Konfiguracja uprawnień przesyłania wiadomości (10 maja 2011)
- Zimbra Część 3 - Filtracja przesyłania wiadomości email (Narzędzia) (25 maja 2011)
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:
#useradd -d /opt/zimbra/postfix/conf/scripts -s /bin/false -g filter filter
Tworzymy katalog do przechowywania skryptów:
#chown root /opt/zimbra/postfix/conf/scripts
#chgrp filter /opt/zimbra/postfix/conf/scripts
#chmod 770 /opt/zimbra/postfix/conf/scripts
Tworzymy nowy skrypt:
#vi /opt/zimbra/postfix/conf/scripts/perms.pl
Nadajemy skryptowi prawa do wykonywania:
#chgrp filter /opt/zimbra/postfix/conf/scripts/perms.pl
#chmod 750 /opt/zimbra/postfix/conf/scripts/perms.pl
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.
# 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:
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ń:
#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ń:
- Użytkownik lokalny sam do siebie = zawsze dozwolone
- Użytkownik lokalny – dozwolone, jeżeli:
- Istnieje plik uprawnień dla Wysyłającego i ma on tam zdefiniowane konto Adresata
- Nie istnieje plik uprawnień dla Wysyłającego ale istnieje taki plik dla Adresata i jest tam zdefiniowane konto Wysyłającego
- Istnieje plik dla adresata bądź Wysyłającego i w którymś z nich zdefiniowana jest dyrektywa @allow_all
- Użytkownik zdalny – dozwolone, jeżeli:
- Istnieje plik uprawnień dla Wysyłającego i ma on tam zdefiniowane konto Adresata
- Nie istnieje plik uprawnień dla Wysyłającego ale istnieje taki plik dla Adresata i jest tam zdefiniowane konto Wysyłającego
- Istnieje plik dla adresata bądź Wysyłającego i w którymś z nich zdefiniowana jest dyrektywa @allow_all
Strony: 1 2