Konfiguracja Postfixa Ogólne spojrzenie na domeny wirtualne, współpracę z MySQL i filtrowanie. Zbigniew Jarosik zibi@dec.pg.gda.pl 2004-05-08 Sopot VIII spotkanie TLUG-u.
Kilka słów Współpraca z MySQL Domeny wirtualne Filtrowanie Transporty Quota
Z życia wzięte.::.!+++!!jqmqm*. :!JQMQMQMJ!.*+MQJJ+MMQM*!JMQM!..!JMQM*: :JMQM! :*MQMJ*.... *MMQ+:.!JMQM*. :+JJ*..!JMQM!!JMQJ+! :JMMM*! :*MQM+. :!+JMJ*.:*JMQM+.!+QMJ*..*JMJ*..!JMQM+:!+MQ+!.!+MJ!.!JMMM*:!*QM*: :+MJ+.!+MQJ*. :*MQ+!.!JMJ!.:JMQJ!!*QM*!.*MM+:.*MMQ+:.*+MM!: :+MJ* :+QMM!.!+QJ*:!+M*..:JJQ+:!+MJ*: :*M+.!*MJ!.!+MM*: :!+!.:+Q*! :!+*:..:!:!:::..:: *M+*..:!!*:.!*JMMMQQMMJ+*!!:.::..:!*+MMQM+:. :*JMQMQMJ+++*+JJJJMMJ+*:...::!+JMMMQMMJJ+*:..*JQMQM+*:...::!!*+JJMJ+***!**+++JJMMMQMQQJ++*:.. :JMMJ+!..::*++JJMMQMMJJMMQMMJ++!:.........
Postfix MySQL Zastąpienie map dostępnych w plikach Elastyczność Łatwość zarządzania Interfejs przez WWW Replikacja konfiguracji Instant ;D
Postfix MySQL - 1 Tabelki: DOMAINS: domena, active, transport ALIASES: virtual, target USERS: id, vuid, vgid, login, maildir, quota, pass_smtp, pass_imap, home, imie, nazwisko, data_utworzenia, data_waznosci, telefon DOMAINS: sails.pl, 1, virtual: ALIASES: tech@nora.pl, zibi@nora.pl tech@nora.pl, zonk@nora.pl tech@nora.pl, archiwum@nora.pl USERS: 17, 1111, 1111, zibi@nora.pl, nora.pl/zibi/, 0, ****, ****, /var/spool/virtual/, Zbigniew, Jarosik, 2002-03-03, NULL, +48503134486
Postfix MySQL - 2 main.cf: mydestination = mysql:/etc/postfix/mysql/domains domains: user=dbuser password=dbpass dbname=baza_postfixa table=domains select_field=domena where_field=domena hosts=bdhost additional_conditions = and active = '1' # select forw_addr from mxaliases # where alias = '$lookup' and active = '1'
Domeny wirtualne Obsługa wielu domen na jednym serwerze Oddzielenie skrzynek od kont
Domeny wirtualne - 1 mydestination = mysql:/etc/postfix/mysql/domains mailbox_transport = virtual local_recipient_maps=mysql:/etc/postfix/mysql/virtual transport_maps = mysql:/etc/postfix/mysql/transport virtual_maps=mysql:/etc/postfix/mysql/aliases virtual_mailbox_base=/var/spool/virtual/ virtual_mailbox_maps=mysql:/etc/postfix/mysql/virtual virtual_mailbox_limit_maps = static:0 virtual_uid_maps = static:1059 virtual_gid_maps = static:1059
Filtrowanie Ochrona antyspamowa i antywirusowa Różne etapy: Tzw before-queue (jeszcze w trakcie sesji smtp) Tzw after-queue (już wewnątrz systemu) Transport (przy dostarczaniu użytkownikowi)
Filtrowanie Zalety: Before-queue Pozwala na odrzucenie maila we wczesnej fazie Idealna dla filtra odrzucającego mass-spam After-queue Wykonywana w późniejszym czasie można jej poświęcic więcej uwagi Transport Może być łatwo dostosowana do potrzeb poszczególnych domen Łatwość kolejkowania filtrów
Filtrowanie Wady Before-queue Może znacząco wydłużyć czas oczekiwania na dostępność sesji smtp After-queue Mail już jest w systemie Problem z kolejkowaniem filtrów Transport Mail już jest w systemie
Filtrowanie - after-queue Podpięcie np. Amavis-a main.cf: # amavis content_filter = smtp-amavis:[127.0.0.1]:10024 master.cf: 127.0.0.1:10025 inet n - y - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes
Filtrowanie - Transporty Elastyczność w obsłudze poczty dla poszczególnych domen Tworzenie niestandardowych mechanizmów obsługi poczty Obróbka poczty (doklejanie stopek, wycinanie wulgaryzmów) Łatwość tworzenia
Prymitywna quota SPAMC="bsfilter --homedir /home/virtual/.bsfilter/ -a --pipe --insert-flag --insert-probability asynchronous-autoupdate" query=`mysql -u maildirquota -D system -E -B -e "select quota,maildir from users where login='$recipient';" grep -v '\*'` quota=`echo $query cut -f2 -d' '` maildir=`echo $query cut -f4 -d' '` disk_usage=`du -s /home/virtual/mail/$maildir cut -f1` if [ $quota -ne 0 ]; then if [ $disk_usage -ge $quota ]; then echo "QUOTA LIMIT EXCEEDED!!! limit=$quota, usage=$disk_usage "; exit $EX_UNAVAILABLE; fi fi ($SPAMC procmail HOME="/home/virtual/mail/$maildir") { echo Message content rejected; exit $EX_UNAVAILABLE; }
Podsumowanie Elastyczność Prostota Nieduże wymagania Łatwość rozbudowy