Postfwd kasutamine operatsioonisüsteemiga Debian

Allikas: Imre kasutab arvutit

Sissejuhatus

Tarkvara postfwd http://postfwd.org/ on Perl keeles programmeeritud SMTP tulemüür, mis on integreeritud Postfixiga policy protokolli abil; st postfwd on policy server. postfwd kasutusalaks on muu hulgas

  • sissetulevatele kirjadele sageduspiirangu rakendamine (nt kirju ajaühikus per src ip address, per mail from address)
  • src ip address, mail from ja rcpt to address alusel (ja nende kombinatsioonide alusel) kirjade sisenemise kontrollimine
  • dns blocklistide ja whitlistide rakendamine

Tööpõhimõte

Postfwd töötab deemon protsessina ja teda juhib seadistusfail. Postfwd on integreeritud Postfixiga kasutades Postfix policy protokolli.

                               internet
  
                                  |
                                __|__
                               |     | tulemüür
                               |     |
                               |_____|
                                  |
                                  |
                                  |
        ----|--------------|------|-----------|-----
            |              |                  |
          __|__          __|__              __|__
         |     |        |     |            |     |
         |     |        |     |            |     |
         |_____|        |_____|            |_____|
  
        frontend        postfwd            backend
       postimasin      port 10045         postkastid

kus

  • tulemüür - nö tavaline tulemüür (nö tcp/ip)
  • frontend smtp server, mis sisenevate kirjade kontrollimisel muu hulgas kasutab postfwd abi põhimõtteliselt üle võrgu pöördudes postfwd teenuse poole
  • postfwd server pakub postfwd teenust; tema poole pöördumisel kasutatakse nn Postfix policy protokolli, mille käigus edastatakse mitte kogu kiri, aga komplekt smtp päiseid
  • backend serverisse jõuavad frontend smtp serveris kontrolli läbinud kirjad

Postfwd vastuseks on muu hulgas sellised variandid

  • kirja võib vastu võtta (DUNNO)
  • saatjale anda ajutine veateade (nt sageduspiirangu puhul)
  • kirja vastuvõtmisest keeldumine (nt spam puhul)
  • lisada kirjale smtp päis ja vastu võtta (nt PREPEND abil)
  • tavaliselt töötab postwd teenus frontend smtp serveri protsessina

Tarkvara paigaldamine

Tarkvara paigaldamiseks sobib öelda

# apt-get install postfwd

Tulemusena tekib failisüsteemi

  • /etc/default/postfwd - postfwd deemoni tööd üldiselt juhtiv seadistusfail (millisel pordi kuulab, kuidas logib jms)
  • link /usr/sbin/postfwd -> /etc/alternatives/postfwd -> /usr/sbin/postfwd2
  • kasutaja:grupp postfw:postfw

Postfwd deemoni seadistamine

Postfwd käivitamist juhib seadistusfail /etc/default/postfwd, nt sellise sisuga

STARTUP=1

# Config file
CONF=/etc/postfix/postfwd.cf
# IP where listen to
INET=127.0.0.1
# Port where listen to
PORT=10045
# run as user postfwd
RUNAS="postfw"
# Arguments passed on start (--daemon implied)
ARGS="--summary=600 --cache=600 --cache-rdomain-only --cache-no-size"

kus

  • CONF=/etc/postfix/postfwd.cf - kirjade liikumist kontrollivad reeglid
  • ARGS - deemoni tööd kontrollivad suvandid
  • võib olla alguses lisada ARGS järele veel ka --verbose

postfwd logib vaikimisi /var/log/mail.* failidesse.

Liidestamine Postfixiga

Postfixiga liidestamiseks sobib kasutada nt smtpd_recipient_restrictions direktiivi, paigutades ta viimasele postitsioonile

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
  check_policy_service inet:127.0.0.1:10045

kus

  • check_policy_service näitab, et policy kontrolliks tuleb pöörduda aadressil 127.0.0.1 port 10045 töötava postfwd deemoni poole

Postfwd reeglite seadistamine

Reeglid asuvad failis /etc/postfix/postfwd.cf ning reegel koosneb sellistest elementidest

ID ; tingimused ; action

nt

id=RULE-03 ; sender=priit@auul.pri.ee; recipient=priit@kibana.auul.pri.ee; action=REJECT kirja ei saadetud edasi

