SRS tarkvara postsrsd kasutamine Postfix keskkonnas

Allikas: Imre kasutab arvutit

Sissejuhatus

SRS (Sender Rewriting Scheme) http://www.openspf.org/SRS aitab remaileril töötada SPF'i kasutavate domeenide kirjadega. Käesolev tekst tutvustab postsrsd https://github.com/roehling/postsrsd tarkvara kasutamist Postfix keskkonnas.

Mõisted

  • SRS - Sender Rewriting Scheme
  • remailer - spetsialiseeritud postimasin, mis suunab ühele aadressile saabunud kirju edasi teisele aadressile; remailer ei sisalda postkasti; üldselt toimub see sisse tulnud kirja 'rcpt to' väärtuse asendamise abil (nt /etc/aliases failiga)
  • mail from - ümbriku saatja aadress
  • rcpt to - ümbriku saaja aadress
  • header From - kirja nn body osa päis, saatja aadress
  • header To - kirja nn body osa päis, saaja aadress

Tööpõhimõte

SRS tehnika aitab remailerit kahes osas

  • remailerist väljuva kirja 'mail from' peab sisaldab remaileri teenuse pakkuja domeeni
  • remailer peab oskama välja saadetud kirjale vastava võimaliku internetist tuleva veateate toimetada kirja algsele 'mail from' aadressile

Näited remaileritest

  • Mailman listserver - tundub, et Mailman ise sisaldab piisavat palju SRS instrumente ja postsrsd tarkvara kasutamine ei ole vajalik
  • @eesti.ee epostindus

Legacy edasisuunamine

Priit saadab kirja Imrele kasutades tema vana aadressi, kust on tehtud edasisuunamine Imre uuele aadressile.

             _____                                                 _____
            |     | mail from: priit@vana-sober.ee                |     | imre@uus-aadress.ee
            |  A  | 10.100.1.25                                   |  C  |
            |_____|                                               |_____|
  
                                      _____
                                     |     | imre@vana-aadress.ee
                                     |  B  | 10.200.1.25 
                                     |_____|

kus

  • arvutist A saadetakse välja kiri, 'mail from: priit@vana-sober.ee' ja 'rcpt to: imre@vana-aadress'
  • domeeni vana-sober.ee spf on 'v=spf1 ip4:10.100.1.25 -all'
  • domeeni vana-aadress.ee spf on 'v=spf1 ip4:10.200.1.25 -all'
  • kirju jõuab remailer arvutisse B ja /etc/aliases faili abil kirjutatakse rcpt to aadressi ringi; mail from aadress jääb samaks
rcpt to: imre@vana-aadress.ee -> imre@uus-aadress.ee
mail from: priit@vana-sober.ee -> priit@vana-sober.ee
  • kiri jõuab kohale arvutisse C; tekib probleem, et 'mail from' mõttes vana-sober.ee kiri tuli spf mõttes sobimatult ip aadressilt 10.200.1.25

SRS edasisuunamine

Priit saadab kirja Imrele kasutades tema vana aadressi; kust on tehtud edasisuunamine Imre uuele aadressile.

             _____                                                 _____
            |     | mail from: priit@vana-sober.ee                |     | imre@uus-aadress.ee
            |  A  | 10.100.1.25                                   |  C  |
            |_____|                                               |_____|
  
                                      _____
                                     |     | remailer
                                     |  B  | imre@vana-aadress.ee
                                     |_____| 10.200.1.25 

kus

  • arvutist A saadetakse välja kiri, 'mail from: priit@vana-sober.ee' ja 'rcpt to: imre@vana-aadress'
  • domeeni vana-sober.ee spf on 'v=spf1 ip4:10.100.1.25 -all'
  • domeeni vana-aadress.ee spf on 'v=spf1 ip4:10.200.1.25 -all'
  • kirju jõuab remailer arvutisse B ja /etc/aliases faili abil kirjutatakse rcpt to aadressi ringi
rcpt to: imre@vana-aadress.ee -> imre@uus-aadress.ee
  • postsrsd abil kirjutatakse mail from aadress ringi
mail from: priit@vana-sober.ee -> SRS0=wsq7=2A=vana-sober.ee=priit@vana-aadress.ee
  • kiri jõuab kohale arvutisse C; probleemi ole, vana-sober.ee kiri tuli 'mail from' muudetud väärtusega vana-aadress.ee ja spf mõttes sobivalt ip aadressilt 10.200.1.25

SRS edasisuunamisele internetist tuleva vastuse algsele mail from aadressile toimetamine

