#! /bin/sh # iptables-Filterskript ab SuSE Linux 9.3 # FileHomeName: /etc/init.d/iptablesfilter # ### BEGIN INIT INFO # Provides: iptablesfilter # Required-Start: $network # Required-Stop: # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Description: Firewall Iptablesfilter ### END INIT INFO # Pruefen, ob iptables verfuegbar FOO_BIN=/usr/sbin/iptables test -x $FOO_BIN || { echo "$FOO_BIN nicht vorhanden"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } # Deklaration der Variablen ------------------------------------------------- IPTABLES=/usr/sbin/iptables # Pfad fuer die Filterregeln DEV_INT=eth0 # Netzwerkkarte im Server - # Verbindung zum internen Bereich DEV_EXT=dsl0 # Modem(modem0), DSL(dsl0), ISDN(ippp0) # Verbindung zum externen Bereich INT=192.168.0.0/24 # Adressbereich der LAN-PC - # interner Bereich EXT=0.0.0.0/0.0.0.0 # Adressbereich im Internet - # externer Bereich (alle Adressen moeglich) . /etc/rc.status # Shell functions sourced from /etc/rc.status: rc_reset # Start der Firewall -------------------------------------------------------- case "$1" in start) echo " " # Leerzeile echo "Die Firewall -iptablesfilter- wird eingerichtet ......." echo " " # Leerzeile # Kernelmodule -------------------------------------------------------------- modprobe ip_tables # Aktivierung der iptables-Regeln modprobe iptable_nat # Aktivierung NAT (Network Adress Translation) modprobe ip_nat_ftp # Aktivierung NAT fr FTP modprobe ip_conntrack # Kontrolle der Verbindungen modprobe ip_conntrack_ftp # Kontrolle der Verbindungen - FTP # Kernelparameter werden eingestellt ---------------------------------------- echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_dynaddr echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo 100 > /proc/sys/net/ipv4/icmp_ratelimit echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route echo 0 > /proc/sys/net/ipv4/conf/all/bootp_relay echo 1 > /proc/sys/net/ipv4/conf/all/log_martians # Allgemeine Regeln --------------------------------------------------------- # Loeschen alter Regeln $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -X # Setzen der Basisregeln - alle Ketten werden blockiert! $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP # Regeln fuer lokale Prozesse und den Datenverkehr im Intranet--------------- # Datenverkehr auf dem Loopback-Interface wird erlaubt $IPTABLES -A OUTPUT -o lo -j ACCEPT $IPTABLES -A INPUT -i lo -j ACCEPT # Datenverkehr mit dem LAN wird erlaubt $IPTABLES -A OUTPUT -o $DEV_INT -j ACCEPT $IPTABLES -A INPUT -i $DEV_INT -j ACCEPT # Masquerading -------------------------------------------------------------- $IPTABLES -t nat -A POSTROUTING -o $DEV_EXT -j MASQUERADE # Durchleitung P2P fuer Client 192.168.0.79 Port 6666 # $IPTABLES -A PREROUTING -t nat -p udp -i $DEV_EXT --dport 6666 \ # -j DNAT --to 192.168.0.79:6666 # $IPTABLES -A PREROUTING -t nat -p tcp -i $DEV_EXT --dport 6666 \ # -j DNAT --to 192.168.0.79:6666 # $IPTABLES -A FORWARD -p tcp -i $DEV_EXT --dport 6666 -j ACCEPT # $IPTABLES -A FORWARD -p udp -i $DEV_EXT --dport 6666 -j ACCEPT # Regeln fuer bestehende Verbindungen --------------------------------------- # Pakete bei bereits aufgebauter Verbindung $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # ident: reject $IPTABLES -A FORWARD -i $DEV_INT -p TCP --dport auth --syn -j REJECT # INTERNET-Regeln fuer Pakete aus dem LAN ----------------------------------- # DNS-Anfragen der NETBIOS-Ports 137-139 aus dem LAN werden geblockt # (Einwahlproblem) $IPTABLES -A FORWARD -i $DEV_INT -p udp -s $INT \ --sport 137:139 -o $DEV_EXT -j DROP $IPTABLES -A FORWARD -i $DEV_INT -p tcp -s $INT \ --sport 137:139 -o $DEV_EXT -j DROP # Behandlung der ICMP-Pakete $IPTABLES -A FORWARD -o $DEV_EXT -p ICMP --icmp-type echo-request -j ACCEPT # DNS-Abfragen erlauben - Port 53 - tcp,udp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p udp --sport 1024: --dport 53 -j ACCEPT $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 53 -j ACCEPT # HTTP erlauben - Port 80 - tcp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 80 -j ACCEPT # HTTPS erlauben - Port 443 - tcp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 443 -j ACCEPT # FTP erlauben - ftp - tcp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport ftp -j ACCEPT $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 1024: -j ACCEPT # SMTP erlauben (E-Mails an Mail-Provider senden) - Port 25 - tcp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 25 -j ACCEPT # POP3 erlauben (E-Mails vom Mail-Provider holen) - Port 110 - tcp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 110 -j ACCEPT # NNTP erlauben (Datenaustausch mit News-Groups) - Port 119 - tcp $IPTABLES -A FORWARD -o $DEV_EXT -m state --state NEW \ -p tcp --sport 1024: --dport 119 -j ACCEPT # INTERNET-Regeln fuer Pakete vom Gateway-Server ---------------------------- # Behandlung der ICMP-Pakete $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type source-quench -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type time-exceeded -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type port-unreachable -j ACCEPT # DNS-Abfragen erlauben - Port 53 - tcp,udp $IPTABLES -A OUTPUT -p udp --sport 1024: --dport 53 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 53 -j ACCEPT # HTTP erlauben - Port 80 - tcp $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 80 -j ACCEPT # HTTPS erlauben - Port 443 - tcp $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 443 -j ACCEPT # FTP erlauben - ftp - tcp $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport ftp -j ACCEPT $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 1024: -j ACCEPT # SMTP erlauben (E-Mails an Mail-Provider senden) - Port 25 - tcp $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 25 -j ACCEPT # POP3 erlauben (E-Mails vom Mail-Provider holen) - Port 110 - tcp $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 110 -j ACCEPT # NNTP erlauben (Datenaustausch mit News-Groups) - Port 119 - tcp $IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 119 -j ACCEPT # Der Rest wird gesperrt! $IPTABLES -A INPUT -j DROP $IPTABLES -A FORWARD -j DROP $IPTABLES -A OUTPUT -j DROP echo "..... und ist jetzt bereit!" echo " " # Leerzeile # Remember status and be verbose rc_status -v ;; # Beenden der Firewall ------------------------------------------------------ stop) echo " " # Leerzeile echo "Die Firewall -iptablesfilter- wird heruntergefahren ......." echo " " # Leerzeile # Loeschen alter Regeln $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -X # Alle Ketten werden geoeffnet! $IPTABLES -P INPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT # Kernelparameter werden zurueckgesetzt ------------------------------------- echo 0 > /proc/sys/net/ipv4/ip_forward echo 0 > /proc/sys/net/ipv4/ip_dynaddr echo 0 > /proc/sys/net/ipv4/tcp_syncookies echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route echo 0 > /proc/sys/net/ipv4/conf/all/bootp_relay echo 0 > /proc/sys/net/ipv4/conf/all/log_martians echo "..... und ist jetzt deaktiviert!" echo " " # Leerzeile # Remember status and be verbose rc_status -v ;; restart) ## iptablesfilter stoppen und neu starten $0 stop $0 start # Remember status and be quiet rc_status ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac rc_exit