iptables - default policy - Server macht dicht

worker

König
Beiträge
848
Moin zusammen,

beisse mir hier seit etwa drei Tagen die Zähne an iptables aus.

Hier die Regeln, die beim Booten (oder manueller Script-Ausführung)
erstellt werden:
Code:
#!/bin/bash

# Definieren der Interfaces/Sources:
INET_IFACE="eth2"
LAN_IFACE="eth0"
LAN_SOURCE="10.0.0.0/8"
LAN_SERVER_IP="10.0.0.254"
INET_SERVER_IP="192.168.1.2"
INET_SERVER_SOURCE="192.168.1.0/24"
INET_SOURCE="0/0"

# Sonstige Definitionen:
IPTABLES="/sbin/iptables"

# ====================

# Lösche alle existierenden Rules:
echo -n "ALLE Firewall-Rules löschen ... "
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
echo "[OK]"

# Loopback-Traffic zulassen:
echo -n "Firewall-Rule: Lo-Traffic zulassen ... "
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
echo "[OK]"

# Port 22 (ssh) von Interfaces [$LAN_IFACE] & [$INET_IFACE] ankommend/abgehend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 22 vom LAN UND WAN (Interface: $LAN_IFACE / $INET_IFACE) aus ... "
$IPTABLES -A INPUT -i "$LAN_IFACE" -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i "$LAN_IFACE" -p udp --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -o "$LAN_IFACE" -p tcp --sport 22 -j ACCEPT
$IPTABLES -A OUTPUT -o "$LAN_IFACE" -p udp --sport 22 -j ACCEPT

$IPTABLES -A INPUT -i $INET_IFACE -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p udp --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --sport 22 -j ACCEPT
$IPTABLES -A OUTPUT -o $INET_IFACE -p udp --sport 22 -j ACCEPT
echo "[OK]"

# Port 53 (domain) Vom Interface [$INET_IFACE] und [$LAN_IFACE] ankommend/ausgehend erlauben
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 53 eingehend/ausgehend vom DMZ/WAN (Interface: $INET_IFACE) ... "
$IPTABLES -A INPUT -i $INET_IFACE -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p udp --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $INET_IFACE -p udp --sport 53 -j ACCEPT
echo "[OK]"

echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 53 eingehend und ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 53 -j ACCEPT
echo "[OK]"

# Port 67/68 (dhcp) vom Interface [$INET_IFACE] ankommend blockieren:
echo -n "Firewall-Rule [IN]: Erlaube Port 67/68 eingehend/ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 67:68 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 67:68 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 67:68 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 67:68 -j ACCEPT

#$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 68 -j ACCEPT
#$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 68 -j ACCEPT
#$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 68 -j ACCEPT
#$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 68 -j ACCEPT
echo "[OK]"

# Port 80 (http) Vom Interface [$LAN_IFACE] auf Port 81 umleiten:
echo -n "Firewall-Rule [PRE]   : Redirect WWW-Anfragen vom LAN zum Intranet-HttpServer auf Port 81 umleiten ... "
$IPTABLES -t nat -A PREROUTING -s $LAN_SOURCE -p tcp -d  $LAN_SERVER_IP --dport 80 -j REDIRECT --to-port 81
$IPTABLES -t nat -A PREROUTING -s $LAN_SOURCE -p udp -d  $LAN_SERVER_IP --dport 80 -j REDIRECT --to-port 81
# ... und vom INET_IFACE auch:
#$IPTABLES -t nat -A PREROUTING -s $INET_SOURCE -p tcp -d  $INET_SERVER_IP --dport 80 -j REDIRECT --to-port 81
#$IPTABLES -t nat -A PREROUTING -s $INET_SOURCE -p udp -d  $INET_SERVER_IP --dport 80 -j REDIRECT --to-port 81
echo "[OK]"

# Port 81 (http) vom Interface [$INET_IFACE] ankommend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 81 ankommend/ausgehend vom DMZ/WAN  (Interface: $INET_IFACE) ... "
$IPTABLES -A INPUT -i $INET_IFACE -p udp --dport 81 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p tcp --dport 81 -j ACCEPT
$IPTABLES -A OUTPUT -o $INET_IFACE -p udp --sport 81 -j ACCEPT
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --sport 81 -j ACCEPT
echo "[OK]"

# Port 137 (netbios-ns?) vom Interface [$LAN_IFACE] ankommend/ausgehend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 137 ankommend/ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 137 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 137 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 137 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 137 -j ACCEPT
echo "[OK]"

# Port 138 (netbios-dgm) vom Interface [$LAN_IFACE] ankommend/ausgehend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 138 ankommend/ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 138 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 138 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 138 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 138 -j ACCEPT
echo "[OK]"

# Port 139 (netbios-ssn) vom Interface [$LAN_IFACE] ankommend/ausgehend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 139 ankommend/ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 139 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 139 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 139 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 139 -j ACCEPT
echo "[OK]"