Priit saadab kirja Imrele kasutades tema vana aadressi; kust on tehtud edasisuunamine Imre uuele aadressile.

             _____                                                 _____                     
            |     | mail from: priit@vana-sober.ee                |     | imre@uus-aadress.ee
            |  A  | 10.100.1.25                                   |  C  |                    
            |_____|                                               |_____|                    
  
                                      _____                                               _____
                                     |     | remailer                                    |     | imre@vaga-uus-aadress.ee
                                     |  B  | imre@vana-aadress.ee                        |  D  | mida ei ole
                                     |_____| 10.200.1.25                                 |_____|


kus

  • arvutist A saadetakse välja kiri, 'mail from: priit@vana-sober.ee' ja 'rcpt to: imre@vana-aadress'
  • domeeni vana-sober.ee spf on 'v=spf1 ip4:10.100.1.25 -all'
  • domeeni vana-aadress.ee spf on 'v=spf1 ip4:10.200.1.25 -all'
  • kirju jõuab remailer arvutisse B ja /etc/aliases faili abil kirjutatakse rcpt to aadressi ringi
rcpt to: imre@vana-aadress.ee -> imre@uus-aadress.ee
  • postsrsd abil kirjutatakse mail from aadress ringi
mail from: priit@vana-sober.ee -> SRS0=wsq7=2A=vana-sober.ee=priit@vana-aadress.ee
  • kiri jõuab kohale arvutisse C ja sealt püütakse saata edasi arvutisse D, mis ebaõnnestub
  • arvuti C proovib mõnda aega ja saadab siis veateate kirja aadressile SRS0=wsq7=2A=vana-sober.ee=priit@vana-aadress.ee arvutisse B
  • arvuti B tuletab postsrsd tarkvara abiga SRS0=wsq7=2A=vana-sober.ee=priit@vana-aadress.ee aadressist algse saatja aadressi priit@vana-sober.ee ning krüpto ja ajatempli osa (wsq7 ja 2A) abil veendub, et asi on õige
  • arvuti B saadab veateate edasi algsele aadressile priit@vana-sober.ee

Seejuures

  • arvuti C koostatud veateate kirjas on 'mail from' on <> ja mille 'header From:' on 'MAILER-DAEMON ...', algsesse kohta jõuab see teade just sellisena
  • arvuti C koostatud veateate kirjas on 'rctp to' ja 'header To:' aadressiks 'SRS0=wsq7=2A=vana-sober.ee=priit@vana-aadress.ee'
  • arvuti B postsrsd + postfix teisendavad ja asendavad need mõlemad aadressiga 'priit@vana-sober.ee'

Väited

  • tavaliselt on kirja internetti saatev arvuti (kus toimib SRS) on sama, mis võtab võimalikud bounce'id internetist vastu; tundub ei kui sama SRS_SECRET väärtust kasutada, siis võivad need olla ka erinevad arvutid
  • postsrsd kasutab Postfixi canonical tabeleid, ja omakorda tcp-tüüpi variante neist
  • recipient_canonical_maps abil saab sisuliselt tekitada /etc/aliases funktsionaalsuse
  • srs eposti aadressi on kodeeritud aadress, kuhu postimasin saadab edasisuunatud kirja, selles mõttes tegu on võimalusega süsteemi väärkasutada
  • postsrsd tarkvara ei pruugi kasutada spetsialiseeritud remaileri juures, vaid see võiks olla asjakohane suvalises muu hulgas ainult natuke /etc/aliases abil kirju edasisuunavas arvutis
  • srs muutumise vastu open relay smtp sõlmeks aitab srs aadressi lisaks kodeeritud nn signatuur ja ajatempel
SRS0=wsq7=2A=gmail.com=imre.oolberg@moraal.ee

kus

  • wsq7 - signatuur
  • 2A - ajatempel

Tarkvara paigaldamine, seadistamine ja käivitamine

Tarkvara paialdamiseks sobib öelda

# apt-get install postsrsd

postsrsd seadistused asuvad failis /etc/default/postsrsd

# egrep -v "^$|^#" /etc/default/postsrsd 
SRS_DOMAIN=moraal.ee
SRS_EXCLUDE_DOMAINS=auul.pri.ee
SRS_SEPARATOR==
SRS_SECRET=/etc/postsrsd.secret
SRS_FORWARD_PORT=10001
SRS_REVERSE_PORT=10002
RUN_AS=postsrsd
CHROOT=/var/lib/postsrsd

