Home

 

 

Beispielscripts

Erstmal eine absolute Billiglösung um den Rechner von aussen (Internet)
halbwegs dicht zu machen :

#!/bin/bash

# Erstmal alles eventuell voreingestellte löschen.
iptables -F
iptables -X
iptables -Z

# Alle defaulties der eingebauten Ketten auf DROP setzen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# localhost alle Verbindungen erlauben
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Sich versichern, dass einkommende tcp Verbindungen mit einem syn ankommen
# Erklärung später.
iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP

# Nur selbst initialisierte Verbindungen gestatten.(Internet Schnittstelle hier eth0).
iptables -A INPUT -i eth0 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT

# Zusätzlich für icmp noch RELATED Verbindungen erlauben (braucht man für
#traceroute - time exceeded)
iptables -A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Alle verbotenen Pakete loggen
iptables -A INPUT -i eth0 -j LOG --log-level info --log-prefix "böses Internet-Paket : "

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

dann mit /etc/init.d/iptables save das Script speichern (RedHat), damit es beim Neustart
automatisch ausgeführt wird und mal bei Shields Up testen.
RedHat speichert es unter /etc/sysconfig/iptables.

Ansehen kann man sich die Konfiguration auch mittels :
iptables -t nat -v -L -n --line-numbers (für Nat)
iptables -v -L -n --line-numbers (für die normalen Filterregeln)

-v für verbose, -L für List, -n um nicht irgendwelche Namen aufzulösen --line-numbers
klar.

Damit hat man natürlich noch nicht besonders viel Sicherheit gewonnen und auch noch
kein Routerfunktionalität, aber von aussen her sollte der Rechner erstmal dicht sein.
(ach ja und aktives FTP geht natürlich auch noch nicht).

Nun will man aber vielleicht auch seine anderen Rechner ins Internet bringen.
Dazu sollte man das Script um folgendes erweitern:

# um nicht jedesmal eine neue Nat Regel anzuhängen -> flushen
iptables -t nat -F

# Das forwarding des Kernels aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# forewarding mittels iptables einrichten (die default Policy steht ja auf Drop)
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT

# Masquerading einrichten wobei 192.168.1.0, netmask 255.255.255.0 das interne
# Netzwerk darstellt. Eth0 ist immer noch die Internetschnittstelle
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Jetzt sollte es erstmal funktionieren. Was (ganz entscheident) noch fehlt, ist die
Absicherung von innen. Mit der oben gezeigten Konfiguration kann praktisch jede lokale
Anwendung aufs Internet zugreifen, Etwa ein Trojaner, den man sich z.B. irgendwo
im lokalen Netz eingefangen hat. Um das zu verhindern sollte man nur den gewünschten
Anwendungen auch den Internetzugang erlauben. Dazu die
iptables -A INPUT -i eth0 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT -
Regeln rausschmeißen. Und für jedes Protokoll eine eigene Regel definieren.
Beispiel für HTTP:
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

und entsprechend mit den anderen Protokollen verfahren.
--sport steht für Quellport, --dport für Zielport.
(Einen bestimmten Port Bereich würde man so (2665:2774) markieren).

Analog dazu natürlich auch die FORWARD-Regeln einrichten.

Will man denn aktives ftp haben, muß man in der ftp input-Regel zusätzlich zu ESTABLISHED
noch RELATED (verwandt) einsetzen. Es gab in einer älteren iptables-Version da mal einen
Bug, der aber inzwischen wohl behoben ist.

be continued