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
En de mysql map file: /etc/postfix/mysql-smtpd-sender-login-maps.cf
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?
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!