kus

  • SRS_DOMAIN - millise domeeni peale teisendatud aadressid moodustatakse (moodustatud aadressi @ märgist paremale jääv osa)

Postfixiga integreerimiseks peab main.cf faili sisaldama muu hulgas

sender_canonical_maps = tcp:localhost:10001
sender_canonical_classes = envelope_sender

recipient_canonical_maps = tcp:localhost:10002
recipient_canonical_classes = envelope_recipient, header_recipient

local_header_rewrite_clients = static:all

kus

  • ilma 'local_header_rewrite_clients = static:all' parameetrita töötab kirja body 'From:' aadressi ümberkirjutamine vaid lokaalselt genereeritud kirjade jaoks; kuna bounce teated tulevad internetist, siis on see praktiliselt alati vajalik
  • recipient_canonical_classes = envelope_recipient, header_recipient - envelope_* ja header_* tähendavad, et tegeldakse vastavalt ümbriku mail from ja body osa header From: aadresside teisendamisega

TCP tabelite tööd saab kontrollida, teisendus

# postmap -q imre.oolberg@gmail.com tcp:localhost:10001
SRS0=wsq7=2A=gmail.com=imre.oolberg@moraal.ee

pöördteisendus

# postmap -q SRS0=wsq7=2A=gmail.com=imre.oolberg@moraal.ee tcp:localhost:10002
imre.oolberg@gmail.com

muutuseta teisendus

# postmap -q imre.oolberg@moraal.ee tcp:localhost:10001
imre.oolberg@moraal.ee

Kasutamine

Kirja saatmise testimiseks sobib öelda

$ sendemail -f priit@auul.pri.ee -t imre@moraal.ee -u 'test 36' -s 127.0.0.1 -m 'test 36' -o tls=no

kus

  • TODO

Lähtetekstist kompileerimine

Ettevalmistuseks peab olema

# apt-get install build-essentials make cmake

Pakkida .zip lahti kataloogi ja öelda

$ make

tulemusena tekib fail build/postsrsd, käivitamiseks tekistada

  • /etc/postsrsd.secret

ja öelda

$ ./postsrsd -f 10001 -r 10002 -d moraal.ee -s /etc/postsrsd.secret -a = -u imre -X

Tulemusena saab portidele 10001 ja 10002 esitada postmap abil päringuid.

Käivitusskript

# cat /etc/init.d/postsrsd 
#!/bin/sh
### BEGIN INIT INFO
# Provides:          bks
# Required-Start:    $network $local_fs $remote_fs $all
# Required-Stop:     $network $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: postsrsd
### END INIT INFO

case "$1" in
  start)
    echo "Starting postsrsd"
    su - postsrsd -c 'cd /opt/postsrsd/bin && ./postsrsd -f 10001 -r 10002 -d moraal.ee -s /etc/postsrsd.secret -a = -u postsrsd -X -D'
    ;;

  stop)
    echo "Stopping postsrsd"
    PID=`pgrep -u postsrsd postsrsd`
    if [ "X$PID" = "X" ]; then
      echo ""
    else
      kill $PID
    fi
    ;;

  *)
    echo "Usage: /etc/init.d/postsrsd { start | stop }"
    exit 1
esac

exit 0

Märkused

  • programmile tuttavad suvandid
$ /opt/postsrsd/bin/postsrsd -h
Sender Rewriting Scheme implementation for Postfix.

Implements two TCP lookup tables to rewrite mail addresses
as needed. The forward SRS is for sender envelope addresses
to prevent SPF-related bounces. The reverse SRS is for
recipient envelope addresses so that bounced mails can be
routed back to their original sender.

Usage: postsrsd -s<file> -d<domain> [other options]
Options:
   -s<file>       read secrets from file (required)
   -d<domain>     set domain name for rewrite (required)
   -a<char>       set first separator character which can be one of: -=+ (default: =)
   -f<port>       set port for the forward SRS lookup (default: 10001)
   -r<port>       set port for the reverse SRS lookup (default: 10002)
   -p<pidfile>    write process ID to pidfile (default: none)
   -c<dir>        chroot to <dir> (default: none)
   -u<user>       switch user id after port bind (default: none)
   -t<seconds>    timeout for idle client connections (default: 1800)
   -X<domain>     exclude additional domain from address rewriting
   -e             attempt to read above parameters from environment
   -D             fork into background
   -4             force IPv4 socket (default: any)
   -6             force IPv6 socket (default: any)
   -h             show this help
   -v             show version

Kasulikud lisamaterjalid