• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Bei Änderung der FW-Regeln bestehende Verbindung beenden

dehe

Newbie
Folgendes Problem:

in der Firewall siehts folgendermassen aus:

iptables -t nat -I PREROUTING -j DROP
iptables -t nat -I PREROUTING -s xxx.xxx.xxx.xxx -j ACCEPT

wenn ich jetzt folgendes mache:

iptables -t nat -D PREROUTING -s xxx.xxx.xxx.xxx -j ACCEPT

werden bestehende Verbindungen, z.B. von Shoutcast, nicht beendet
- wie
kann man bewirken, dass beim Sperren einer vorher freigegebenen IP
die bestehenden TCP-Verbindungen beendet werden?
 

Frankie777

Advanced Hacker
Üblicherweise filtert man in der filter table und nicht im nat.
Ebenso ist die FORWARD und INPUT chain der üblich Ort um zu filtern und nicht die PREROUTING chain.

Wenn man das anders macht muß man genau wissen was man tut.
 
OP
D

dehe

Newbie
es geht aber explizit um NAT regelnd - das filtern über INPUT/FORWARD hat nicht den gewünschten Efffekt erzielt.
 

Frankie777

Advanced Hacker
In der FORWARD und INPUT chain kannst Du filtern. In der NAT chain geht es nicht für bestehende Verbindungen.
Oder machst Du ein REDIRECT?
Dann hebe das REDIRECT auf und drope die Pakete in der INPUT oder FORWARD chain.

Was willst Du eigentlich machen?
 
OP
D

dehe

Newbie
REDIRECT: nicht, dass ich wüsste - das NAT für einzelne Arbeitsplätze mus dynamisch freigeben und wieder gesperrt werden. Wenn man mit iptables -I FORWARD -s xxx.xxx.xxx.xxx -J ACCEPT ne einzelne IP freigibt, dann geht das nicht, wenn man mit iptables -I FORWARD -j ACCEPT alle Rechner freigibt, geht es. (default policy DROP)
 

Frankie777

Advanced Hacker
einfachste Variante:

einzelne IP sperren
iptables -F
iptables -P FORWARD DROP
iptables -A FORWARD -s $LAN_IP -j DROP
iptables -A FORWARD -s $LAN_NET -j ACCEPT

oder
einzelne IP erlauben
iptables -F
iptables -P FORWARD DROP
iptables -A FORWARD -s $LAN_IP -j ACCEPT

Die NAT table ist für Dein Vorhaben nicht geeignet.
 
OP
D

dehe

Newbie
ok... aber das problem ist halt, dass es eben so nicht geht - vom verhalten her könnte man meinen, dass die IP nach dem POSTROUTING und vor dem FORWARD schon masqueriert wird (die regel mit -s xxx.xxx.xxx.xxx wird einfach ignoriert)
 

Frankie777

Advanced Hacker
Dann hat Dein Regelwerk an anderer Stelle ein Problem.
Das abfiltern über FORWARD über die source-IP ist vollkommen unproblematisch, auch bei masquerade.
 
OP
D

dehe

Newbie
hmmm... hier mal die Regeln:


Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:22
ACCEPT tcp -- anywhere 169.254.1.1 tcp dpt:80
ACCEPT tcp -- anywhere anywhere tcp dpt:1000
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP tcp -- anywhere anywhere tcp option=!2 flags:SYN/SYN
input_rule all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
ACCEPT gre -- anywhere anywhere
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
forwarding_rule all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere

Chain OUTPUT (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
output_rule all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain forwarding_rule (1 references)
target prot opt source destination

Chain input_rule (1 references)
target prot opt source destination

Chain output_rule (1 references)
target prot opt source destination






Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:67
ACCEPT all -- anywhere xxx.xxx.xxx.xxx
ACCEPT all -- anywhere 169.254.1.1
ACCEPT tcp -- anywhere anywhere tcp dpt:1000
DNAT all -- anywhere anywhere to:169.254.1.1
prerouting_rule all -- anywhere anywhere

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
postrouting_rule all -- anywhere anywhere
MASQUERADE all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain postrouting_rule (1 references)
target prot opt source destination

Chain prerouting_rule (1 references)
target prot opt source destination
 

Frankie777

Advanced Hacker
Der -L Output ist immer schwer zu lesen, da Infos fehlen.

Du machst DNAT all -- anywhere anywhere to:169.254.1.1
Wer ist 169.254.1.1 ?
Im der INPUT chain erlaubst Du Pakete mit src-IP 169.254.1.1 auf TCP/80.
Eine Regel von den beiden ist mit Sicherheit überflüssig.

Dann ist establised related Filterung in der FORWARD chain, aber keine state NEW Regeln.

OUTPUT Filterung ist nur bedingt sinnvoll, macht es aber kompliziert und erzeugt gerne unnötige Fehler.

Schreib mal was zur Topologie, aber wenn man PREROUTING und OUTPUT entfernt und in der FORWARD chain stateful filtert wird es funktionieren.
 
OP
D

dehe

Newbie
169.254.1.1 is der Router, auf dem das ganze läuft - damit , wenn keine explizite freigabe erfolgt, auf die homepage auf dem router weitergeleitet wird.
Na ja, mit ner mischung aus FORWARDING und PREROUTING rule gehts jetzt - vielen vielen vielen Dank!

das andere werd ich dann mal testen...
 
Oben