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