PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iptables Problem



Bible Black
06.04.2010, 20:29
Ja, wie der Titel sagt habe ich ein Problem mit Iptables.
Es geht um einen Grenzrechner mit Squid + SquidGuard sowie Iptables - handelt sich um ein simples Firewall Projekt.
Squid und SquidGuard funktionieren top, nur sobald ich das Iptables Script starte, kriege ich nur noch ein "Netzwerk-Zeitüberschreitung" von Firefox (auf dem Rechner, der durch den Grenzrechner "geschützt" werden soll).
Hat vielleicht jemand eine Lösung für das Problem?


Hier mal das Script:

Zur Anmerkung 192.168.42.0 ist das Netz vom Rechner vor der Firewall, 192.168.178.0 ist mein Heimetz über das der Grenzrechner in's I-net geht.



#! /bin/sh

# Forwarding aktivieren #
#########################
echo "1" > /proc/sys/net/ipv4/ip_forward

# Ketten löschen, leeren und neu erstellen #
############################################
iptables -F #flush, alles leeren
iptables -F -t nat #flushen der Tabelle nat

iptables -F Own #flush, Kette leeren
iptables -X Own #leere Kette löschen
iptables -N Own #new, neue Kette erstellen
iptables -F Own #flush, Kette leeren

# LAN Einstellungen #
#####################
iptables -A Own -i eth1 -s ! 192.168.42.0/255.255.255.0 -j DROP # Alles verwerfen was keine LAN IP-Adresse hat
iptables -A Own -i eth1 -j ACCEPT # sonst alles erlauben was von eth1 kommt
iptables -A Own -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT # für Loopback wird nur 127.0.0.1 erlaubt
iptables -A Own -i eth0 -s 192.168.178.0/255.255.255.0 -j ACCEPT # Alles aus dem Ínternet verwerfen was die LAN IP hat

# Protokollports öffnen #
#########################
iptables -A Own -p tcp --dport 21 -j ACCEPT # ftp erlauben
iptables -A Own -p tcp --dport 25 -j ACCEPT # smtp erlauben
iptables -A Own -p tcp --dport 80 -j ACCEPT # http erlauben
iptables -A Own -p tcp --dport 110 -j ACCEPT # pop3 erlauben
iptables -A Own -p tcp --dport 143 -j ACCEPT # imap erlauben
iptables -A Own -p tcp --dport 443 -j ACCEPT # https erlauben


# Antworten zulassen #
######################
iptables -A Own -m state --state ESTABLISHED,RELATED -j ACCEPT


# ICQ Login Server sperren #
############################
iptables -A FORWARD -s 192.168.42.0/255.255.255.0 -d 255.188.0.0/255.255.0.0 -j DROP
iptables -A FORWARD -s 192.168.42.0/255.255.255.0 -d 64.12.0.0/255.255.0.0 -j DROP
iptables -A FORWARD -s 192.168.42.0/255.255.255.0 -d 85.16.0.0/255.255.0.0 -j DROP
iptables -A FORWARD -s 192.168.42.0/255.255.255.0 -d 209.85.0.0/255.255.0.0 -j DROP


# Own aktivieren #
##################
iptables -A INPUT -j Own
iptables -A FORWARD -j Own
iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT
iptables -P OUTPUT ACCEPT -t nat

# Squid Transparenter Proxy #
#############################
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

# NAT #
#######
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE


echo "IPTABLES ausgeführt"

dead_orc
06.04.2010, 20:58
Okay, vielleicht bin ich schwer von Begriff, aber hilf mir bitte mal auf die Sprünge:

Was zum Henker ist ein Grenzrechner? Meinst du damit das, was viele Menschen als "Router" bezeichnen?
Ist deine Netzwerkstruktur die folgende:

+-----------------+ +------------------+
| 192.168.42.0/24 |---- eth1 "Grenzrechner" eth0 ----| 192.168.178.0/24 |------ Router ------ Internet
+-----------------+ +------------------+


Generell kann ich spontan keinen Fehler finden, du könntest mal ein wenig mit dem LOG Target rumspielen, um zu gucken, bei welcher Regel die Pakete hängen bleiben (oder natürlich wireshark/tcpdump anschmeißen). Die Manpage von iptables rät übrigens von der Verwendung von -j MASQUERADE ab, wenn es sich vermeiden lässt (also, wenn man statische IPs hat - was du hast).

