Ich habe eine Anwendung, die auf Port 7162 auf SNMP-Traps wartet. Die Traps kommen auf Port 162 an, daher habe ich diese Umleitung in meinen iptables:
-A PREROUTING -p udp -m udp --dport 162 -j REDIRECT --to-ports 7162
Muss ich eingehende Verbindungen auf Port 162 auch explizit zulassen mit
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
Manchmal funktioniert es nur mit der ersten Zeile, manchmal nicht. Ich versuche herauszufinden, woran das liegen könnte.
Antwort1
Die erste Regel sollte ausreichen – es sei denn, Sie beschränken den Zugriff auf Port 7162 INPUT
irgendwie in der Kette.
Tatsächlich sollte Ihr UDP-Paket nicht einmal die INPUT
Kette passieren, wenn der Zielport auf 162 eingestellt ist, zumindest laut dem folgenden Diagramm:https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
Außerdem scheint Ihre INPUT
Regel zu kompliziert. UDP ist ein zustandsloses Protokoll, Sie haben es also mit einer Art von Zuständen innerhalb des Netzfilters zu tun. Ich habe nicht einmal eine richtige Dokumentation darüber gefunden, was diese Zustände bedeuten, wenn sie mit UDP verwendet werden.
Versuchen Sie, beide Ports mit tcpdump
einem Programm auf Hinweise zu überwachen (Hinweis:Wenn Sie Pakete in es kann nur das eingehende Paket auf Port 162 sehen, selbst das Abhören im Loopback zeigt die Umleitung nicht an).PREROUTING
der Kette verlieren, erkennt tcpdump sie nicht
Bearbeiten:Sie probieren die Regel doch nicht bei Verbindungen innerhalb einer einzelnen Maschine aus, oder? PREROUTING
wird bei Nur-Localhost-Verbindungen nicht durchlaufen.