[Postfix-Virtual] Verzenden alleen vanaf eigen domein

Pagina: 1
Acties:

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 06-02 04:28

Gerco

Professional Newbie

Topicstarter
Ik ben bezig met de beveiliging van mijn postfix (2.2.5) installatie en wil het volgende bereiken:

Een gebruiker kan inloggen met ASMTP, waarna hij/zij mail mag versturen vanaf alle adressen van zijn domeinnaam. Ik heb namelijk virtual hosting op een paar dozijn domeinen en veel mensen gebruiken catch-all ontvangers. Die mensen willen natuurlijk ook vanaf die catch-all adressen kunnen verzenden...

Als ASMTP usernames gebruik ik nu de e-mail adressen van de gebruikers en dat moet ook zo blijven, ik kan nu niet opeens honderden users gaan vertellen dat ze een andere username moeten gaan gebruiken.

Ik heb bijvoorbeeld als e-mail adres "gerco@domein.nl" en dat is dus ook mijn ASMTP username. Ik wil mail sturen vanaf "1ofanderadres@domein.nl" en dat moet van postfix dus mogen. Ik krijg het zonder problemen voor elkaar om te verbieden vanaf andere adressen dan "gerco@domein.nl" te mailen, maar dat is te streng.

Ik heb het volgende gedaan:
/etc/postfix/main.cf
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
# Restrict MAIL FROM: addresses to the SASL authenticated owners of those
# addresses. This makes sure that user@domain can only send mail from
# his own address and not from any random address. Allow all mail originating
# from the local network (this server).
smtpd_sender_restrictions =
    permit_mynetworks,
    warn_if_reject,
    reject_sender_login_mismatch,
    permit

# This is the lookup table for the authenticated senders and the addresses they own.
smtpd_sender_login_maps =
    mysql:/etc/postfix/mysql-smtpd-sender-login-maps.cf


En de mysql map file: /etc/postfix/mysql-smtpd-sender-login-maps.cf
code:
1
2
3
4
5
user            = ********
password        = ********
dbname          = ********
query           = SELECT email FROM users WHERE email='%s'
hosts           = ********


Die tabel heeft (onder andere) de volgende velden: email, domain waar het volledige mailadres resp. de domeinnaam in staan. Op deze manier mag je alleen mailen vanaf je eigen adres, maar hoe krijg ik het nu voor elkaar om te kunnen mailen vanaf alle adressen binnen je eigen domein, maar niet vanaf een ander domein?

Postfix doet de volgende query:
"SELECT email FROM users WHERE email='1ofanderadres@domein.nl'" en als dat niet werkt deze: "SELECT email FROM users WHERE email='@domein.nl'". Hij verwacht daarbij de username die mail probeert te versturen terug als resultaat.

Helaas is die username niet in de query in te voegen, anders kon ik het volgende doen: "SELECT email FROM users WHERE email='<asmtp-username>' AND domain='%d'" Waarbij %d de domeinnaam van het FROM e-mail adres is en <asmtp-username> de username waarmee de client inlogt. Helaas kan dat dus niet (of toch wel??).

Een andere optie is een extra tabel met daarin zoiets:
@domein gerco@domein.nl
@domein sandra@domein.nl
@domein iemandanders@domein.nl
etc etc etc

Die tabel zou ik dan moeten vullen met entries voor alle users van alle domeinen en gesynched houden met de users tabel, dat is niet erg handig natuurlijk. Bovendien gaat het ook niet werken, want er zijn dan meerdere matches voor "@domein.nl" en postfix wil graag de juiste username terug hebben. Natuurlijk weet ik in die query niet wat die username moet zijn.

Weet iemand misschien hoe ik dit voor elkaar kan krijgen?

[ Voor 23% gewijzigd door Gerco op 07-05-2006 21:50 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 06-02 04:28

Gerco

Professional Newbie

Topicstarter
:( pas 8 views en 0 replies na 24 uur. Gebruikt er niemand Postfix?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 06-02 04:28

Gerco

Professional Newbie

Topicstarter
Aangezien er bar weinig reactie op mijn vraag komt (blijkbaar gebruikt er niemand postfix?), zal ik zelf het antwoord maar geven:

Postfix SMTP Access Policy Delegation:
Met deze access delegation kun je een extern programma validaties laten doen op alle via SMTP binnenkomende mail, dus ook uitgaande mail van je authenticated users. Postfix geeft je programma een aantal "key=value" pairs via de connectie (tcp of unix socket) en je replied met 1 key=value pair:

Postfix geeft de volgende pairs mee:
request=smtpd_access_policy
protocol_state=RCPT
protocol_name=SMTP
helo_name=some.domain.tld
queue_id=8045F2AB23
sender=foo@bar.tld
recipient=bar@foo.tld
recipient_count=0
client_address=1.2.3.4
client_name=another.domain.tld
reverse_client_name=another.domain.tld
instance=123.456.7
Postfix version 2.2 and later:
sasl_method=plain
sasl_username=you
sasl_sender=
size=12345
ccert_subject=solaris9.porcupine.org
ccert_issuer=Wietse Venema
ccert_fingerprint=C2:9D:F4:87:71:73:73:D9:18:E7:C2:F3:C1:DA:6E:04
Postfix version 2.3 and later:
encryption_protocol=TLSv1/SSLv3
encryption_cipher=DHE-RSA-AES256-SHA
encryption_keysize=256
[empty line]

In mijn geval gaat het dus om de italic gedrukte properties. Ik kan dan in mijn database opzoeken of deze user (sasl_username) mail mag versturen vanaf dit sender adres en als dat mag geef ik "action=dunno" mee. Indien het niet mag, geef ik "action=reject User not permitted to send from this address." terug.

Die "dunno" (Dont know) is om ervoor te zorgen dat een eventuele volgende rule in de postfix config de mail nog kan blokkeren. Als je "permit" geeft, worden de volgende regels niet meer gecontroleerd.

Tot zover de theorie, nu coden. Over een paar dagen rapporteer ik wel of het gelukt is (en zet ik de code ergens online).

[ Voor 10% gewijzigd door Gerco op 17-05-2006 14:16 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!