Pythonie Milter Pytania

Original: http://www.bmsi.com/python/faq.html

Kompilacja Pythonie Milter

Q. Próbowałem ściągnąć aktualny kod milter i moje wirusów pułapki skanowania kilka wirusów w download.
A. Źródło milter zawiera szereg dezaktywowanych wirusów w katalogu testów. Wszystkich, ale pierwsze i ostatnie liniach base64 zakodowane dane wirusa został usunięty. Przypuszczam, że powinienem losowo pierwsze i ostatnie wiersze, jak również, od pymilter tylko usuwa pliki wykonywalne, a nie szukać podpisów.

P. Mam zainstalowany sendmail od źródła, ale Pythonie milter nie skompilować.
A. Chociaż libmilter jest oficjalnie wspierany w sendmail-8.12, trzeba zbudować i zainstalować go w oddzielnych etapach. Spójrz na pliku spec RPM do sendmail-8.12.Sekcja% prep pokazuje jak stworzyć site.config.m4 który umożliwia milter.Sekcji% build pokazuje jak zbudować libmilter w osobnym wezwaniem marki.% Install sekcja pokazuje jak zainstalować libmilter z osobnym wezwaniem marki.

Pytanie: Dlaczego nie mfapi.h znaleźć, gdy próbuję skompilować Pythonie milter na RedHat 7.2?
A. RedHat zapomniałem to nagłówek w RPM. Zobacz wymagania RedHat 7.2.

Q. Pythonie milter kompiluje ok, ale pojawia się błąd jak ten, gdy próbuję zaimportować moduł milter:
ImportError: /usr/lib/python2.4/site-packages/milter.so: undefined symbol: smfi_setmlreply
O. libmilter.a jest z sendmail-8.12 lub ​​wcześniej. Musisz sendmail-8.13 lub nowszej obsługuje setmlreply. Możesz wyłączyć setmlreply zmieniając setup.py. zmiany:

define_macros = [(„MAX_ML_REPLY ‚, 32)]
w setup.py do
define_macros = [(„MAX_ML_REPLY“ 1)]
Uruchamianie Pythonie milter

Q. sample.py milter wypisuje komunikat, a następnie po prostu stoi.
Aby korzystać z tej z Sendmail, dodać następujące sendmail.cf:

O InputMailFilters = pythonfilter
Xpythonfilter, S = lokalny: inet: 1030 @ localhost

Zobacz sendmail README libmilter.
Próbka startowy milter
A. Musisz powiedzieć sendmaila do łączenia się Milter.Próbka milter mówi, co dodać do sendmail.cf powiedzieć sendmail używać milter. Możesz też dodać makra INPUT_MAIL_FILTER do pliku sendmail.mc i odbudować sendmail.cf – zobacz sendmail README milters.

Q. Mam skonfigurowany sendmaila prawidłowo, ale nadal nic się nie dzieje kiedy wysłać sobie maila!
A. Sendmail milters tylko SMTP poczty. Email lokalny nie jest miltered. Możesz rura surowy wiadomość przez sendmail do testowania milter:

$ Cat rawtextmsg | sendmail myname@my.full.domain
Teraz sprawdzić swój dziennik milter.
P: Dlaczego mam ten wyjątek ImportError?
Plik „mime.py“, linia 370, w?
z sgmllib import declstringlit, declname
ImportError: nie można zaimportować nazwy declstringlit
A. declstringlit nie jest przez sgmllib we wszystkich wersjach Pythona. Na przykład, python-2.2 nie ma go. Upgrade do milter-0.4.5 lub nowszy, aby usunąć tę zależność.

P: Dlaczego mam milter.error: Nie można dodać odbiorcę?
A. Należy powiedzieć libmilter jak można zmutować wiadomość z set_flags () przed wywołaniem runmilter (). Na przykład, Milter.set_flags (Milter.ADDRCPT). Należy dodać do siebie wszystkie ADDHDRS, CHGBODY, ADDRCPT, DELRCPT, CHGHDRS, które mają zastosowanie.

UWAGA – najnowsze wersje domyślne flagi do umożliwienia wszystkim możliwości. Musisz teraz set_flags call (), jeżeli chcesz wyłączyć funkcje wydajności.

