Iptables -> einige Fragen

03/09/2012 - 11:02 von Thomas Wildgruber | Report spam
Hi Group,

ich habe zur Demonstration für einen Azubi ein Iptables Skript mit einigen
Regeln geschrieben und im Moment sind mir hier drei Resultate unklar:

snip
#!/bin/sh

### BEGIN INIT INFO
# Provides: firewall.sh
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Descrition Firewall start script
# Description: Iptables config script
### END INIT INFO

IPTABLES=/sbin/iptables

SPOOFING="0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 /
224.0.0.0/3 255.0.0.0/8"
DNS="192.168.167.2"

case $1 in
start)

echo -n "Starting Firewall..."

# Kernelmodul laden
modprobe ip_conntrack_ftp

# Default Policys setzen
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# Tabelle flushen
$IPTABLES -F

# Loopback Interface freigeben
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Spoofing verhindern
for ip in $SPOOFING ;
do
$IPTABLES -A INPUT -s $ip -j LOG --log-prefix "Spoofing detected:"
# $IPTABLES -A INPUT -s $ip -j DROP
done

# Neue TCP Sessions nur mit SYN erlauben
# http://www.smythies.com/~doug/network/iptables_syn/index.html
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG /
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Erlaube Pakete von existierenden Sessions
$IPTABLES -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Erlaube abgehende Pings
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

# Erlaube DNS
$IPTABLES -A OUTPUT -p udp --dport 53 -d $DNS -m state --state NEW -j
ACCEPT

# Erlaube NTP
$IPTABLES -A OUTPUT -p udp --dport 123 -m state --state NEW -j ACCEPT

# Allow incoming SSH
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

# Erlaube HTTP
$IPTABLES -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

# Erlaube Whois
$IPTABLES -A OUTPUT -p tcp --dport 43 -m state --state NEW -j ACCEPT

# Erlaube FTP (ausgehend)
$IPTABLES -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT

echo "Done."

;;
stop)
echo -n "Stopping Firewall ... "
# Policy setzen
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

# Tabelle flushen
$IPTABLES -F

echo "Done."

;;

*)
echo "Usage {start|stop}"

;;
esac
snap

Frage 1) Wobei ich hier die kurze Antwort vermutlich schon kenne... Wenn
ich gegen den Rechner, der das o.g. Regelwerk geladen hat, einen Portscan
fahre, bekomme ich erwartungsgemàß nur den TCP Port 22 als geöffnet
angezeigt. Lasse ich den Portscan jedoch auf der lokalen Maschine laufen,
werden mehrere geöffnete Ports angezeigt:

snip
$ nmap localhost

Starting Nmap 5.00 ( http://nmap.org ) at 2012-09-03 10:46 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
snap

Ich vermute mal, dass liegt an der Regel, welche den Loopback Adapter
freigibt. Den Mechanismus mit dem Loopbackadapter habe ich auch noch nicht
ganz so verstanden, dachte jedoch, dass die localhost Adresse nichts mit
dem Loopbackadapter zu tun hat. Ist dieses Verhalten von nmap auf dem
lokalen Host mit dem Loopbackadapter erklàrbar?

2 Frage: Im Skript befindet sich eine Spoofing Log-Regel, die Drop-Regel
dazu ist auskommentiert, weil ich auch dort ein Problem ermittelt habe, von
dem ich jetzt aber nicht weiß woher es kommt. Beim Starten des Skripts wird
ein Log-Eintrag nach /var/log/syslog geschrieben:

snip
Spoofing detected:IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:56:c0:00:08:0
8:00 SRC2.168.167.1 DST2.168.167.255 LENx TOS=0x00 PREC=0x20 TTLd
IDA041 PROTO=UDP SPT`342 DPT7 LEN=5
8
snap

Woher kommt das, dass die Regel hier anspringt? Meine lokale IP-Adresse
ist: 192.168.167.196/24 und sollte doch nicht von den angelegten Spoofing
Adressen erfasst werden?

Frage 3) Bei meinen ganzen Recherchen bzgl. Iptables bin ich nirgens auf
eine Regel gestossen, welche die initiale DHCP-Prozedur des DHCP-Clients
erfasst. Gewundert habe ich zwar schon, dass der Rechner auch ohne Regel
eine IP-Adresse bekommt aber in diversen Forenbeitràgen wurde gemutmaßt,
dass der ganze DHCP Prozess noch vor dem aktivieren der Firewall
abgewickelt wird. So wird es wohl sein dachte ich mir aber jetzt findet
sich folgender Eintrag (mehrmals) im syslog:

snip--
Sep 3 10:54:39 debian dhclient: DHCPREQUEST on eth0 to 192.168.167.254
port 67
Sep 3 10:54:39 debian dhclient: send_packet: Operation not permitted
snap--

Muss man DHCP in seinem Regelsatz doch irgendwie berücksichtigen?

Ansonsten bitte ich noch um Hinweise, wenn im Skript Fehler vorhanden sind,
weil ich die natürlich ungern weitergegeben möchte ;-)

Thx & Bye Tom
"Manches Gewissen ist nur rein, weil es nie benutzt wurde" (Robert Lembke)
 

Lesen sie die antworten

#1 Heiko Schlenker
03/09/2012 - 14:01 | Warnen spam
* Thomas Wildgruber schrieb:
snip
$ nmap localhost

Starting Nmap 5.00 ( http://nmap.org ) at 2012-09-03 10:46 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
snap

Ich vermute mal, dass liegt an der Regel, welche den Loopback Adapter
freigibt.



Noch ein Grund, der auf der Hand liegt: Die Dienste sind an bestimmte
Schnittstellen gebunden, deshalb womöglich nur im LAN verfügbar und
nicht öffentlich zugànglich. Siehe auch su -c '/bin/netstat -apentu',
Spalte "Local Address".

snip
Spoofing detected:IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:56:c0:00:08:0
8:00 SRC2.168.167.1 DST2.168.167.255 LENx TOS=0x00 PREC=0x20 TTLd
IDA041 PROTO=UDP SPT`342 DPT7 LEN=5
8
snap

Woher kommt das, dass die Regel hier anspringt?



Die Skript-Variable "ip" ist nirgends definiert, oder? Zudem fehlt in
der Spoofing-Regel die Angabe der Schnittstelle. Außerdem sollte die
Spoofing-Erkennung (zusàtzlich) per sysctl aktiviert werden
(/proc/sys/net/ipv4/conf/*/rp_filter).

Muss man DHCP in seinem Regelsatz doch irgendwie berücksichtigen?



Durchaus möglich:
"-A <chain> -i <interface> -p udp --dport 67:68 --sport 67:68 -j ACCEPT"

Generell sollten Regeln wie
"-A <chain> -m state --state ESTABLISHED,RELATED -j ACCEPT"
ziemlich zum Schluss spezifiziert werden. Es werden nàmlich nicht alle
Regeln abgearbeitet. Vielmehr stoppt die Firewall die Verarbeitung bei
der ersten passenden Regel. Die Reihenfolge der Regeln kann nicht
beliebig variiert werden.

Gruß, Heiko

Ähnliche fragen