[Postfixbuch-users] MySQL und Restriction für gefälschtes EHLO

Christian Roessner christian at roessner-net.com
Sa Jan 26 11:12:35 CET 2008


Hallo liebe Liste,

dank der grandiosen Hilfe von Uwe Drießen, hat sich mein Mail-Setup 
stark verändert und ich habe versucht, möglichst alle Restrictions in 
der smtpd_recipient_restrictions unterzubringen. Diese selbst ist so 
strukturiert, dass

- Prüfe alles, was lokal zu prüfen geht
- Nimm dann evtl. MySQL-Abfragen hinzu
- Schließe mit Remote-Abfragen ab

in etwa eingehalten wird. Nun habe ich da einen kleinen Sonderfall:

smtpd_helo_restrictions =
         permit_mynetworks
         check_helo_access 
btree:/etc/postfix/maps/sender_access_fakelocal, 
proxy:mysql:/etc/postfix/mysql/check_helo_access.cf

Ich würde sehr gerne diesen Block ebenfalls entfernen und die 
check_helo_access Angabe wie folgt benutzen:

smtpd_recipient_restrictions =
         permit_mynetworks
         reject_non_fqdn_recipient
         reject_non_fqdn_sender
         reject_unknown_recipient_domain
         reject_unknown_sender_domain
         reject_unverified_recipient
         reject_unlisted_recipient
         permit_tls_clientcerts
         reject_unauthenticated_sender_login_mismatch
         reject_sender_login_mismatch
         permit_sasl_authenticated
         reject_unauth_destination
         check_client_access pcre:/etc/postfix/maps/dynip.pcre
         check_client_access pcre:/etc/postfix/maps/greylist.pcre
         reject_invalid_helo_hostname
         reject_non_fqdn_helo_hostname
         reject_unknown_helo_hostname
         reject_unknown_client_hostname
         reject_unknown_reverse_client_hostname
	***** Hier soll sie hin *****
         check_policy_service unix:private/policyd-spf
         check_policy_service inet:127.0.0.1:12525
         reject_rhsbl_sender dsn.rfc-ignorant.org

Und genau das klappt leider nicht mehr, weil dann folgende REJECTs im 
Log zu finden sind:

Jan 25 23:21:42 srv1 postfix/smtpd[17361]: NOQUEUE: reject: RCPT from 
fmmailgate05.web.de[217.72.192.243]: 554 5.7.1 
<christian at roessner-net.com>: Recipient address rejected: You are not 
roessner-net.com; from=<chrroessner at web.de> 
to=<christian at roessner-net.com> proto=ESMTP helo=<fmmailgate05.web.de>

Bevor ich es jetzt vergesse:
Postfix-Version: 2.4.5-3ubuntu1
MySQL-Version: 5.0.45-1ubuntu3.1
System: Ubuntu Gutsy

Die Query sieht derzeit wie folgt aus:

cat /etc/postfix/mysql/check_helo_access.cf
user = syscp
password = ********
dbname = syscp
query = SELECT 'REJECT You are not %s' FROM panel_domains WHERE 
domain="%s" LIMIT 1
hosts = unix:/var/run/mysqld/mysqld.sock

Bevor fragen aufkommen: Der Text wurde hier im Thunderbird leider 
umgebrochen, steht aber in einer Zeile.

Das Layout der Tabelle:

*************************** 1. row ***************************
   Field: id
    Type: int(11) unsigned
    Null: NO
     Key: PRI
Default: NULL
   Extra: auto_increment
*************************** 2. row ***************************
   Field: domain
    Type: varchar(255)
    Null: NO
     Key: MUL
Default:
   Extra:
*************************** 3. row ***************************
   Field: adminid
    Type: int(11) unsigned
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 4. row ***************************
   Field: customerid
    Type: int(11) unsigned
    Null: NO
     Key: MUL
Default: 0
   Extra:
*************************** 5. row ***************************
   Field: aliasdomain
    Type: int(11) unsigned
    Null: YES
     Key:
Default: NULL
   Extra:
*************************** 6. row ***************************
   Field: documentroot
    Type: varchar(255)
    Null: NO
     Key:
Default:
   Extra:
*************************** 7. row ***************************
   Field: ipandport
    Type: int(11) unsigned
    Null: NO
     Key:
Default: 1
   Extra:
*************************** 8. row ***************************
   Field: isbinddomain
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 9. row ***************************
   Field: isemaildomain
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 10. row ***************************
   Field: iswildcarddomain
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 11. row ***************************
   Field: subcanemaildomain
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 12. row ***************************
   Field: caneditdomain
    Type: tinyint(1)
    Null: NO
     Key:
Default: 1
   Extra:
*************************** 13. row ***************************
   Field: zonefile
    Type: varchar(255)
    Null: NO
     Key:
Default:
   Extra:
*************************** 14. row ***************************
   Field: parentdomainid
    Type: int(11) unsigned
    Null: NO
     Key: MUL
Default: 0
   Extra:
*************************** 15. row ***************************
   Field: openbasedir
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 16. row ***************************
   Field: openbasedir_path
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 17. row ***************************
   Field: safemode
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 18. row ***************************
   Field: speciallogfile
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:
*************************** 19. row ***************************
   Field: specialsettings
    Type: text
    Null: NO
     Key:
Default:
   Extra:
*************************** 20. row ***************************
   Field: deactivated
    Type: tinyint(1)
    Null: NO
     Key:
Default: 0
   Extra:

Hier mal ein Sample:

*************************** 1. row ***************************
                id: 2
            domain: roessner-net.com
           adminid: 1
        customerid: 1
       aliasdomain: NULL
      documentroot: /var/www/kunden/croessner/roessner-net.com/
         ipandport: 7
      isbinddomain: 1
     isemaildomain: 1
  iswildcarddomain: 0
subcanemaildomain: 1
     caneditdomain: 1
          zonefile: roessner-net.com.zone
    parentdomainid: 0
       openbasedir: 1
  openbasedir_path: 0
          safemode: 1
    speciallogfile: 0
   specialsettings:
       deactivated: 0

Nun komme ich dann auch schon gleich mal zur Frage ;-)

Kann mir irgendwer helfen, die Query korrekt zu formulieren, damit das 
alles so klappt, wie ich mir das oben gedacht habe? Natürlich läuft das 
hier gerade auf einem Low-Traffic-Server und ich könnte vermutlich auch 
mit Flatfiles arbeiten, aber genau das Setup läuft unter Hochlast bei 
einem Kunden und ich möchte liebend gerne, dass der MySQL-Server nicht 
für jeden sch*** Spammer kontaktiert werden muss.

http://www.accounts.de/cgi-bin/mailgraph.cgi

um nur mal ein Beispiel zu zeigen.

Ich danke euch vielmals im Voraus!

Gruß
Christian

-- 
Roessner Network Solutions (R.N.S.)

Licher Str. 19a
35394 Gießen

USt-IdNr.: DE225643613

Fon: +49 641 2097252
Fax: +49 641 2097253
Mobil: +49 171 3611230

URL: http://www.roessner-net.com/
PGP: http://www.roessner-net.com/0x6B929997.asc

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 252 bytes
Beschreibung: OpenPGP digital signature
URL         : <https://listi.jpberlin.de/pipermail/postfixbuch-users/attachments/20080126/0e7fd692/attachment.asc>


Mehr Informationen über die Mailingliste Postfixbuch-users