P. Dlaczego sendmail czasami wydrukować coś takiego: „… zapisu (D) wrócił -1, oczekuje 5: Broken pipe“ w sendmail dzienniku?
A. libmilter oczekuje „rcpt na“ krótko po otrzymaniu „mail od“. „Krótko“ jest określona przez parametr czasu oczekiwania, która została przekazana do Milter.runmilter () lub milter.settimeout (). Jeśli limit czasu wynosi 10 sekund, a patrząc na pierwszy odbiorcę w systemie DNS trwa dłużej niż 10 sekund libmilter da się i przerwać połączenie. Milter.runmilter () domyślnie na 10 sekund w 0.3.4. W 0.3.5 to pozostaw domyślną libmilter 2 godziny.

P. Dlaczego milter blokować wiadomości z kodowaniem BIG5? Co zrobić, jeśli chcę, aby je otrzymać?
A. sample.py jest próbka. To ma być łatwo modyfikowane do indywidualnych potrzeb. Będziemy oczywiście nadal poruszać kod rodzajowy z próby, rozwija projekt. Pomyśl sample.py jako aktywnego pliku konfiguracyjnego.

Jeśli używasz bms.py, to opcja block_chinese w /etc/mail/pymilter.cfg kontroluje tę funkcję.

Pytanie: Jak mogę używać gniazda sieciowego zamiast gniazda unix?
A. Zastosowanie inet: zamiast UNIX: w URL gniazdka w sendmail.mc/sendmail.cf iw * milter.cfg.Domyślnym protokołem jest UNIX. Domyślna konfiguracja tak będzie:

W sendmail.mc:

InputMailFilters = pythonfilter
Xpythonfilter, S = lokalny: / var / run / milter / pythonsock
W pymilter.cfg:
[milter]
socket = / var / run / milter / pythonsock
UWAGA: dla spfmilter, config jest „socketname“ zamiast „gniazda“.
Mieć swoje milter python nasłuchuje na porcie 1234 z interfejsu sieciowego z IP 192.168.0.10:

W sendmail.mc:

InputMailFilters = pythonfilter
Xpythonfilter, S = inet: 1234@192.168.0.10
W pymilter.cfg:
[milter]
Gniazdo = inet: 1234@192.168.0.10
Q. Dlaczego Sendmail Coredump z milters w OpenBSD?
A. Sendmail ma problem z uniksowych gniazd na starej wersji OpenBSD. Użytkownicy OpenBSD zgłosić, że ten problem został rozwiązany, więc modernizacji OpenBSD będzie rozwiązać. W przeciwnym razie, można użyć zamiast gniazda domeny internetowej. Na przykład, w sendmail.cf użytku

Xpythonfilter, S = inet: 1234 @ localhost
i zmienić sample.py odpowiednio.
P. Jak mogę zmienić bounce do nieprawidłowego odbiorcy? Mogę tylko zmienić odbiorcę w zwrotnej MOW, ale zwrotna Misja nie jest wywoływana, gdy odbiorca jest nieprawidłowy!
A. Dla sendmail-8.13 i później użyć pymilter-0.9.3 i jasne Milter.P_RCPT_REJ w klasie _protocol_mask var:

Klasa myMilter (Milter.Base):
def envrcpt (self, do, * params):
powrót Milter.CONTINUE
myMilter._protocol_mask = myMilter.protocol_mask () & ~ Milter.P_RCPT_REJ
Do sendmail-8.12 i wcześniej skonfigurować sendmail korzystać virtusertable i wyślij wszystkie nieznane adresy do / dev / null. Na przykład,
/ etc / mail / virtusertable

@ mycorp.com dev null
dan@mycorp.com dan
sally@mycorp.com Sally
/ etc / aliasy

dev null: / dev / null
Teraz Twój milter dostanie się do zwrotnego MOW, i może zmienić odbiorcę kopert do woli. Dzięki Dredd w milter.org dla tego rozwiązania.
Pytanie: Mam problemy z metodą setreply. Zawsze wysyła „milter.error: nie można ustawić odpowiedź“.
A. Sprawdź sendmail dziennik błędów. Jeśli sendmail jest coraz milter limity czasu, wówczas milter trwa zbyt długo i sendmail zrezygnował czeka. Możesz ustawić limity czasu w konfiguracji sendmaila. Oto deklaracja milter dla sendmail.cf z wszystkich limitów czasu wymienionych:

