PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iptables: Port sperren auf Zieladresse



Windi
24.02.06, 21:31
Hallo,

ich habe einen einfachen Router (RIP) realisiert. Dieser routet mir ein /24 Netz auf ein zweites Interface.

Auf diesem zweiten Interface habe ich nun 254 Adressen, die ich gerne über Iptables spezifisch schützen möchte:

IP 192.168.0.1 hat nur FTP offen
IP 192.168.0.2 hat FTP, HTTP, SSH offen
IP 192.168.0.40 hat MySQL offen

Nochmals zur "bildlichen" Verdeutlichung:

[Internet Uplink]----[eth0 - Router - eth1]----[/24 Netz]


Der Datentransfer kommt vom Internetuplink zum eth0, dort wird das /24 Netz weiter geroutet auf eth1.
Alle Rechner vom /24 Netz sollen aber vollen Zugriff nach außen haben, nur von außen her sollen eben IP spezifisch Ports gesperrt werden. Der Router dient hier sowohl als Firewall, als auch als Router.

Etwas kompliziert, sorry, aber ich hoffe einer hat eine Lösung für mich.

mfg alex

geronet
25.02.06, 10:11
Sollte wohl nicht so schwer sein:

iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.1 --dport 20:21 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.2 --dport 80 -j ACCEPT
usw..
Und dann ein REJECT ganz unten, noch dazu ein ip-forward und nun sollte es funktionieren.

Grüsse, Stefan

Windi
25.02.06, 10:56
Hallo,

danke für die schnelle Hilfe, bin in Iptables nicht so bewandert :(

mfg alex

Windi
25.02.06, 21:22
Hallo,

ich habe mich heute schon recht schlau gemacht, was das Thema betrifft und auch verschiedene Kombinationen ausprobiert.

Folgende Frage stellt sich noch:

/sbin/iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.54 --j REJECT
/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.1.54 --dport 80 --j ACCEPT

Mit der ersten Regel sperr ich mal alles, mit der zeiten möchte ich allerdings HTTP wieder freischalten.
Leider funktioniert dieser Ablauf nicht.

/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.1.54 --dport 80 --j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.54 --j REJECT

Schreibe ich es jedoch so, dann wird der Port 80 ohne Probleme offen gelassen.

Kann ich nicht vorher alles sperren und nachher die einzelnen Ports öffnen? o_O

mfg alex

geronet
26.02.06, 11:08
Mit -A (append) bei iptables hängst du die Regel an die Liste dran, und netfilter wandert die Liste (chain) von oben nach unten ab, und das was als erstes zutrifft wird verwendet.

>Kann ich nicht vorher alles sperren und nachher die einzelnen Ports öffnen?
Kannst du schon, obs dir was bringt ist die Frage :ugly:

Machs einfach so, du schreibst dir ein kleines Script, wo alle Befehle drinstehen und schreibst ganz unten für jede chain

iptables -A <chain> -j LOG --log-prefix "<chain-name>: "
iptables -A <chain> -j REJECT

Und drüber schreibst du die entsprechenden Regeln zum erlauben der Pakete, getrennt nach jeder chain. Alles was nun nicht erlaubt ist landet in der Log-Datei, und somit kannst du feststellen was du noch erlauben musst oder was nicht.

Grüsse, Stefan