#! /bin/sh # iptables-Filterskript ab SuSE Linux 7.1 (Kernel 2.4.x und 2.6.x) # FileHomeName: /etc/init.d/iptablesfilter # Deklaration der Variablen ------------------------------------------------- IPCHAINS=/sbin/ipchains # Pfad fuer ipchains IPTABLES=/usr/sbin/iptables # Pfad fuer die Filterregeln DEV_INT=eth0 # Netzwerkkarte im Server - # Verbindung zum internen Bereich DEV_EXT=dsl0 # bis SuSE 9.1: DSL,Modem(ppp0), ISDN-Karte(ippp0) # ab Suse 9.2: 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 . /etc/rc.config # Determine the base and follow a runlevel link name. base=${0##*/} link=${base#*[SK][0-9][0-9]} # Force execution if not called by a runlevel directory. test $link = $base && START_IPTABLESFILTER=yes test "$START_IPTABLESFILTER" = yes || exit 0 # 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 -------------------------------------------------------------- IPCHRESP=`$IPCHAINS -n -L 2>&1` # ipchains-Regeln entladen, falls aktiviert if test $? -eq 0; then rmmod ipchains fi 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 5 > /proc/sys/net/ipv4/icmp_destunreach_rate # echo 5 > /proc/sys/net/ipv4/icmp_echoreply_rate # echo 5 > /proc/sys/net/ipv4/icmp_paramprob_rate # echo 10 > /proc/sys/net/ipv4/icmp_timeexceed_rate # Interface 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 -d $INT -j ACCEPT $IPTABLES -A INPUT -i $DEV_INT -s $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 --------------------------------------- # Ausgehende Pakete bei bereits aufgebauter Verbindung $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $DEV_INT -o $DEV_EXT \ -m state --state ESTABLISHED,RELATED -j ACCEPT # Eingehende Pakete zu einer bestehenden Verbindung $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -m state --state NEW,INVALID -j DROP $IPTABLES -A FORWARD -i $DEV_EXT -o $DEV_INT \ -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $DEV_EXT -o $DEV_INT \ -m state --state NEW,INVALID -j DROP # 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 # Dial-on-Demand scharf machen (SuSE 8.0)! # echo "DOD aktiviert!" # cinternet -start # SuSE 9.0 DSL-Modem (vor 2.4.21-144 beide Befehle aktivieren)! # cinternet -i dsl0 --stop # cinternet -i dsl0 --start 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/icmp_destunreach_rate # echo 0 > /proc/sys/net/ipv4/icmp_echoreply_rate # echo 0 > /proc/sys/net/ipv4/icmp_paramprob_rate # echo 0 > /proc/sys/net/ipv4/icmp_timeexceed_rate # Interface 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 # Dial-on-Demand scharf machen (SuSE 8.0)! # echo "DOD deaktiviert!" # cinternet -stop echo "..... und ist jetzt deaktiviert!" echo " " # Leerzeile # Remember status and be verbose rc_status -v ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac rc_exit