IPTables Beispiele
Iptables Beispielskripte zum nutzen und / oder weiterentwickeln.
#!/bin/bash #### Local Firewall-Script IPTABLES #### ### BEGIN INIT INFO # Provides: firewall # Required-Start: networking $local_fw.sh # Required-Stop: $local_fw.sh # Should-Start: # Should-Stop: # Default-Start: S # Default-Stop: 0 6 # Short-Description: IPTables firewall script ### END INIT INFO # -------- Variablen-Definition -------- # IPT="/sbin/iptables" INET="eth0" # Pfad zu modprobe #MODPROBE="/sbin/modprobe" #LN="192.168.0.0/24" # ---------------------- Logging Optionen --------------------- # LOG="LOG --log-level debug --log-tcp-sequence --log-tcp-options" LOG="$LOG --log-ip-options" # ----------- Voreinstellung für Limits ------------ # RLIMIT="-m limit --limit 3/s --limit-burst 30" # --------------- Standard Richtlinien ------------- # # Alles Standardmäßig Verbieten. $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP $IPT -t nat -P PREROUTING ACCEPT $IPT -t nat -P OUTPUT ACCEPT $IPT -t nat -P POSTROUTING ACCEPT $IPT -t mangle -P PREROUTING ACCEPT $IPT -t mangle -P INPUT ACCEPT $IPT -t mangle -P FORWARD ACCEPT $IPT -t mangle -P OUTPUT ACCEPT $IPT -t mangle -P POSTROUTING ACCEPT # ----------- Alle Regelketten löschen -------- # $IPT -F $IPT -t nat -F $IPT -t mangle -F $IPT -X $IPT -t nat -X $IPT -t mangle -X $IPT -Z $IPT -t nat -Z $IPT -t mangle -Z #----------------- Benutzerdefinierte Ketten ------------------ # # Pakete Loggen, dann erlauben. $IPT -N ACCEPTLOG $IPT -A ACCEPTLOG -j $LOG $RLIMIT --log-prefix "ACCEPT " $IPT -A ACCEPTLOG -j ACCEPT # Pakete Loggen, dann verwerfen. $IPT -N DROPLOG $IPT -A DROPLOG -j $LOG $RLIMIT --log-prefix "DROP " $IPT -A DROPLOG -j DROP # Pakete Loggen, dann verbieten. $IPT -N REJECTLOG $IPT -A REJECTLOG -j $LOG $RLIMIT --log-prefix "REJECT " $IPT -A REJECTLOG -p tcp -j REJECT --reject-with tcp-reset $IPT -A REJECTLOG -j REJECT # ---------------------------------------------------------------------------------------------------- # # Sonderfall zum erlauben von 0.0.0.0 Sourcen für UPnP zum nutzen des IGMP Netzwerkprotokolls # zur Registrierung von Clients mit Medien-Server und Router. # In diesem Fall zur Nutzung von Mediatomb. Weitere Freigaben zu Mediatomb befinden sich weiter unten. #$IPT -A INPUT -i $INET -s 0.0.0.0/32 -d 224.0.0.1/32 -p igmp -j ACCEPT # ---------------------------------------------------------------------------------------------------- # # Nur folgende ICMP Typen erlauben. # (destination-unreachable, time-exceeded, and parameter-problem). $IPT -N RELATED_ICMP $IPT -A RELATED_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT $IPT -A RELATED_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT $IPT -A RELATED_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT $IPT -A RELATED_ICMP -j DROPLOG # Multi-PING abhärten. $IPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j ACCEPT $IPT -A OUTPUT -p icmp -j ACCEPT # -------- Nur die minimalen ICMP Parameter erlauben, den Rest blockieren. ---------- # # Alle festen ICMP Verbindungen erlauben. $IPT -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT $IPT -A OUTPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT # Alle zusammenhängende ICMP Verbindungen erlauben, den Rest verbieten. $IPT -A INPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT $IPT -A OUTPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT # Erlauben von eingehenden Ping anfragen und Limit setzen. $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT # Erlauben von ausgehenden Ping anfragen und Limit setzen. $IPT -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT # Alle anderen ICMP Anfragen blockieren. $IPT -A INPUT -p icmp -j DROPLOG $IPT -A OUTPUT -p icmp -j DROPLOG $IPT -A FORWARD -p icmp -j DROPLOG # Alle ICMP Anfragen verbieten. #$IPT -A INPUT -p icmp -j LOG --log-prefix "FW: BLOCK: ICMP (PING)" --log-level warning #$IPT -A INPUT -p icmp -j DROP # Localhost Verbindungen erlauben. $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT # Eingehende, schon bestehende Verbindungen akzeptieren. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ausgehende, schon bestehende Verbindungen akzeptieren. $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Ungültige eingehende Pakete blockieren. $IPT -A INPUT -m state --state INVALID -j DROP # Ungültige ausgehende Pakete blockieren. $IPT -A OUTPUT -m state --state INVALID -j DROP # Wird NAT genutzt, werden üngültige Pakete akzeptiert - alles andere blockiert. $IPT -A FORWARD -m state --state INVALID -j DROP # -------------- Erlaubte Eingehende/Ausgehende Verbindungen, den Rest blockieren. ----------------- # # Erlaube ausgehende DNS Anfragen. $IPT -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT $IPT -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT # Erlaube eingehende DNS Anfragen. $IPT -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT $IPT -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT # Erlaube ausgehende HTTP Anfragen. $IPT -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT # Erlaube eingehende HTTP Anfragen. $IPT -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT # Erlaube ausgehende HTTPS Anfragen. $IPT -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT # Erlaube eingehende HTTPS Anfragen. $IPT -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT # Erlaube ausgehende SMTP Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # Erlaube eingehende SMTP Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # Erlaube eingehende POP3 Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT # Erlaube ausgehende SMTPS Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 465 -j ACCEPT # Erlaube eingehende IMAP4 Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT # Erlaube ausgehende "submission" (RFC 2476) Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 587 -j ACCEPT # Erlaube ausgehende POP3S Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT # Erlaube eingehende POP3S Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT # Erlaube ausgehende SSH Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT # Erlaube eingehende SSH Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT # Erlaube ausgehende FTP Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT # Erlaube eingehende FTP Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT # Erlaube ausgehende NTP Anfragen. $IPT -A OUTPUT -m state --state NEW -p udp --dport 123 -j ACCEPT # Erlaube ausgehende WHOIS Anfragen. $IPT -A OUTPUT -m state --state NEW -p tcp --dport 43 -j ACCEPT # Erlaube ausgehende CVS Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 2401 -j ACCEPT # Erlaube ausgehende MySQL Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT # Erlaube eingehende MySQL Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT # Erlaube ausgehende SVN Anfragen. # $IPT -A OUTPUT -m state --state NEW -p tcp --dport 3690 -j ACCEPT # Erlaube ausgehende Mumble Anfragen. #$IPT -A OUTPUT -m state --state NEW -p tcp --dport 64738 -j ACCEPT #$IPT -A OUTPUT -m state --state NEW -p udp --dport 64738 -j ACCEPT # Erlaube eingehende Mumble-Anfragen. #$IPT -A INPUT -m state --state NEW -p tcp --dport 64738 -j ACCEPT #$IPT -A INPUT -m state --state NEW -p udp --dport 64738 -j ACCEPT # ----------------- Erlaube mediatomb die Verbindung ins Locale Netzwerk -------------------- # $IPT -A INPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 1900 -j ACCEPT $IPT -A INPUT -p udp -m udp -s 192.168.178.0/24 --dport 1900 -j ACCEPT $IPT -A OUTPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 1900 -j ACCEPT $IPT -A OUTPUT -p udp -m udp -s 192.168.178.0/24 --dport 1900 -j ACCEPT #$IPT -A INPUT -i $INET -s 0.0.0.0/32 -d 224.0.0.1/32 -p igmp -j ACCEPT <- this Rule is oben # ----- UPnP uses IGMP multicast to find media servers. Accept IGMP broadcast packets ------ # #$IPT -A INPUT -i $INET -d 239.0.0.0/8 -p igmp -j ACCEPT # Zugriff auf Mediatomb Webseite aus dem Lokalen Netzwerk $IPT -A INPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 49166 -j ACCEPT $IPT -A INPUT -p udp -m udp -s 192.168.178.0/24 --dport 49166 -j ACCEPT $IPT -A OUTPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 49166 -j ACCEPT $IPT -A OUTPUT -p udp -m udp -s 192.168.178.0/24 --dport 49166 -j ACCEPT # ------------------------------------------------------------------------------------------- # # --------------- Masquerading ------------- # # Die drei modprobe Befehle stellen sicher, dass FTP mit Masquerading funktioniert. # Hierbei muß oben '/sbin/modprobe' Variable aktiviert werden. #$MODPROBE ip_conntrack #$MODPROBE ip_conntrack_ftp #$MODPROBE ip_nat_ftp # #$IPT -t nat -A POSTROUTING -o $INET -j MASQUERADE #echo 1 > /proc/sys/net/ipv4/ip_forward # -------------------------------------------- # # ------------ Alles andere Blockieren oder Verwerfen. --------------- # # Um Pakete nur zu Verwerfen "REJECT" benutzen, möchte man Verworfene Pakete Loggen, "REJECTLOG" nutzen. # Oder DROP/DROPLOG um Pakete zu blockieren. $IPT -A INPUT -j DROPLOG $IPT -A OUTPUT -j DROPLOG $IPT -A FORWARD -j DROPLOG #--------------------------------------------------------------------- # exit 0
Cloud
alle
anderen
bash
befehl
beim
beispiel
beispiele
cloud
code
dabei
dann
datei
dateien
debian
default
diese
erstellt
file
fixme
folgende
gibt
home
http
important
init
keine
kommando
linux
name
noch
note
ohne
optionen
pfad
programm
root
server
sollte
start
syntax
system
this
user
version
verwendet
verzeichnis
wiki
will
wurde
zeigt