#!/bin/sh # # firewall-masq This script sets up firewall rules for a machine # acting as a masquerading gateway # DIAL_OUT=ppp+ ALLOW_PORTS_TCP="20 21 22 80 1024:5000 4000 6667 27960" ALLOW_PORTS_UDP="20 21 22 80 1024:5000 4000 6667 27960" REJECT_PORTS_TCP="53 111 113 139 515 8080" REJECT_PORTS_UDP="53 111 113 139 515 8080" ALLOW_MASQUERADING=ja ANTI_SPOOFING=ja SYNCOOKIE=Nein ALLOW_FORWARD=$ALLOW_MASQUERADING ALLOW_DYNIP=$ALLOW_MASQUERADING ALLOW_PING=Nein flush_chains() { ## loesche alte tables und chains /sbin/iptables -F /sbin/iptables -X } start_firewall() { ## lade module /sbin/modprobe iptable_nat /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_conntrack_irc /sbin/modprobe ip_nat_ftp /sbin/modprobe ip_nat_irc ## Ports fuer Spiele weiterleiten: echo -e "Ports fuer Spiele weiterleiten:" # Quake3 / Caslte Wolfenstein # /sbin/iptables -A INPUT -i ppp+ -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 27960:27961 -j ACCEPT # /sbin/iptables -A OUTPUT -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 27960:27961 -j ACCEPT # MOHAA # /sbin/iptables -A INPUT -i ppp+ -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 12203:12203 -j ACCEPT # /sbin/iptables -A INPUT -i ppp+ -p tcp -s 0.0.0.0 -d 0.0.0.0 --dport 12203:12203 -j ACCEPT # /sbin/iptables -A OUTPUT -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 12203:12203 -j ACCEPT # /sbin/iptables -A OUTPUT -p tcp -s 0.0.0.0 -d 0.0.0.0 --dport 12203:12203 -j ACCEPT # /sbin/iptables -t nat -A PREROUTING -p udp --dport 12203 -j DNAT --to 192.168.1.1:12203 # Diablo 2 (Portweiterleitung) # /sbin/iptables -t nat -A PREROUTING -p tcp --dport 4000 -j DNAT --to 192.168.1.1:4000 # AOK II (Portweiterleitung) echo -e "AOK II (Portweiterleitung)" #/sbin/iptables -t nat -A PREROUTING -p tcp --dport 47624 -j DNAT --to 192.168.0.12:47624 /sbin/iptables -A INPUT -i ppp+ -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 47624 -j ACCEPT /sbin/iptables -A OUTPUT -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 47624 -j ACCEPT /sbin/iptables -A INPUT -i ppp+ -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 6073 -j ACCEPT /sbin/iptables -A OUTPUT -p udp -s 0.0.0.0 -d 0.0.0.0 --dport 6073 -j ACCEPT /sbin/iptables -t nat -A PREROUTING -p udp --dport 2300:2400 -i ppp0 -j DNAT --to 192.168.0.12 /sbin/iptables -t nat -A PREROUTING -p tcp --dport 2300:2400 -i ppp0 -j DNAT --to 192.168.0.12 ## starte anti-ip-spoofing / source-adress ueberprüfung if [ $ANTI_SPOOFING = ja ]; then echo -e "\tStarte Anti IP Spoofing" for FILTER in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $FILTER done # logge gespoofte pakete, source routed pakete und redirect pakete for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo 1 > $f done fi ## erlaube SYN cookie schutz if [ $SYNCOOKIE = ja ]; then echo -e "\tStarte SYN Cookie Schutz" echo 1 > /proc/sys/net/ipv4/tcp_syncookies fi ## erlaube forwarding if [ $ALLOW_FORWARD = ja ]; then echo -e "\tStarte Forwarding" echo 1 > /proc/sys/net/ipv4/ip_forward fi ## erlaube dyn_ip-patch if [ $ALLOW_DYNIP = ja ]; then echo -e "\tFIX ME" fi ## erstelle regeln um alle verbindungen von $DIAL_OUT zu blocken /sbin/iptables -N block /sbin/iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A block -m state --state NEW -i ! $DIAL_OUT -j ACCEPT /sbin/iptables -A block -j DROP ## erlaube services for PORT in $ALLOW_PORTS_TCP ; do /sbin/iptables -A INPUT -i $DIAL_OUT -p tcp --dport $PORT -j ACCEPT done for PORT in $ALLOW_PORTS_UDP ; do /sbin/iptables -A INPUT -i $DIAL_OUT -p udp --dport $PORT -j ACCEPT done ## diese services werden ausdrücklich abgelehnt und nicht verworfen for PORT in $REJECT_PORTS_TCP ; do /sbin/iptables -A INPUT -i $DIAL_OUT -p tcp --dport $PORT -j REJECT done for PORT in $REJECT_PORTS_UDP ; do /sbin/iptables -A INPUT -i $DIAL_OUT -p udp --dport $PORT -j REJECT done ## erlaube ping if [ $ALLOW_PING = ja ]; then echo -e "\tErlaube Ping" /sbin/iptables -A INPUT -i $DIAL_OUT -p icmp -j ACCEPT fi ## /sbin/iptables -A INPUT -j block /sbin/iptables -A FORWARD -j ACCEPT ## starte masquerading if [ $ALLOW_MASQUERADING = ja ]; then echo -e "\tMasquerading" /sbin/iptables -t nat -A POSTROUTING -o $DIAL_OUT -j MASQUERADE fi } usage () { echo " $0 - eine Minifirewall für Newbies :) Benutzung: $0 [option] Optionen: --start -> Startet die Firewall --stop -> Stoppt die Firewall --status -> Zeigt die Regeln der Firewall --restart -> Startet die Firewall neu -h --help -> Gibt diese Hilfe aus Sonstiges: Vor dem ersten Start sollten die Variablen am Anfang des Scriptes bearbeitet werden. " } case "$1" in --start) flush_chains start_firewall echo "Firewall aktiviert" exit ;; --stop) flush_chains echo "Firewall deaktiviert" exit ;; --restart) flush_chains echo "Firewall deaktiviert" start_firewall echo "Firewall aktiviert" exit ;; --status) /sbin/iptables -L -n exit ;; -h|--help) usage exit ;; *) usage exit 1 ;; esac exit