Bible Black
06.04.2010, 21:39
Okay, vielleicht bin ich schwer von Begriff
Nein, hast in beiden Fällen recht, mein Fehler.


Generell kann ich spontan keinen Fehler finden, du könntest mal ein wenig mit dem LOG Target rumspielen, um zu gucken, bei welcher Regel die Pakete hängen bleiben
Muss ich mir mal angucken, oder hast du vllt. so direkt nen Bsp. wie man das auf Iptables anwendet?


oder natürlich wireshark/tcpdump
Hab mal eben Wireshark angeschmissen und www.videolan.org angefragt, eine Antwort kommt sogar zurück, 88.191.250.2, allerdings sagt Firefox trotzdem Netzwerk-Zeitüberschreitung.


Die Manpage von iptables rät übrigens von der Verwendung von -j MASQUERADE ab, wenn es sich vermeiden lässt (also, wenn man statische IPs hat - was du hast).
Vorgabe, daher ist das in diesem Fall zu vernachlässigen.

dead_orc
07.04.2010, 17:06
Muss ich mir mal angucken, oder hast du vllt. so direkt nen Bsp. wie man das auf Iptables anwendet?

Naja, du könntest z.B. vor # Protokollports öffnen # ne Zeile iptables -A Own -j LOG einfügen. Dann bekommst du für jedes Paket, dass es an den vorigen Regeln vorbei geschafft hat, eine (lange) Zeile im Kernel Log. Wenn da das Paket dabei ist, das dir fehlt, ist der Fehler in den Regeln weiter unten...



Hab mal eben Wireshark angeschmissen und www.videolan.org angefragt, eine Antwort kommt sogar zurück, 88.191.250.2, allerdings sagt Firefox trotzdem Netzwerk-Zeitüberschreitung.
Wo hast du Wireshark angeschmissen, auf dem Router oder auf dem Rechner dahinter, der die Zeitüberschreitung bekommt? Wenn ersteres, sollte das Paket zwei mal auftauchen: Einmal als Eingang auf eth0 und einmal als Ausgang auf eth1. Wenn du es auf dem Client mit Zeitüberschreitung laufen hattest und er trotzdem ne Zeitüberschreitung hatte, ist irgendwas sehr strangely broken. o_O

Bible Black
07.04.2010, 22:50
Wo hast du Wireshark angeschmissen, auf dem Router oder auf dem Rechner dahinter, der die Zeitüberschreitung bekommt?
Auf dem Router. ;)

Naja, nach dem ich mir noch mal man iptables angeguckt habe, hät' ich mir am liebsten selbst in Gesicht geschlagen.



iptables -F -t nat
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE


Hätte eigentlich


iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

lauten müssen. :\ Jetzt läuft das Script auch brav zusammen mit Squid als Transp. Proxy und SquidGuard als Web-Filter. Jetzt müsste ich nur mal paar drops machen...

dead_orc
07.04.2010, 22:57
Auf dem Router. ;)

Naja, nach dem ich mir noch mal man iptables angeguckt habe, hät' ich mir am liebsten selbst in Gesicht geschlagen.



iptables -F -t nat
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE


Hätte eigentlich


iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

lauten müssen. :\ Jetzt läuft das Script auch brav zusammen mit Squid als Transp. Proxy und SquidGuard als Web-Filter. Jetzt müsste ich nur mal paar drops machen...

Okaaaay... Ich wusste, dass ich das -t nat immer direkt hinter iptables schreibe, ich wusste aber nicht, dass es Pflicht ist. Auch wenns Sinn macht, da iptables die Commandline IIRC sequenziell abarbeitet.

Anyway, was ich noch zu DROPs sagen wollte: Denk drüber nach, ob du DROP oder REJECT benutzen willst. REJECT ist in vielen Fällen praktischer, da es eine (sinnvolle?) Fehlermeldung zurück liefert und man nicht auf ein Timeout warten muss. DROPs sorgen mit Pech einfach nur dazu, dass die Software es weiter versucht, während ein "Port unreachable" die Software (welche auch immer) eher dazu bringen sollte, aufzugeben.