kus

  • id peab olema unikaalne, see kirjutatakse ka logisse ja võimaldab debugimist hõlpsamini
  • reegli rakendumiseks peavab kõik tingimused olema täidetud
  • action näitab tegevust (REJECT keeldub kirja vastu võtmast, DUNNO ei tee midagi jne, vt http://www.postfix.org/access.5.html)

Reeglites tehtud muudatuste kehtestamiseks sobib öelda

# /etc/init.d/postfwd restart

või õigemini

# systemctl status|stop|start postfwd

Kasulikud lisamaterjalid

Tunnustele vastavate kirjade vastuvõtu keelamine

Postfwd tööd kontrollivad reeglid, üldiselt kontrollitakse reegleid järjest ning esimene action näidatud tegevusega lõpetatakse, nt

# cat /etc/postfix/postfwd.cf
id=RULE-01 ; sender=mart@auul.pri.ee; action=REJECT kirja ei saadetud edasi
id=RULE-02 ; recipient=root@kibana.auul.pri.ee; action=REJECT kirja ei saadetud edasi
id=RULE-03 ; sender=priit@auul.pri.ee; recipient=priit@kibana.auul.pri.ee; action=REJECT kirja ei saadetud edasi

Reeglite esitamiseks

# postfwd -f /etc/postfix/postfwd.cf -C
Rule   0: id->"RULE-01"; action->"REJECT kirja ei saadetud edasi"; sender->"=;mart@auul.pri.ee"
Rule   1: id->"RULE-02"; action->"REJECT kirja ei saadetud edasi"; recipient->"=;root@kibana.auul.pri.ee"
Rule   2: id->"RULE-03"; action->"REJECT kirja ei saadetud edasi"; sender->"=;priit@auul.pri.ee"; recipient->"=;priit@kibana.auul.pri.ee"

kus

  • mail from aadressiga mart@auul.pri.ee kirjad blokeeritakse
  • rcpt to aadressiga root@kibana.auul.pri.ee kirjad blokeeritakse
  • mail from priit@auul.pri.ee ja rcpt to priit@kibana.auul.pri.ee kirjad blokeeritakse
  • natuke ebaselge on, mis puhul tuleks kasutada = ja mis puhul == operaatorit, ideeliselt peaks olema esimene omistamine ja teine võrdlus, aga katse näitab, et päris nii see nagu pole; reeglina kasutatakse käesolevas tekstis ainult = operaatorit

src ip ja rcpt to alusel läbilubamine + sageduspiirang

src ip ja rcpt to alusel läbilubamine + sageduspiirang rakendamiseks sobib kasutada sellist seadistust

id=EVAL-01 ; action=set(SRC_IP_IK_AUUL_EE=1)

&&WL_SRC_IP_IK_AUUL_EE { client_address=file:/etc/postfix/wl-src-ip-ik-auul-ee.txt; };

id=RULE-00 ; &&WL_SRC_IP_IK_AUUL_EE; action=set(SRC_IP_IK_AUUL_EE=0);

id=RULE-01 ; SRC_IP_IK_AUUL_EE = 0; recipient=^[0-9]{11}@kibana.auul.pri.ee$ ; action=DUNNO
id=RULE-02 ; SRC_IP_IK_AUUL_EE = 1; recipient=^[0-9]{11}@kibana.auul.pri.ee$ ; action=REJECT ip aadressilt $$client_address ei ole lubatud  isikukood@kibana.auul.pri.ee aadressile kirju saata

id=RULE-03 ; SRC_IP_IK_AUUL_EE = 0; recipient=@kibana.auul.pri.ee$; action=DUNNO
id=RULE-04 ; SRC_IP_IK_AUUL_EE = 1; recipient=@kibana.auul.pri.ee$; action=rate(client_address/5/300/450 4.7.1 only 5 recipients per 5 minutes allowed)

ning

# cat /etc/postfix/wl-src-ip-ik-auul-ee.txt
10.0.1.1
10.0.1.2

kus

  • id=EVAL-01 - väärtustatakse nn muutuja SRC_IP_IK_AUUL_EE 'false' väärtusega (vaikeväärtus)
  • &&WL_SRC_IP_IK_AUUL_EE - kirjeldatakse mitmeelemendiline muutuja (tõsi, antud juhul see väga erilist efekti ei anna)
  • id=RULE-00 - kui kliendi aadress on nimekirjas, siis SRC_IP_IK_AUUL_EE väärtustakse 0 ('true')
  • id=RULE-01 - kui kliendi aadress on nimekirjas ning rcpt to aadress on kujul isikukood@kibana.auul.pri.ee, siis lubatakse kiri läbi ilma piiranguteta
  • id=RULE-02 - kui kliendi aadress ei ole nimekirjas ning rcpt to aadress on kujul isikukood@kibana.auul.pri.ee, siis kirja ei lubata läbi mingitel tingimustel ja kasutajale antakse veateade 5xx
  • id=RULE-03 - kui kliendi aadress on nimekirjas ning rcpt to aadress on lõpuga @kibana.auul.pri.ee, siis lubatakse kiri läbi ilma piiranguteta
  • id=RULE-04 - kui kliendi aadress ei ole nimekirjas ning rcpt to aadress on lõpuga @kibana.auul.pri.ee, siis rakendatakse sageduspiirangut (5/300/450 - viis kirja 300 sekundi jooksul per ip aadress, mis üle lähevad saavad 450 smtp ajutise veateate)

Testimine

Mitte lubatud ip aadressilt kirja saatmise katse paistab selline

# sendemail -f imre@moraal.ee -t 37003212713@auul.pri.ee -u test_4 -m 'test 4' -s 10.204.62.114:25 -o tls=no
Mar 30 01:07:36 haldus sendemail[24788]: WARNING => The recipient <37003212713@auul.pri.ee> was rejected by the mail server, error follows:
Mar 30 01:07:36 haldus sendemail[24788]: WARNING => Received:   554 5.7.1 <37003212713@auul.pri.ee>: Recipient address rejected: 
  ip aadressilt 10.146.76.121 ei ole lubatud isikukood@auul.pri.ee aadressile kirju saata

Analoogilised sissekanded tehakse postiserveri logisse.

Otseselt serveri testimiseks sobib öelda

# nc 127.0.0.1 10045 </usr/share/doc/postfwd/request.sample
action=DUNNO

kus

# cat /usr/share/doc/postfwd/request.sample
ccert_fingerprint=
size=64063
helo_name=english-breakfast.cloud9.net
reverse_client_name=english-breakfast.cloud9.net
queue_id=
encryption_cipher=
encryption_protocol=
etrn_domain=
ccert_subject=
request=smtpd_access_policy
protocol_state=RCPT
recipient=someone@domain.local
instance=6748.46adf3f8.62156.0
protocol_name=ESMTP
encryption_keysize=0
recipient_count=0
ccert_issuer=
sender=imre@kibana.auul.pri.ee
client_name=english-breakfast.cloud9.net
client_address=95.163.127.178

kus

  • lõpus on vajalik tühi rida, mille lõpetab reavahetus
# postfwd --dumpcache

%rate_cache -> %client_address=10.80.96.209 -> @list          -> 'RULE-04+5_300'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @action   -> '450 4.7.1 only 5 recipients per 5 minutes allowed'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @count    -> '5'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @maxcount -> '5'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @rule     -> 'RULE-04'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @time     -> '1461537624.75926'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @ttl      -> '300'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @type     -> 'rate'
%rate_cache -> %client_address=10.80.96.209 -> %RULE-04+5_300 -> @until    -> '1461537924.75926'
# postfwd --dumpstats

[STATS] postfwd2::cache 1.35: 6 queries since 0 days, 01:38:02 hours
[STATS] Requests: 0.0/min last, 0.0/min overall, 0.0/min top
[STATS] Hitrates: 0.0% requests, 0.0% dns, 0.0% rates
[STATS] Contents: rate=1

[STATS] postfwd2::policy 1.35: 6 requests since 0 days, 01:38:02 hours
[STATS] Requests: 3.61/min last, 0.06/min overall, 3.61/min top
[STATS] Dnsstats: 0.00/min last, 0.00/min overall, 0.00/min top
[STATS] Hitrates: 0.0% ruleset, 0.0% parent, 0.0% child, 16.7% rates
[STATS] Timeouts: 0.0% (0 of 0 dns queries)
[STATS]   6 matches for id:  EVAL-01
[STATS]   6 matches for id:  RULE-04

Kasulikud lisamaterjalid