Bezpieczny Postfix |
|
|
Ostatnio instalowałem u siebie postfixa wzorując się między innymi na stronie Grzegorza Sidorko http://linux.zsp2.edu.pl/ oraz dokumentach z działu "Documentation, Howtos and FAQs" na stronie www.postfix.org.
Ponieważ Grzegorz instalował to na nieco innym systemie (inne katalogi) postanowiłem umieścić swój własny przepis, jest on bardzo mocno wzorowany na przepisie Grzegorza, Mój przepis testowałem na: Mandrake 10 (Community i Official), Mandriva 2005, 2006, Postfix 2.1.x, 2.2.x, 2.3.x, Mail-SpamAssassin-2.63 (3.0.2), cyrus-sasl-2.1.18 - 2.1.21, courier-imap-2.2.2.20040207 (3.0.7, 3.0.8, 4-ka jest już dostępna ale trochę inna niż wcześniejsze wersje), clamav-0.70 - 0.88, amavisd-new-20030616 (2.2.1, 2.3.0-2.3.3, 2.4.x).
Moim celem jest postawienie "bezpiecznego" systemu poczty, czyli bardzo mocno zabezpieczonego przed spamerami i wirusami. Do tego ważne dla mnie jest aby mój system pocztowy nie wysyłał zwrotek na sfałszowane adresy nadawcy - ostatnie plagi wirusów Bagle i Netsky są nazywane nie bez powodu wirusami nadgorliwego administratora. Przy mojej konfiguracji zwrotkę dostanie tylko administrator i to tylko wtedy, kiedy user pozytywnie przejdzie autoryzację SASL.
Co nam będzie potrzebne:
Przed rozpoczęciem kompilacji warto zrobić: export CFLAGS="-O2" (lub nawet -O3) inaczej gcc będzie uruchamiany z opcją "-g -O2" co spowoduje niepotrzebne zwiększenie objętości plików wykonywalnych o informacje potrzebne do debugowania.
|
|
MySQL
pobieramy i instalujemy 4 paczki wywalając standardowe mandrejkowe, które są "nieco przerobione" przez zespół Mandrake i mi osobiscie się nie podobają
trzeba utworzyć bazę danych "postfix" do której dostęp z localhosta ma user "postfix" z hasłem "postfix" (oryginalne prawda?) do tej bazy importujemy plik sql, który znajduje się w zipie w moją przykładową konfiguracją. przed importem należy oczywiście ten plik wyedytować wstawiając swoją domenę i swoje konta/aliasy
|
|
Cyrus-SASL
najpierw w pliku plugins/sql.c komentujemy wszystkie polecenia pisania do logów zawierające SASL_LOG_DEBUG - inaczej będzie strasznie śmiecił.
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-login --enable-plain --enable-sql --with-gnu-ld --with-saslauthd --with-pam=/usr --with-mysql=/usr --with-openssl=/usr make make install
skrypt startowy do /etc/init.d/ można pobrać z rpm-a trzeba tylko pamiętać aby w nim ustawić MUXDIR="/var/state/saslauthd" PFDIR="/var/spool/postfix" w katalogach /etc/rc.d/ robimy linki S40saslauthd, K60saslauthd
Tworzymy plik /usr/lib/sasl2/smtpd.conf, wpisujemy tam: pwcheck_method: auxprop auxprop_plugin: sql sql_engine: mysql mech_list: plain login sql_user: postfix sql_passwd: postfix sql_hostnames: 127.0.0.1 sql_database: postfix sql_statement:select password from mailbox where username='%u@%r'
Tworzymy plik /etc/sysconfig/saslauthd, wpisujemy tam: # Authentications mechanism (for list see saslauthd -v) SASL_AUTHMECH=shadow # Hostname for remote IMAP server (if rimap auth mech is used) # Ldap configuration file (if ldap auth mech is used) SASL_MECH_OPTIONS= # Extra options (for list see saslauthd -h) SASLAUTHD_OPTS=
Tworzymy /var/state/saslauthd/
Problemy z SASLem czy też raczej współpracą SASL-Postfix polegają głównie na tym, że postfix jest chrootowany i szuka pliku mux w swoim chroocie, zatem plik startowy /etc/init.d/saslauthd tworzy twardy link w odpowiednim katalogu. Innym problemem jest brak odpowiednich bibliotek (*devel*.rpm) podczas kompilacji, co skutkuje brakiem odpowiadających im metod uwierzytelniania (można to sprawdzić: saslauthd -v).
|
|
Postfix
groupadd -g 74 postfix groupadd -g 105 postdrop useradd -u 74 -c "system user for postfix" -d /var/spool/postfix -s /bin/false postfix -g postfix
make makefiles AUXLIBS="-L/usr/lib -lsasl2 -L/usr/lib/mysql -lmysqlclient -lz -lm" CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl -DHAS_MYSQL -I/usr/include/mysql" OPT="-O2" DEBUG=""
dla db-4.3 trzeba dodać -lpthread:
make makefiles AUXLIBS="-L/usr/lib -lsasl2 -L/usr/lib/mysql -lmysqlclient -lz -lm -lpthread" CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl -DHAS_MYSQL -I/usr/include/mysql" OPT="-O2" DEBUG=""
jeżeli kompilujemy z TLS to:
make makefiles AUXLIBS="-L/usr/lib -lsasl2 -L/usr/lib/mysql -lmysqlclient -lz -lm -lssl -lcrypto -lpthread" CCARGS="-I /usr/include -DUSE_TLS -DUSE_SASL_AUTH -I/usr/include/sasl -DHAS_MYSQL -I/usr/include/mysql" OPT="-O2" DEBUG=""
przy postfixie 2.3 trzeba dodać -DUSE_CYRUS_SASL:
make makefiles AUXLIBS="-L/usr/lib -lsasl2 -L/usr/lib/mysql -lmysqlclient -lz -lm -lssl -lcrypto -lpthread" CCARGS="-I /usr/include -DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DHAS_MYSQL -I/usr/include/mysql" OPT="-O2" DEBUG=""
make make install (lub make upgrade z zależności od tego czy mamy poprzednią wersję postfixa)
cp conf/postfix-script /etc/init.d/postfix w katalogach /etc/rc.d/ robimy linki S80postfix, K30postfix
instalator postfixa zawiera jakiegoś buga - trzeba utworzyć katalog /var/spool/postfix/etc i skopiować tam pliki /etc/host.conf /etc/hosts /etc/localtime /etc/nsswitch.conf /etc/resolv.conf /etc/services
|
|
clamav
najpierw tworzymy usera i grupę amavis. groupadd -g 76 amavis useradd -u 76 -g amavis -d /usr/lib/amavis -s /bin/false -c "system user for amavis" amavis
Potrzebne też będą paczki: libcurl2-devel*.rpm libgmp3-devel*.rpm bc-1.*.rpm
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-user=amavis --with-group=amavis ewentualnie dodajemy --enable-milter
tworzymy plik /etc/cron.daily/freshclam, (chmod a+x) wpisujemy tam: #!/bin/sh freshclam -l /var/log/clamad_update.log
bardzo ważna uwaga od twórców ClamAV: będą banować tych klientów, którzy dobijają się do serwera częściej niż raz na godzinę. Można postawić freshclama jako demon - należy tylko wziąć nowy konfig w przypadku upgrejdu z wersji <0.80
potrzebne jest też utworzenie logu: touch /var/log/clamad_update.log chown amavis:amavis /var/log/clamad_update.log
Amavis 2.3.3 potrafi używać clamAV jako demona, skrypt do /etc/init.d bierzemy z contrib/init/RedHat/clamd (trzeba w środku zmienić ścieżkę z /usr/local na /usr), linkujemy S80, K30 w /etc/rc.d/rc*.d. Trzeba utworzyć katalog /var/run/clamav/, chown amavis:amavis, chmod 777. W konfigu /etc/clamd.conf trzeba pozmieniać ścieżki (do pobrania z zipa) W konfigu freshclama trzeba ustawić aby on powiadamiał clamd o nowych bazach danych (też do pobrania z zipa).
|
|
MXfilter
make cp mxfilter /usr/sbin/ cp mxfilter.cf.sample /etc/postfix/mxfilter.cf cp mxfilter.acl.sample /etc/postfix/mxfilter.acl
dodatkowo w katalogu ze zródłami znajdują się pliki test*.txt które służą testowaniu mxfilter < test.txt
|
|
courier-imap
configure i make trzeba wykonać jako zwykły user a nie jako root, dopiero make install jako root
./configure --without-ipv6 --enable-unicode=iso-8859-1,utf-8,iso-8859-2 --with-redhat
cp authdaemonrc.dist authdaemonrc cp imapd.cnf.dist imapd.cnf cp imapd.dist imapd cp pop3d.cnf.dist pop3d.cnf cp pop3d.dist pop3d cp imapd-ssl.dist imapd-ssl cp pop3d-ssl.dist pop3d-ssl cp authmysqlrc.dist authmysqlrc
w plikach pop3d* oraz imapd* na końcu jest zmienna, która sygnalizuje courierowi, który serwer ma być odpalony a który nie. Standardowo odpalamy serwery pop3 i imap.
|
|
amavis
cp amavisd /usr/sbin/ chown root /usr/sbin/amavisd chmod 755 /usr/sbin/amavisd cp amavisd.conf /etc/ chown root /etc/amavisd.conf chmod 644 /etc/amavisd.conf mkdir /var/virusmails chown amavis:amavis /var/virusmails chmod 750 /var/virusmails cp amavisd_init.sh /etc/init.d/amavis w katalogach /etc/rc.d/ robimy linki S80amavis, K30amavis
potrzebne nam będą dodatkowe paczki - uruchamiamy perl -MCPAN -e shell i podajemy kolejno (install nazwa):
Unix::Syslog Net::Server Net::Server::PreForkSimple Convert::TNEF Convert::UUlib Compress::Zlib Archive::Tar Archive::Zip Time::HiRes Mail::SpamAssassin HTML::Parser (trzeba pamiętać o zainstalowaniu paczki perl-devel wcześniej, amavisd debug wyświetli listę brakujących modułów: Can't locate XXX/Yyy.pm in @INC ... - install XXX::Yyy)
Bardzo ważne: podczas konfiguracji amavisa trzeba zwrócić uwagę na to, aby serwer nie wysyłał zwrotek na sfałszowane adresy nadawców. Wprawdzie amavis zawiera listę wirusów fałszujących adresy, ale ta lista jest mocno nieaktualna i nie należy na niej polegać. Dodatkowo, ponieważ obecnie większość wirusów fałszuje adres nadawcy proponuję, aby nie wysyłać zwrotek nie swoim userom w ogóle. Na końcu tego dokumentu znajduje się link do mojej konfiguracji, tam mam zrobione to, o czym mówiłem wyżej.
|
|
postgrey
Postgrey to takie coś, co kosztem opóźnienia w dostarczeniu maila o co najmniej 5 minut potrafi zredukować spam prawie do zera. Działa to w ten sposób, że jak widzi meila z danego IP, od danego usera do danego usera pierwszy raz (tzw. triplet) to odpowiada komunikatem "450 wróć później". I tylko prawidłowe systemy pocztowe oraz wirusy potrafią po jakimś czasie (postfix standardowo po 20 minutach) ponowić wysyłanie mejla z tego samego IP (w zasadzie /24), od tego samego usera do tego samego usera.
useradd -u 81 -g nogroup -c "system user for postgrey" -d /var/spool/postfix/postgrey -s /bin/false postgrey cp postgrey_whitelist_* /etc/postfix cp postgrey /usr/sbin cp contrib/postgreyreport /usr/sbin
skrypt startowy do /etc/init.d/ można pobrać z mojego konfiga, w /etc/rc.d/ tworzymy linki S80postgrey i K30postgrey
potrzebne nam będą dodatkowe paczki - uruchamiamy perl -MCPAN -e shell i podajemy kolejno (install nazwa):
IO::Multiplex BerkeleyDB
Efekty działania tego filtra można obserwować - listę tripletów, które nie ponowiły próby dostarczenia emaila można wyswietlić:
cat /var/log/mail/info | postgreyreport
Przy czym nalezy pamiętać, że kilka przesyłek może być "w trakcie dostarczania", najlepiej podać log wczorajszy np. info.1.
Postfix 2.1.5 standardowo zawiera w paczce ze źródłami skrypt greylistingu, ale spotkałem się z kilkoma niepochlebnymi opiniami na temat jego stabilności.
|
|
Kilka słów o konfiguracji
Przykładowe pliki konfiguracyjne można pobrać stąd. Nie będę się tutaj rozpisywał - są odpowiednie komentarze w odpowiednich plikach. Mam nadzieję, że są czytelne i zrozumiałe - jeśli tak nie jest - napisz do mnie, a postaram się poprawić.
linki: http://www.postfix.org http://www.linux.jinks.one.pl/ http://rmxf.comm.pl/ http://spf.pobox.com http://hit.kropka.net/txt/postfix-antyspam.txt
Kilka uwag:
- openssl 0.9.8 kiepsko chce współpracować, na tą chwilę ja bym polecał jednak ostatnią możliwą literkę z 0.9.7
- warto co jakiś czas robić upgrade modułów perla, w tym samego perla: odpalamy perl -MCPAN -e shell i wciskamy "r" aby obejrzeć listę modułów.
- powyższa konfiguracja chodzi u mnie między innymi na P2 350, ~50 mailboxów, ~30tyś uwalonych spamów miesięcznie, kilkanaście spamów dziennie jednak przechodzi (muszę whitelistować serwer mi je forwardujący) i jedyny problem z wydajnością jest z modułem Bayesa, konkretnie z funkcją usuwającą z bazy stare wartości. Dlatego bardziej stawiam na uwalanie w sesji niż punktowanie SpamAssasinem.
|
|
| | Data utworzenia : 2004-06-11, data aktualizacji :2006-10-19 |
| | Skomentuj ten tekst |
|
|
| 2010-09-04 23:24:19 | franciszek |
| druga instalacja postfiksa na tym samym serwerze |
Witam, mam chodzącą instalacje na produkcyjnym serwerze, chciałbym zainstalować drugą instalacje na tym samym serwerze po to aby móc ją przetestować w środowisku z userami itp. itd. Jeśli coś by nie działało to wyłączam nowego postfiksa i włączam te starą chodzącą wersje postfiksa. Nie widze opcji: install --prefix=/usr/local/postfix gdzie nowa instalacja byłaby we wskazanej lokalizacji. Jak zainstalować nową instalke w ten sposób aby nie uszkodzić tej właściwej, chodzącej i móc sie elastycznie między nimi przełączać ?
|
Odp.: Ja bym się na twoim miejscu zainteresował softem typu xen, vmware, virtualbox etc... Ogólnie jeżeli postfix "nie chodzi" to widać to po pierwszym przesłanym emailu. Jeżeli kompilujesz i masz źródła starego postfixa i źródła nowego postfixa, robisz make install nowego postfixa i coś nie działa - to wystarczy przejść do źródeł starego postfixa i zrobić make install - stara wersja przykryje nową. Oprócz tego warto trzymać kopię zapasową master.cf. |
|
| 2008-02-25 15:07:09 | Iksik |
| postfix problem podczas make install |
| Podczas make install postfix krzyczy ze nie ma :
bin/postconf: error while loading shared libraries: libsasl2.so.2: cannot open shared object file: No such file or directory
Oczywiscie libsasl2.so.2 znajduje sie w /usr/local/lib/ oraz /var/lib/
Pytanie to gdzie on tego szuka ?? |
| Odp.: # cat /etc/ld.so.conf
# man ldconfig |
|
| 2008-01-11 03:04:54 | Edel |
| Problem |
| Wszystko skonfigurowałem wg Twojego przepisu. Jednak za cholerę nie działa SQL - SASL uwierzytelnia tylko loginów użytkowników mających konto na linuxie. Gdy wpiszę user@domena - wywala błąd - login failed. Co jest grane? W MySQL jest baza postfix, użytkownik postfix z dostępem do bazy danych z localhost a... nie działa :(
Pozdrawiam
Edel |
| Odp.: błędny plik smtp.conf? |
|
| 2007-12-22 20:26:16 | Lewy |
| Problem z amavis |
| Witam
Daję : perl -MCPAN -e shell i :
t/Ref..................ok
t/Smtpsend............ [---- i tu jest end. Żadnego ruchu nie widać. czemu?
Pozdrawiam
Lewy |
|
| 2007-05-17 12:27:14 | p. |
| wakacje, autoreply, zarzadzenie przez www |
| moze jeszcze do tego postfixadmin i wakacje (autoreply)
Pozdrawiam |
|
| wszystkie opinie » |
|
|