Xpythonfilter, S = lokalny: / var / log / milter / pythonsock, F = T, T = C: 5m; S: 20s; R: 60s; E: 5m
P. Kiedy karmię moje milter podany adres (który zwraca Milter.ACCEPT z metody envrcpt ()) Metoda envrcpt () nie jest wywoływana. Czy jest coś, co mogę zrobić, aby to zmienić?
A. Powrót Milter.CONTINUE zamiast Milter.ACCEPT od envrcpt ().

Q. Jest traceback Pythonie w pliku dziennika! Co się stało z moim e-mail?
A. Domyślnie po milter nie z untrapped wyjątku, wynik TEMPFAIL (451) zostanie zwrócona do nadawcy.Nadawca będzie ponowić próbę co godzinę lub tak przez kilka dni. Mam nadzieję, że ktoś zauważy traceback i obejść lub rozwiązać problem. Począwszy od milter-0.8.2, możesz zadzwonić milter.set_exception_policy (milter.CONTINUE) spowodować untrapped wyjątku kontynuować przetwarzanie przy następnej zwrotnego lub Milter zamiast. Dla kompletności, można również ustawić zasady wyjątek milter.REJECT.

Pytanie: Czytałem kilka notatek, takich jak „Sprawdź aktualne domeny dozwolony przez wewnętrznych nadawców do wykrywania komputerów zainfekowanych trojanami spamu.“ ale nie mógł zrozumieć, o co chodzi. Czy mógłbyś wyjaśnić treść?
A. Konfiguracja internal_domains określa, które MAIL FROM domen są używane przez połączeń wewnętrznych. Jeżeli wewnętrzny komputer próbuje użyć innej domeny, to zakłada się, że „Zombie“.

Oto wiersz dziennika próbki:

2005Jun22 12:01:04 [12430] odrzucenia: zombie PC na 192.168.100.171 wysyłania MAIL FROM debby@fedex.com
Nie, fedex.com nie korzysta pymilter, i nie ma nikogo o nazwie Debby na mojego klienta. Ale idiota za pomocą komputera na 192.168.100.171 został pobrany i zainstalowany jakiś głupi weatherbar / hotbar / aquariumscreensaver że faktycznie bot spam.
Opcja internal_domains jest proste, to zakłada wszystkie ważne nadawcy domen są wewnętrzne. SPF zapewnia znacznie większą ogólną kontrolę IP i pocztę z usług zewnętrznego email. Pymilter powinno wkrótce mieć funkcję lokalnej polityki na bardziej ogólnej kontroli wewnętrznej poczty.

Q. mail_archive nie działa. Albo ja nie rozumiem, jak to niby ma działać. Mam mail_archive = / var / mail / mail_archive w pymilter.cfg ale nic nigdy nie zostaje skierowana do / var / mail / mail_archive.
A. ‚mail‘ użytkownik musi mieć dostęp do zapisu. Awarie uprawnień powinny być rejestrowane jako traceback w milter.log jeśli tak nie jest.

Korzystanie z SPF

Pytanie: W jaki sposób mogę korzystać z wsparcia SPF?Sample.py milter nie wydaje się, aby z niego korzystać.
A. Pakiet milter zawiera kilka bardziej przydatnych milters.Spfmilter.py milter sprawdza SPF.Bms.py milter wspiera SPF, a także wiele innych rzeczy. Prędkość obrotowa RedHat ustawi prawie wszystko dla ciebie. W przypadku innych systemów:

Zorganizować, aby uruchomić spfmilter.py lub bms.py w tle (jako usługa być może) i przekierować dane wyjściowe i błędy w pliku dziennika. Na przykład, w systemie AIX będziesz chciał użyć SRC (kontroler zasobów systemu).
Kopiowanie spfmilter.cfg lub pymilter.cfg do / etc / mail lub katalogu uruchomić bms.py się i edytować go. Komentarze powinny wyjaśnić opcje.
Zacznij spfmilter.py lub bms.py w tle, jak ułożone.
Dodaj Xpythonfilter (lub cokolwiek skonfigurowany jako miltername) do sendmail.cf lub dodać INPUT_MAIL_FILTER do sendmail.mc. Regen sendmail.cf jeżeli używasz sendmail.mc i zrestartować sendmaila.
Umów się obracać plików dziennika i usunąć stare pliki defang w TempDir.RedHat RPM używa Logrotate do logów i prostego skryptu cron przy użyciu find do czyszczenia TempDir.
spfmilter.py działa jako usługa, a nie tylko SPF. Używa pliku dostępu do konfiguracji sendmaila odpowiedzi SPF jak bms.py, ale obsługuje tylko odrzucić i OK.