# Port 445 (microsoft-ds) vom Interface [$LAN_IFACE] ankommend/ausgehend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 445 ankommend/ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 445 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 445 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 445 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 445 -j ACCEPT
echo "[OK]"

# Port 3128 (proxy) vom Interface [$LAN_IFACE] ankommend/ausgehend erlauben:
echo -n "Firewall-Rule [IN/OUT]: Erlaube Port 3128 ankommend/ausgehend vom LAN (Interface: $LAN_IFACE) ... "
$IPTABLES -A INPUT -i $LAN_IFACE -p udp --dport 3128 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -p tcp --dport 3128 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p udp --sport 3128 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -p tcp --sport 3128 -j ACCEPT
echo "[OK]"

# Redirect aller WWW-Anfragen (Port 80) zum Squid-Server auf Port 3128:
echo -n "Firewall-Rule [PRE]: Redirect WWW-Anfragen (vom LAN: Port 80) zum WWW-Server (auf Port: 3128) umleiten ... "
$IPTABLES -t nat -A PREROUTING -s $LAN_SOURCE -p tcp ! -d $LAN_SERVER_IP --dport 80 -j REDIRECT --to-port 3128
$IPTABLES -t nat -A PREROUTING -s $LAN_SOURCE -p udp ! -d $LAN_SERVER_IP --dport 80 -j REDIRECT --to-port 3128
echo "[OK]"

# Erlaube ausgehende Verbindungen (ausser Ziel-Ports: 20-21,80,3128 und 8080) vom LAN zum Internet:
echo -n "Firewall-Rule [FWD/OUT]: Erlaube ausgehende Verbindungen (ausser Ziel-Ports: 20-21,80,3128 und 8080) vom LAN zum Internet ... "
$IPTABLES -A FORWARD -i $LAN_IFACE -p tcp -m multiport ! -o $INET_IFACE --dports 20:21,80,3128,8080 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -p udp -m multiport ! -o $INET_IFACE --dports 20:21,80,3128,8080 -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN_SOURCE -p tcp -o $INET_IFACE -m multiport --sports 20:21,80,3128,8080 -j DROP
$IPTABLES -A OUTPUT -s $LAN_SOURCE -p udp -o $INET_IFACE -m multiport --sports 20:21,80,3128,8080 -j DROP
echo "[OK]"

# Masquerade:
echo -n "Firewall-Rule [POST]  : Masquerade/NATing ... "
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
echo "[OK]"

# Default-Policy setzen:
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD

# SETZE "ALTE" FIREWALL-REGEL, DA AM TESTEN (und kein Bock jedesmal zum Server in den Keller zu rennen ^^):
WSEK="30"
echo -e "\nWarte $WSEK Sekunden lang und setze dann ALTE Firewall-Einstellungen wieder ..."
sleep $WSEK

# "Alte" Default-Policy setzen:
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD

Wenn ich die Default-Policy so setze, wie ich sie oben im Script haben möchte, werden
anscheinend alle erstellten Regeln ignoriert(?).
Soll heissen, der Rechner macht komplett dicht - nicht mal mehr ein Ping geht.
Doch wenn alles auf ACCEPT steht, dann ist der Server wieder erreichbar.

Auf den Webseiten zu iptables, die ich per Google fand, steht es aber mehr oder weniger
genauso beschrieben.

Ich verstehe einfach nicht, warum der Rechner dicht macht - egal ob ich die Policy ganz
zu Anfang oder zum Schluss setze. Das Resultat ist immer das gleiche.

Die IN-/OUT - Regeln stimmen doch, oder?
Was habe ich übersehen/nicht beachtet?

Merci.
Worker

Edit:
OK *grml* ... hab's raus :-/
Dachte immer dass das "flush" dazu dient "neu einzulesen" quasi ein "reload".
Da ich somit immer die Regel(n)/Kette(n) "gereinigt"/gelöscht - nach dem ich sie erstellt - hatte, ist es mir nun klar, dass das so nicht funktionieren kann *kopfeinzieh*.

Ein "flush" muss/sollte also ganz an den Anfang des Scripts, und erst dann Regeln erstellen (inkl. policy).

Danke für's Zuhören *sichverneigt* :-P :-D

LG
worker


Edit 2:
Nun, hab mich wohl zu früh gefreut.
SSH scheint top zu klappen, doch das Surfen im Web haut nicht hin. Andere Dienste hab ich noch nicht getestet.
Demnach hab ich doch noch iwo nen Wurm drin *kratz* ...
 
Zuletzt bearbeitet:

Ähnliche Themen

Port Forwarding mit iptables

ip6tables Problem

iptables verständniss frage, xrdp nicht erreichbar.

[SOLVED][CentOS 7] Samba server nicht erreichbar trotz firewall regeln.

Wired-Lan komisches Verhalten

Oben