Tak trochu detailnější popis, konečně na to mám pořádně čas.
SCheck_domain1
Nový ruleset s názvem Check_domain1
R 192.168.$+ $@ OK
jestli je na začátku IP adresy 192.168. , tak Check_domain1 skončí se stavem OK, jestli není, pokračuje se dál bez akce
R 10.10.$+ $@ OK
jestli je na začátku IP adresy 10.10. , tak Check_domain1 skončí se stavem OK (nezapomínat na tečku před $, jinak by sedělo třeba 10.100.... 10.101..... atd
R $* $#error $@ 5.7.1 $: "550 Relaying denied"
jestli IP adresa nezačíná s žádným z předchozích, tak se provede výchozí akce pro kontrolovanou doménu - konec Check_domain1 s chybou.
SLocal_check_mail
ruleset Local_check_mail - je standardně volán z rulesetu check_mail, který se volá automaticky při ověřování MAIL FROM
R $* @ $* $: $2
vstupem Local_check_mail je mailová adresa, toto ji rozdělí na jméno a doménu a dál pošle jen doménu
R domena.tld $@ $>Check_domain1 $&{client_addr}
jestli je doména "domena.tld" tak zavolej Check_domain1 a skonči - jestli doména neodpovídá, akce se neprovádí a pokračuje se dál
na toto místo je možné dopsat další domény jednoduchým zkopírováním tohoto řádku a záměnou domena.tld
je možné zavolat buď stejný Check_domain1, nebo pokud jsou adresy pro další doménu jiné, analogicky se založí například Check_domain2
$&{client_addr} je funkce sendmailu, která jako vstup pro Check_domain1 předá IP adresu, která chce email odeslat
R $* $@ OK
pokud doména není žádná z kontrolovaných, pustí zbytek emailů dál bez omezení
snad je to všechno, nakonec je to celkem primitivní, když se do toho člověk ponoří
debug se dá provést killnutím sendmailu a jeho spuštšním s parametry
sendmail -bD -d21.2
následně se dá otestovat telnetem:
telnet mail_server 25
a postupným zadáním příkazů do telnetu
EHLO adresa_mail_serveru
MAIL FROM: testovaci@email.tld
sendmail by měl vypsat debug informace a na konci by mělo být poznat, jestli testovací adresa byla schválena. Jako adresu pro testování se do konfigurace zadá adresa, ze které se připojujeme - klidně 127.0.0.1, pokud testujeme přímo z mailserveru, pokud zadáváme celou adresu bez "masky", podmínka výše vypadá takto:
R 127.0.0.1 $@ OK
nebo můžeme zkusit například
R 127.0.0.$+ $@ OK
Ještě upozorňuji, že sendmail mezi pravou a levou stranou rewrite rules POŽADUJE TABULÁTOR(y), s mezerami NEBUDE FUNGOVAT!
a ještě doplnění, kdyby byla potřeba maska například 10.10.0.0/23, musela by se zadat na dva řádky jako 10.10.0.$+ a 10.10.1.$+ . Pro masku /17 by se muselo vytvořit 128 jednotlivých řádků od 10.10.0.$+ po 10.10.127.$+ .