Czy mogę w jakiś sposób wyłączyć SPF sprawdzanie poczty wychodzącej?SPF milter zawsze pisze bezużyteczny (i złego) nagłówek odebrane-SPF podczas wysyłania poczty.
A. naukowy Odpowiedź: Proszę określić, co masz na myśli przez „wychodzące“.MTA otrzymuje transakcji przychodzącej poczty przez SMTP i albo wykonuje je za pośrednictwem lokalnego agenta dostawy lub przekazuje je do innego MTA. Możecie nazwać to „towarzyski“, gdy przekazuje się do innego MTA, ale nigdy nie jest SPF milter przywoływana „wychodzących“ połączeń, i nigdy nie może sprawdzić SPF. (Czasem chcesz sprawdzić SPF na połączenia wychodzące jak ostatniej kontroli minut, że własne rekord SPF jest poprawne, i trzeba użyć proxy SMTP lub inny MTA instancji, aby to zrobić.) Należy zauważyć, że biorąc pod uwagę połączenie przychodzące często powoduje zarówno lokalne dostawy i przekaźniki do innych MTA.

Przydatne odpowiedź: spfmilter.py nie sprawdza SPF dla połączeń przychodzących, które są „wewnętrzne“. Zdefiniować adresy IP, które są uważane za „wewnętrzne“ w konfiguracji (na przykład 192.168. *), A transakcje z użyciem autoryzacji SMTP są również uważane za wewnętrzne. Prawdopodobnie trzeba skonfigurować wewnętrznych źródeł email aby uniknąć fałszywych czeków SPF.

Q. bms.py wysyła SPF DSN przynajmniej raz dla domen, które nie publikują SPF. Jak zatrzymać ten problem?
Odpowiedź A. SPF jest kontrolowane przez / etc / mail / access (faktycznie plik podany z access_file w [SPF] sekcji pymilter.cfg). Odpowiedzi są OK, CBV, DSN, i odrzucają. DSN wysyła DSN.

Można zmienić domyślne ustawienia. Na przykład, mam:

SPF-Brak: Odrzucenie
SPF-Neutralny: CBV
SPF-Softfail: DSN
SPF-Permerror: DSN
Mam best_guess = 1, więc SPF żaden przekształca się PASS / neutralny dla odnośnika polityki, a nie 3 strajki (PTR, nie HELO, nie SPF) staje się „SPF NONE“ dla celów politycznych lokalnych (odebrane-SPF zawsze pokazuje nagłówek oficjalny wynik SPF.)
Możesz zmienić domyślne dla określonych dziedzin:

# Ci ludzie nie będą zwracać uwagę na CBVs tak …
SPF-Brak: cia.gov ODRZUC
SPF-Brak: fbi.gov ODRZUC
SPF-Neutralny: aol.com ODRZUC
SPF-Softfail: ebay.com ODRZUC
Korzystanie SRS

Q. SRS część nie wydają się działać jak zawsze, gdy próbuję uruchomić /etc/init.d/pysrs, mam to w /var/log/milter/pysrs.log:
ConfigParser.NoOptionError: Brak opcji „fwdomain“ w dziale: „SRS“
A. Musisz określić domenę do przodu – czyli domeny chcesz SRS przepisać rzeczy do.

Na przykład, mam:

# Konfiguracja SRS próbka
[SRS]
tajne = nie chcesz
maxage = 8
hashlength = 5
, baza danych = / var / log / milter / srs.db
fwdomain = bmsi.com
zaloguj = bmsi.com, mail.bmsi.com, gathman.org
SRS = bmsaix.bmsi.com, bmsred.bmsi.com, stl.gathman.org, bampa.gathman.org
Znak jest dla lokalnych domen, które są podpisane.Lista SRS jest dla innych domen, które masz sanitarnymi, i które muszą mieć SRS sprawdzone / cofnąć do odbić

Comments are closed.