Iptables: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 28: Zeile 28:
   SERVICES_TCP="22 80" #freigegebene TCP-Ports (Hier sshd und http)
   SERVICES_TCP="22 80" #freigegebene TCP-Ports (Hier sshd und http)
    
    
  #Alle vorhandenen Regeln löschen
#Alle vorhandenen Regeln löschen
  iptables -F
iptables -F
  iptables -t nat -F
iptables -t nat -F
  iptables -t mangle -F
iptables -t mangle -F
  iptables -X
iptables -X
  iptables -t nat -X
iptables -t nat -X
  iptables -t mangle -X
iptables -t mangle -X
 
  #Grundregeln
#Grundregeln
  iptables -P OUTPUT  ACCEPT
iptables -P OUTPUT  ACCEPT
  iptables -P INPUT  DROP
iptables -P INPUT  DROP
  iptables -P FORWARD DROP
iptables -P FORWARD DROP
 
  #Sicherheit
#Sicherheit
  iptables -N bad_packets
iptables -N other_packets #Tabelle "other_packets" erzeugen
  iptables -A bad_packets -p ALL -m state --state INVALID -j DROP                         #kaputte Pakete droppen
iptables -A other_packets -p ALL -m state --state INVALID -j DROP #Kaputte Packete verwerfen
  iptables -A bad_packets -p tcp -j REJECT --reject-with tcp-reset                        #Antispoofing
iptables -A other_packets -p icmp -m limit --limit 1/s -j ACCEPT #ICMP auf max. 1 Packet/Sekunde limitieren
  iptables -A bad_packets -p udp -j REJECT --reject-with icmp-port-unreachable            #Antispoofing
iptables -A other_packets -p ALL -j RETURN #Tabelle "other_packets" verlassen
  iptables -A bad_packets -p icmp -m limit --limit 2/s -j ACCEPT                           #ICMP  
  iptables -A bad_packets -p icmp -m limit --limit 4/s -j REJECT                          #ICMP
iptables -N service_sec #Tabelle "services_sec" erzeugen
  iptables -A bad_packets -p icmp -j DROP                                                  #ICMP
iptables -A service_sec -p tcp --syn -m limit --limit 2/s -j ACCEPT #SYN-Flood Attacken
  iptables -A bad_packets -p ALL -j RETURN
iptables -A service_sec -p tcp ! --syn -m state --state NEW -j DROP #TCP-SYN-Pakete ohne Status NEW verwerfen
 
iptables -A service_sec -p tcp --tcp-flags ALL NONE -m limit --limit 1/h -j ACCEPT #Portscanner ausschalten
  iptables -N service_sec
iptables -A service_sec -p tcp --tcp-flags ALL ALL -m limit --limit 1/h -j ACCEPT #Portscanner ausschalten
  iptables -A service_sec -p tcp --syn -m limit --limit 1/s -j ACCEPT                     #SYN-Flood Attacken
iptables -A service_sec -p ALL -j RETURN #Tabelle "services" verlassen
  iptables -A service_sec -p tcp ! --syn -m state --state NEW -j DROP                     #TCP-SYN-Pakete ohne Status NEW droppen
  iptables -A service_sec -p tcp --tcp-flags ALL NONE -m limit --limit 1/h -j ACCEPT       #Portscanner ausschalten
iptables -N reject_packets #Tabelle "reject_packets" erzeugen
  iptables -A service_sec -p tcp --tcp-flags ALL ALL -m limit --limit 1/h -j ACCEPT       #Portscanner ausschalten
iptables -A reject_packets -p tcp -j REJECT --reject-with tcp-reset #TCP Packete(Protokoll) zurückweisen
  iptables -A service_sec -p ALL -j RETURN
iptables -A reject_packets -p udp -j REJECT --reject-with icmp-port-unreachable #UDP Packete(Protokoll) zurückweisen
 
iptables -A reject_packets -p icmp -j REJECT --reject-with icmp-host-unreachable #ICMP Packete(Protokoll) zurückweisen (bei mehr als 1Packet/Sekunde [s.o.])
  #Dienste
iptables -A reject_packets -j REJECT --reject-with icmp-proto-unreachable #Alle anderen Packete(Protokolle) zurückweisen
  iptables -N services
