PF blocked ungewollt

blackthunder

Active Member
Hallo,

auf einem Mailserver habe ich pf laufen. Der Server wird zum Versenden von Newslettern (z.T über 30k Empfänger) verwendet. Diese werden via phpmailer vom Webserver aus über den Mailserver gesendet.
Allerdings treten gehäuft sporadische Fehler beim versenden auf. phpmailer spuckt dann lediglich den Fehler "SMTP Fehler: Konnte keine Verbindung zum SMTP-Host herstellen." aus. Der Fehler tritt nur bei aktiviertem pf auf. Jetzt habe ich testweise den pf auf dem Webserver deaktiviert und die pf.conf des Mailservers sieht aktuell wie folgt aus:
Code:
#-- Interfaces --#
ExtIf = "nfe0"
IntIf = "lo0"

#-- Laufzeitoptionen --#
set loginterface $ExtIf
set skip on $IntIf

#-- Rules --#
pass in all
pass out all

/etc/rc.d/pf status gab mir folgendes aus:
Status: Enabled for 0 days 00:00:15 Debug: Urgent

Interface Stats for nfe0 IPv4 IPv6
Bytes In 5229 0
Bytes Out 5840 0
Packets In
Passed 71 0
Blocked 0 0
Packets Out
Passed 52 0
Blocked 0 0
...

Status: Enabled for 0 days 03:23:13 Debug: Urgent

Interface Stats for nfe0 IPv4 IPv6
Bytes In 172429830 0
Bytes Out 160208561 0
Packets In
Passed 402957 0
Blocked 2 0
Packets Out
Passed 404567 0
Blocked 0 0
...
Seitdem ich die pf.conf so gestutzt habe ist kein Fehler mehr aufgetreten, aber wie kann es sein, dass obwohl pf alles durchlassen soll 2 Pakete geblockt wurden?
Gibt es eine Möglichkeit mit der Logoption von pf herauszubekommen warum und was geblockt wurde?

Zuvor hatte ich folgende pf.conf im Einsatz, welche innerhalb von 8h einen Fehler produzierte.
Code:
#-- Interfaces --#
ExtIf = "nfe0"
IntIf = "lo0"

#-- Laufzeitoptionen --#
set loginterface $ExtIf
set skip on $IntIf

#-- Makros / Tables --#
table <firewall> { self }
table <trusted> { aaa.aaa.aaa.aaa bbb.bbb.bbb.bbb }

pass = "{ smtp ssh pop3 imap }"
icmp_types = "echoreq"

#-- Rules --#
block in all

pass in quick from <trusted> to any
pass in quick on $ExtIf proto tcp from any to any port smtp
pass in proto tcp from any to any port $pass

pass out all
Ich sehe hier keinen Fehler und kann mir nicht vorstellen, warum pf eine Verbindung vom Webserver nicht durchlässt, und dies eben sporadisch.:confused:
Der table <trusted> enthält übrigens die IP-Adresse des Webservers.

Evtl. sieht ja jemand anders den Fehler...
Viele Grüße
blackthunder
 
Schalte pflog ein und Du hast mehrere Optionen.

  1. Überwache es mit tcpdump -v -i pflog0 in Echtzeit.
  2. Oder nachträglich. Das kannst Du mit tcpdump -v -r /var/log/pf.today anschauen.
 
Schalte pflog ein und Du hast mehrere Optionen.

  1. Überwache es mit tcpdump -v -i pflog0 in Echtzeit.
  2. Oder nachträglich. Das kannst Du mit tcpdump -v -r /var/log/pf.today anschauen.

1. gibt mit u.a aus, dass ausgehende smtp-Verbindungen geblockt werden, obwohl alle ausgehenden Verbindungen durchgelassen werden sollen, oder habe ich da was falls verstanden?

2. da bekomme ich ein tcpdump: bad dump file format
more /var/lof/pf.log : block drop in all [ Evaluations: 4103 Packets: 1032 Bytes: 147261 States: 0 ]

Ich habe vorhin folgendes versucht:

pfctl -d
pfctl -F all
tcpdump -n -e -ttt -v -i pflog0
pfctl -e

Ergebnis u.a.:

074364 rule 0/0(match): block out on nfe0: (tos 0x0, ttl 64, id 31433, offset 0, flags [DF], proto TCP (6), length 40) xx.xx.xx.xx.60511 > xx.xx.xx.xx.25: [|tcp]

Aktuell sieht die pf.conf so aus:
Code:
#-- Interfaces --#
ExtIf = "nfe0"
IntIf = "lo0"

#-- Laufzeitoptionen --#
set loginterface $ExtIf
set skip on $IntIf

#-- Makros / Tables --#
table <firewall> { self }
table <trusted> { aaa.aaa.aaa.aaa.... }

#-- Open ports --#
tcp_pass = "{ smtp ssh pop3 imap }"

#-- Rules --#
block log (all) all
pass out all

pass in quick from <trusted> to any
pass in quick on $ExtIf proto tcp from any to any port smtp
pass in proto tcp from any to any port $tcp_pass
 
Vielleicht klappt da auch was mit der Interface nicht. nvidia-Netzwerkkarten sind nach meinem Erfahrungen und ihrem Ruf ziemlich schlecht.
Das erklärt nicht, warum die Pakete bei ausgeschaltetem PF durchkommen, aber vielleicht wäre eine andere NIC den Versuch wert.
 
hi

die openbsd FAQ ist dein bester freund.

http://www.openbsd.org/faq/pf/options.html

ich gehe davon aus das die maxmale anzahl an states erreicht wird
und dann die fw zumacht.

kannst du feststellen mit
pfctl -ss | wc -l
oder
pfctl -si | grep "current entries"

in deinem falle wuerde ich mal vorschlagen :
set limit { states 30000 } # bezueglich deinen 30k emppfaengern.

als tip am rande ....... versende die mail erstmal via relay an localhost
und lass den rest vom sendmail machen.

holger
 
Zurück
Oben