Sehen Sie denn im Livelog ein geDROPtes Paket?
TL;DR: Rufen Sie einfach an und halten Sie die Zugangsdaten für die Firewall bereit.
Wenn nicht: prüfen Sie, ob das Paket überhaupt an der FW ankommt:
Code: Alles auswählen
# tcpdump -i <EXTERNES-INTERFACE> -nnp host <IP-DER-GEGENSTELLE>
Möglichkeit 1: Nichts kommt an -> fertig
Möglichkeit 2: SYN-Paket ist zu sehen -> weiter gehts
Möglichkeit 3: SYN+SYNACK zu sehen -> fertig
die Reihenfolge beim Portforwarding in den iptables ist (grob gesagt):
nat-Table/PREROUTING-Chain -> filter-Table/FORWARD-Chain
Um zu sehen, an welcher Stelle das Paket verloren geht, prüfen Sie zuerst die nat/PREROUTING-Chain:
Code: Alles auswählen
# iptables -t nat -nvL PREROUTING | grep <INTERNE-IP-DES-SERVERS>
Die erste Spalte ist die Anzahl der Pakete, die von dieser Regel gematcht wurden. Steht da "0"... nunja... dann hat das Paket andere Eigenschaften, als Sie annehmen, dass es hat.
Sollte diese Regel schonmal gematcht haben, geht es weiter mit der filter/FORWARD-Chain:
Code: Alles auswählen
# iptables -t filter -nvL FORWARD | grep <INTERNE-IP-DES-SERVER>
Gleiches Spiel... steht in Spalte 1 eine "0" ist die FW-Regel inkorrekt.
Traf diese Regel hingegeben zu, schauen Sie mit tcpdump auf dem Internen Interface, ob das Paket da rausgeht:
Code: Alles auswählen
# tcpdump -i <INTERNES-INTERFACE> -nnp host <INTERNE-IP-DES-SERVERS>
gibt vier Möglichkeiten:
1. Nichts zu sehen -> passt nicht mit der matchenden FORWARD-Regel zusammen -> EVIL THINGS ARE HAPPENING -> Appliance mit Weihwasser besprühen -> fertig
2. ARP-Requests zu sehen -> der Server ist "aus" oder auf Layer 2 unsichtbar -> fertig
3. SYN-Pakete (
) zum Server sichtbar, kein SYNACK ([S.]) sichtbar -> der Server antwortet nicht -> fertig
4. SYN + SYNACK sichtbar -> weiter gehts
Es kommt also ein Antwortpaket an der FW an, aber die Verbindung kommt trotzdem nicht zustande. Es gilt zu prüfen, wo das Paket hin geroutet wird. Jetzt wird es anstrengend...
Da steht im Idealfall, dass über das Interface geroutet wird, über dass die Verbindung auch rein kam.
Hier muss geprüft werden, ob der Server (entweder die Quell-IP der Verbindung ODER die Interne IP des Servers [unwahrscheinlich]) vielleicht irgendwo anders hin geroutet wird.
Hier sind die eingerichteten Rule-Routen und Source-Routen hinterlegt. Wohin geroutet wird, kann man mit folgendem Befehl geprüft werden. Die <TABLE-ID> ist dabei die letzte Zahl in der jeweiligen Zeile (ip rule).
Finden Sie auf diese Art und Weise auch keinen Fehler bleibt nur noch die EVIL TRACE MAGIC!!!1111
Dazu aktivieren Sie das Tracing der Pakete mittels
Code: Alles auswählen
# iptables -t raw -I PREROUTING -s <IP-DER-GEGENSTELLE> -j TRACE
(Tauschen Sie das "-s" gegen ein "-d" sehen Sie entsprechend die Antwort-Pakete)
ACHTUNG: Vergessen Sie die Einschränkung auf die Quell-IP oder passiert da zu viel, wird das Syslog sehr voll werden...
Der Befehl um das Tracing zu deaktivieren ist:
Bei aktiviertem Tracing wird für jedes (!) Paket, welches auf die TRACE-Regel matcht jede (!) durchlaufene iptables-Regel ins Syslog geschrieben. Das ist viel Output. Sehr viel. Aber spätestens dort sieht man dann, an welcher Stelle das Paket verloren geht oder aus welchem Interface es fälschlicherweise geroutet wird.