![]() |
iptables rule für Verbindungen mit wechelnden Ports
Hallo
Ich möchte einen Server mit SuSE 9.0 mit iptables schützen, habe da aber ein Problem. Ich habe auf dem Server HylaFAX und auf Windowsrechnern einen Druckertreiber der mit HylaFAX kommunizieren kann. Es funktioniert alles solange die Firewall augeschaltet ist. Aktiviere ich iptables geht faxen nicht mehr. Der Grund ist das HylaFAX erstmal auf Port 4559 lauscht. Habe dafür eine INPUT und OUTPUT Rule für Dest- bzw. Source Port 4559. Anscheinend machen sich die beiden dann über diese Sitzung aus auf welchen Ports die Daten transportiert werden und bauen eine Verbindung auf diesen neuen Ports auf. Jetzt ist es nur leider so das sowohl Source- als auch Dest-Port immer wieder anders sind (also ich keine Rule auf Portbasis definieren kann). Kann mir da wer weiterhelfen wie ich dafür eine Rule erstellen kann. |
Hallo,
versuchs mal mit: iptables -A INPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT Du kannst die Regeln auch an eine IP-Adresse (-s 123.123.123.123) oder MAC-Adresse (-m mac --mac-source 00:00:00:00:00:00) binden. Zum "Schutz" eines Rechners sollten jedoch die Dienste ordentlich konfiguriert und upgedated werden, d.h. regelmäßige Security Patches, unnötige Dienste deaktivieren, etc. - eine Packet-Inspection hilft da nicht so viel. |
Ich hab das probiert, doch leider ohne Erfolg. Ich hab mir mit Ethereal den Datenstrom angesehen. Der Datentransfer läuft wie FTP. Der HylaFAX Server hört auf 4559. Dies ist die Controllsession. Hier werden die Commands und die Responses übertragen. Die Datei, die gefaxt werden soll, wird über eine weitere Session übertragen, wobei sich Source- und Destport jedesmal ändern. Leider ist das eine new Session und beginnt mit der TCP Negotiation (SYN - SYN/ACK - ACK). Daher zieht die Rule "--state ESTABLISHED,RELATE" nicht. D.h. ich würde NEW benötigen. Wenn ich das auf der obigen Rule angebe, ohne weitere Einschränkung, dann kann ich gleich die Firewall abdrehen. Bei FTP wäre das noch relativ einfach weil die Daten immer über Port 20 laufen. Bei HylaFAX ist das leider nicht so. Könnte eine Idee dazu gut gebrauchen.
|
Versuch mal:
modprobe ip_conntrack_ftp ports=21,4559 iptables -A INPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT Wenn das Protokoll analog FTP ist, sollte das funktionieren. Folgende Infos würden helfen: Was werden denn für Ports verwendet ? 4557 bis 4559 oder irgendwelche ab 1024 ? Verwendet der Client aktive oder passive Connections ? Oder logge mal die abgewiesenen Verbindungen mit -j LOG mit und poste das Ergebnis. |
Ich hoffe das ist jetzt alles halbwegs lesbar.
Hier der Ablauf ohne Firewall 192.168.1.99 ist mein Windows Client 192.168.1.2 ist der Server (Obelix) Die Controllsession läuft zwischen den Ports 1054 und 4559. Die Datensession Port 1055 und 32799. Ich habe den Output um die unnötigen Zeilen gekürzt. 1 0.000000 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [SYN] Seq=3327721618 Ack=0 Win=64240 Len=0 2 0.000281 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [SYN, ACK] Seq=3645753806 Ack=3327721619 Win=5840 Len=0 3 0.000648 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [ACK] Seq=3327721619 Ack=3645753807 Win=64240 Len=0 : 10 20.065762 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [PSH, ACK] Seq=3645753807 Ack=3327721619 Win=5840 Len=74 11 20.066487 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [PSH, ACK] Seq=3327721619 Ack=3645753881 Win=64166 Len=11 12 20.066590 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [ACK] Seq=3645753881 Ack=3327721630 Win=5840 Len=0 : 18 20.101007 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [PSH, ACK] Seq=3327721646 Ack=3645753956 Win=64091 Len=6 19 20.101153 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [PSH, ACK] Seq=3645753956 Ack=3327721652 Win=5840 Len=48 20 20.102927 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [SYN] Seq=3332378345 Ack=0 Win=64240 Len=0 21 20.103186 192.168.1.2 192.168.1.99 TCP 32799 > 1055 [SYN, ACK] Seq=3658669636 Ack=3332378346 Win=5840 Len=0 22 20.103549 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [ACK] Seq=3332378346 Ack=3658669637 Win=64240 Len=0 23 20.104200 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [PSH, ACK] Seq=3327721652 Ack=3645754004 Win=64043 Len=6 24 20.139622 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [ACK] Seq=3645754004 Ack=3327721658 Win=5840 Len=0 25 20.144328 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [PSH, ACK] Seq=3645754004 Ack=3327721658 Win=5840 Len=56 26 20.145151 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [PSH, ACK] Seq=3332378346 Ack=3658669637 Win=64240 Len=512 27 20.145299 192.168.1.2 192.168.1.99 TCP 32799 > 1055 [ACK] Seq=3658669637 Ack=3332378858 Win=6432 Len=0 : 148 20.180066 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [PSH, ACK] Seq=3332409578 Ack=3658669637 Win=64240 Len=512 149 20.180188 192.168.1.2 192.168.1.99 TCP 32799 > 1055 [ACK] Seq=3658669637 Ack=3332410090 Win=16080 Len=0 150 20.180633 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [PSH, ACK] Seq=3332410090 Ack=3658669637 Win=64240 Len=469 151 20.180752 192.168.1.2 192.168.1.99 TCP 32799 > 1055 [ACK] Seq=3658669637 Ack=3332410559 Win=16080 Len=0 152 20.181196 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [FIN, ACK] Seq=3332410559 Ack=3658669637 Win=64240 Len=0 153 20.181296 192.168.1.2 192.168.1.99 TCP 32799 > 1055 [FIN, ACK] Seq=3658669637 Ack=3332410560 Win=16080 Len=0 154 20.181757 192.168.1.99 192.168.1.2 TCP 1055 > 32799 [ACK] Seq=3332410560 Ack=3658669638 Win=64240 Len=0 155 20.299213 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [ACK] Seq=3327721658 Ack=3645754060 Win=63987 Len=0 156 20.299512 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [PSH, ACK] Seq=3645754060 Ack=3327721658 Win=5840 Len=46 157 20.300085 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [PSH, ACK] Seq=3327721658 Ack=3645754106 Win=63941 Len=6 158 20.300175 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [ACK] Seq=3645754106 Ack=3327721664 Win=5840 Len=0 159 20.311521 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [PSH, ACK] Seq=3645754106 Ack=3327721664 Win=5840 Len=45 160 20.312091 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [PSH, ACK] Seq=3327721664 Ack=3645754151 Win=63896 Len=23 : 173 20.317386 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [PSH, ACK] Seq=3645754367 Ack=3327721826 Win=5840 Len=23 174 20.317836 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [FIN, ACK] Seq=3327721826 Ack=3645754390 Win=63657 Len=0 175 20.318150 192.168.1.2 192.168.1.99 TCP 4559 > 1054 [FIN, ACK] Seq=3645754390 Ack=3327721827 Win=5840 Len=0 176 20.318604 192.168.1.99 192.168.1.2 TCP 1054 > 4559 [ACK] Seq=3327721827 Ack=3645754391 Win=63657 Len=0 ================================================== ======================================== Folgend das FW Log der gestrigen Versuche. Hier sieht man eben komplett unterschiedliche Ports (3352, 3352)= Jul 18 00:25:32 obelix kernel: INPUT_Chain IN=eth0 OUT= MAC=00:e0:18:b1:de:c3:00:0b:6a:08:ae:ad:08:00 SRC=192.168.1.99 DST=192.168.1.2 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=8145 DF PROTO=TCP SPT=3352 DPT=32933 WINDOW=64240 RES=0x00 SYN URGP=0 Jul 18 00:25:35 obelix kernel: INPUT_Chain IN=eth0 OUT= MAC=00:e0:18:b1:de:c3:00:0b:6a:08:ae:ad:08:00 SRC=192.168.1.99 DST=192.168.1.2 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=8296 DF PROTO=TCP SPT=3352 DPT=32933 WINDOW=64240 RES=0x00 SYN URGP=0 Jul 18 00:25:41 obelix kernel: INPUT_Chain IN=eth0 OUT= MAC=00:e0:18:b1:de:c3:00:0b:6a:08:ae:ad:08:00 SRC=192.168.1.99 DST=192.168.1.2 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=8606 DF PROTO=TCP SPT=3352 DPT=32933 WINDOW=64240 RES=0x00 SYN URGP=0 Folgend die aktiven FW Rules (auch gekürzt): -A INPUT -p tcp -m tcp --dport 4559 -j ACCEPT -A INPUT -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -j LOG --log-prefix "INPUT_Chain " --log-level notice -A INPUT -j DROP -A OUTPUT -p tcp -m tcp --sport 4559 -j ACCEPT -A OUTPUT -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -j LOG --log-prefix "OUTPUT_Chain " --log-level notice -A OUTPUT -j DROP Am LOG sieht man aber das die Pakete in der INPUT Chain abgewiesen werden. |
|
Nach langem herumprobieren hab ich es jetzt esndlich geschafft. Hatte anfangs das Problem das iptable_conntrack_ftp ohne port parameter geladen wurde (anscheinend spielt auch die Reihenfolge eine Rolle). Ich lade jetzt iptable_conntrack_ftp port=4559 am ende der modules.conf.local und jetzt komme ich damit auch durch die Firewall
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag