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
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