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

IPtables Problem (DHCP)

Hallo Linux Gemeinde,

Ich habe folgendes Problem:
Ich habe eine Linuxrouter mit iptables und Suse Linux 9.2 eingerichtet. Er hat zwei Interfaces (eth0, ippp0). Er soll als Internetgateway und als DHCP Server für ein kleines Netzwerk fungieren. eht0 ist die Netzwerkkarte zum LAN und ippp0 ist eine ISDN Fritz Karte zum Internet. Internet funktioniert soweit ganz gut. Nur die kommunikation zum lokalen LAN klappt noch nicht so ganz. Ich kann ihn nicht anpingen und kann keine DHCP Anfragen aus dem LAN machen. Im Iptables script habe ich ICMP für Ping und udp/tcp für DHCP Port 67/68 erlaubt.
Im Script gehe ich so vor, dass ich zunächst die Default Policy für Input,Output,Forward auf Accept setze. Danach werden zuerst die Forwards definiert, dann die Inputs und dann die Outputs. Am Ende wird Masquerading noch aktiviert. Ausserdem kommen am Ende noch diese zwei Regeln:
$IPTABLES -A INPUT -i ippp0 -j REJECT
$IPTABLES -A INPUT -i eth0 -j REJECT
Damit wird alles andere, was nicht auf eine Regel passt, weggeworfen bzw. rejected.

Hier das Script im Ganzen:

#! /bin/sh

echo "1" > /proc/sys/net/ipv4/ip_forward # Initialisierung des Forwardings
IPTABLES=/usr/sbin/iptables # pfad zu iptables
$IPTABLES -F
# -F bedeutet alle Regeln der chains (INPUT, OUTPUT, FORWARD) loeschen. Sonst werden beim neueinlesen dieses Scriptes die Regeln dazugehängt und die Regelliste würde immer länger werden.

$IPTABLES -F -t nat
# -t nat bedeutet alle Regeln der Tabelle nat loeschen
$IPTABLES -X

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

##################################################################################
# NUN wird definiert, was alles geforwardet und geroutet (FORWARD, POSTROUTE) werden darf

$IPTABLES -A FORWARD -i eth0 -p tcp --sport 1024: --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -i eth0 -p tcp --sport 1024: --dport 81 -j ACCEPT
# HTTP erlauben

# Das Kürzel -A bedeutet dass diese Regel am Ende der Regelkette angehängt wird

##################################################################################
# Nun wird definiert, was alles direkt in den Router darf (also mit INPUT)

$IPTABLES -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
# DNS Anfragen vom LAN (also Schnittstelle eht0) zulassen
$IPTABLES -A INPUT -i eht0 -p udp --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i eht0 -p tcp --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i eht0 -p tcp --dport 68 -j ACCEPT
$IPTABLES -A INPUT -i eht0 -p udp --dport 68 -j ACCEPT
# DHCP Anfragen vom LAN zulassen
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Packete die zusammengehören dürfen rein
$IPTABLES -A INPUT -i lo -j ACCEPT
# Loopback erlauben
$IPTABLES -A INPUT -p icmp -j ACCEPT
# Ping erlauben
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# Fehlermeldung von Ping erlauben
$IPTABLES -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
# HTTPS ( Port 443) erlauben
$IPTABLES -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT
# Webmin (Port 10000) vom Netzwerk erlauben
$IPTABLES -A INPUT -i eth0 -p tcp --dport 5800 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p tcp --dport 5801 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p tcp --dport 5900 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p tcp --dport 5901 -j ACCEPT
# VNC ( Port 5800, 5801, 5900, 5901) vom Netzwerk erlauben
##################################################################################
# Nun wird definiert, was alles durch das OUTPUT darf

$IPTABLES -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
# DNS Anfragen ins LAN (also Schnittstelle eht0) zulassen
$IPTABLES -A OUTPUT -o eht0 -p tcp --dport 67 -j ACCEPT
$IPTABLES -A OUTPUT -o eht0 -p udp --dport 67 -j ACCEPT
$IPTABLES -A OUTPUT -o eht0 -p tcp --dport 68 -j ACCEPT
$IPTABLES -A OUTPUT -o eht0 -p udp --dport 68 -j ACCEPT
# DHCP Anfragen ins LAN zulassen
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# Loopback Output erlauben
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Packete, die zusammengehören dürfen raus
$IPTABLES -A OUTPUT -p icmp -j ACCEPT
# Ping darf raus
$IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# Felermeldung für Ping nach draussen erlauben

# NAT - MASQUERADING aktivieren#
################################
$IPTABLES -A POSTROUTING -t nat -o ippp0 -j MASQUERADE # was rausgeht wird maskiert

# alles verwerfen, was auf keine bisherige regel gepasst hat
$IPTABLES -A INPUT -i ippp0 -j REJECT
$IPTABLES -A INPUT -i eth0 -j REJECT


echo " Firewall gestartet"



##########################################

Es sieht so aus, als ob die Regel für DHCP gar nicht beachtet wird. Weil, wenn ich diese Zeile $IPTABLES -A INPUT -i eth0 -j REJECT, am Ende meines Scripts, deaktiviere, dann funktioniert das DHCP. Aber ich will ja nur dass erlauben was wirklich darf und alles andere soll verboten werden.
Also, währe nett, wenn mir jemand helfen könnte.

Mfg Thomas
 

Martin Breidenbach

Ultimate Guru
linuxtommy schrieb:
# DNS Anfragen ins LAN (also Schnittstelle eht0) zulassen
$IPTABLES -A OUTPUT -o eht0 -p tcp --dport 67 -j ACCEPT
$IPTABLES -A OUTPUT -o eht0 -p udp --dport 67 -j ACCEPT
$IPTABLES -A OUTPUT -o eht0 -p tcp --dport 68 -j ACCEPT
$IPTABLES -A OUTPUT -o eht0 -p udp --dport 68 -j ACCEPT

eht0 ? Nicht eth0 ?
 

wenf

Hacker
du gibst hier nur destinationsports 67 und 68 an

wenn ich mich recht erinnere sendet der Client seinen Request von port 67 an die Broadcast-Adresse an port 68 und der Server antwortet dann von port 68 an die mac-Addr des Clients an port 67

ein Renew der DHCP - LEASE erfolgt jedoch nicht mehr über Boradcasts, sonder über die IP - des Servers

(ausgenommen die Lease ist abgelaufen / dann ist es aber kein renew)
 

ThomasF

Hacker
Hi,

also die Regeln oben sind nun wirklich sehr allgemein gehalten, aber sie sollten laufen. Der Hinweis von Martin ist IMHO der Fehler ( eht) .....

Wenn Du Dein nächstes Firewall Script schreibst kannst Du ja mal die Regeln etwas spezifischer aufstellen ...

http://www.oucs.ox.ac.uk/network/dhcp/firewall.xml.ID=firewall

Um Fehler bei der Systax zu vermeiden schau Dir doch mal dies an :

http://www.fwbuilder.org/

So long

ThomasF
 
Oben