iptables -A reject_packets -p ALL -j RETURN #Tabelle "reject_packets" verlassen
  for port in $SERVICES_TCP ; do
        iptables -A services -p tcp --dport $port -j service_sec
#Dienste
        iptables -A services -p tcp --dport $port -j ACCEPT
iptables -N services #Tabelle für die Dienste erzeugen
  done
for port in $SERVICES_TCP ; do #Für jeden TCP Port (oben definiert) folgendes tun:
  for port in $SERVICES_UDP ; do
        iptables -A services -p tcp --dport $port -j service_sec #Bei Verbindungen auf TCP Port "$port in die Tabelle "services_sec" springen
        iptables -A services -p udp --dport $port -j service_sec
        iptables -A services -p tcp --dport $port -j ACCEPT #Bei Verbindungen auf TCP Port "$port Verbindung zulassen
        iptables -A services -p udp --dport $port -j ACCEPT
done
  done
for port in $SERVICES_UDP ; do #Für jeden UDP Port (oben definiert) folgendes tun:
  iptables -A services -p ALL -j RETURN
        iptables -A services -p udp --dport $port -j service_sec #Bei Verbindungen auf UDP Port "$port" in die Tabelle "services_sec" springen
 
        iptables -A services -p udp --dport $port -j ACCEPT #Bei Verbindungen auf UDP Port "$port Verbindung zulassen
  #INPUT
done
  iptables -A INPUT -p ALL -i lo -j ACCEPT
iptables -A services -p ALL -j RETURN #Tabelle "services" verlassen
  iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
  iptables -A INPUT -p ALL -j services
#INPUT
  iptables -A INPUT -p ALL -j bad_packets
iptables -A INPUT -p ALL -i lo -j ACCEPT #Alle Packete vom Loopback Interface zulassen
  iptables -A INPUT -p ALL -j DROP
iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT #Bereits vorhandene Verbindungen zulassen
 
iptables -A INPUT -p ALL -j other_packets #In die Tabelle "other_packets" springen
  #OUTPUT: Alles was raus geht wird erlaubt
iptables -A INPUT -p ALL -j services #In die Tabelle "services" gehen
  iptables -A OUTPUT -p ALL -j ACCEPT
iptables -A INPUT -p ALL -m limit --limit 10/s -j reject_packets #Nicht erlaubte Packete zurückweisen, max 10Packete/Sekunde (Tabelle "reject_Packets")
 
iptables -A INPUT -p ALL -j DROP #Alles andere verwerfen
  #Speichern
  /etc/rc.d/iptables save
#OUTPUT:
iptables -A OUTPUT -p ALL -j ACCEPT #Ausgehende Packete erlauben
#Speichern
/etc/rc.d/iptables save  





Version vom 24. März 2008, 02:46 Uhr

iptables

Der Kernel selber hat mit 'Netfilter' einen sehr mächtigen und sicheren Paketfilter. Der Paketfilter untersucht die Paket die deinen Rechner verlassen, oder erreichen. Mit anderen Worten... er reagiert auf Netzwerkpaket je nach Art, Quelle, Ziel usw. zum Beispiel mit Zurückweisung. Das entsprechende Programm zur Steuerung des Paketfilters lautet 'iptables'.

Das entsprechende Paket wird mittels folgendem Aufruf installiert.

 # pacman -S iptables

Definiere ein paar Regeln, und starte /etc/rc.d/iptables save Das Script ruft 'iptables-save' auf, und speichert Deine erstellten Regeln in /etc/iptables/iptables.rules.

Jetzt kannst Du iptables starten.

 # /etc/rc.d/iptables start

Das Script ruft iptables-restore auf, und lädt Deine Regeln. Du kannst die Firewall natürlich im DAEMONS Feld in /etc/rc.conf eintragen, damit es nach jedem boot automatisch geladen wird.

 # DAEMONS=(...iptables network...)


Hier ein Script um iptables für einen Rechner der direkt am Internet hängt einzurichten.

 #!/bin/bash
 
 #Ports: Hier eintragen welche Ports geöffnet werden sollen
 SERVICES_UDP="" #freigegebene UDP-Ports 
 SERVICES_TCP="22 80" #freigegebene TCP-Ports (Hier sshd und http)
 
#Alle vorhandenen Regeln löschen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

#Grundregeln
iptables -P OUTPUT  ACCEPT
iptables -P INPUT   DROP
iptables -P FORWARD DROP

#Sicherheit
iptables -N other_packets								#Tabelle "other_packets" erzeugen
iptables -A other_packets -p ALL -m state --state INVALID -j DROP			#Kaputte Packete verwerfen
iptables -A other_packets -p icmp -m limit --limit 1/s -j ACCEPT			#ICMP auf max. 1 Packet/Sekunde limitieren
iptables -A other_packets -p ALL -j RETURN						#Tabelle "other_packets" verlassen

iptables -N service_sec								#Tabelle "services_sec" erzeugen
iptables -A service_sec -p tcp --syn -m limit --limit 2/s -j ACCEPT			#SYN-Flood Attacken
iptables -A service_sec -p tcp ! --syn -m state --state NEW -j DROP			#TCP-SYN-Pakete ohne Status NEW verwerfen
iptables -A service_sec -p tcp --tcp-flags ALL NONE -m limit --limit 1/h -j ACCEPT	#Portscanner ausschalten
iptables -A service_sec -p tcp --tcp-flags ALL ALL -m limit --limit 1/h -j ACCEPT	#Portscanner ausschalten
iptables -A service_sec -p ALL -j RETURN						#Tabelle "services" verlassen

iptables -N reject_packets								#Tabelle "reject_packets" erzeugen
iptables -A reject_packets -p tcp -j REJECT --reject-with tcp-reset			#TCP Packete(Protokoll) zurückweisen
iptables -A reject_packets -p udp -j REJECT --reject-with icmp-port-unreachable	#UDP Packete(Protokoll) zurückweisen
iptables -A reject_packets -p icmp -j REJECT --reject-with icmp-host-unreachable	#ICMP Packete(Protokoll) zurückweisen (bei mehr als 1Packet/Sekunde [s.o.])
iptables -A reject_packets -j REJECT --reject-with icmp-proto-unreachable		#Alle anderen Packete(Protokolle) zurückweisen 
iptables -A reject_packets -p ALL -j RETURN						#Tabelle "reject_packets" verlassen

#Dienste
iptables -N services									#Tabelle für die Dienste erzeugen
for port in $SERVICES_TCP ; do								#Für jeden TCP Port (oben definiert) folgendes tun:
       iptables -A services -p tcp --dport $port -j service_sec			#Bei Verbindungen auf TCP Port "$port in die Tabelle "services_sec" springen
       iptables -A services -p tcp --dport $port -j ACCEPT				#Bei Verbindungen auf TCP Port "$port Verbindung zulassen
done
for port in $SERVICES_UDP ; do								 #Für jeden UDP Port (oben definiert) folgendes tun:
       iptables -A services -p udp --dport $port -j service_sec			#Bei Verbindungen auf UDP Port "$port" in die Tabelle "services_sec" springen
       iptables -A services -p udp --dport $port -j ACCEPT				#Bei Verbindungen auf UDP Port "$port Verbindung zulassen
done
iptables -A services -p ALL -j RETURN							#Tabelle "services" verlassen

#INPUT
iptables -A INPUT -p ALL -i lo -j ACCEPT						#Alle Packete vom Loopback Interface zulassen
iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT		#Bereits vorhandene Verbindungen zulassen
iptables -A INPUT -p ALL -j other_packets						#In die Tabelle "other_packets" springen
iptables -A INPUT -p ALL -j services							#In die Tabelle "services" gehen
iptables -A INPUT -p ALL -m limit --limit 10/s -j reject_packets			#Nicht erlaubte Packete zurückweisen, max 10Packete/Sekunde (Tabelle "reject_Packets")
iptables -A INPUT -p ALL -j DROP							#Alles andere verwerfen

#OUTPUT:
iptables -A OUTPUT -p ALL -j ACCEPT							#Ausgehende Packete erlauben

#Speichern
/etc/rc.d/iptables save 


Weitere Quellen