#!/bin/sh # Begin /etc/init.d/firewall source /etc/init.d/functions LAN_DEV="eth1" WAN_DEV="ppp0 ippp0" IPTABLES="/usr/local/sbin/iptables" LOCAL="127.0.0.1" SELF="192.168.0.1" LAN="192.168.0.0/16" DNS_SERVER="194.25.0.125 194.25.2.129 194.25.2.130 194.25.2.131 145.253.2.11 145.253.2.75 130.149.17.5 130.149.17.13 212.185.151.9" SMTP_SERVER="193.28.100.151 217.160.132.51" POP3_SERVER="161.58.167.54 195.20.224.211 195.20.224.215 195.211.178.194 212.227.35.215 212.227.35.219 212.227.126.129 212.227.126.130 212.227.126.131 212.227.126.134 212.227.126.138 212.227.126.141 212.227.126.142 212.227.126.154 212.227.126.165 212.227.126.167 212.227.126.172 151.189.8.101 213.165.65.60 213.165.64.20" POP3S_SERVER="130.149.17.13 64.39.38.43 161.58.167.54 193.28.100.151 194.29.232.82 195.211.178.194 217.160.132.51" TIME_SERVER="129.69.1.153 130.149.17.8 130.149.17.21 131.173.17.7 131.188.1.31 131.188.1.40 131.188.1.45 131.188.34.45 131.188.34.75 131.188.34.107 134.93.132.118 192.53.103.103 192.53.103.104 194.95.250.35 194.95.250.36 195.145.119.188" case "$1" in start) echo "Starting firewall..." #load necessary modules #/sbin/modprobe ip_conntrack_ftp #/sbin/modprobe ip_nat_ftp #clear all chains and delete all rules $IPTABLES -F $IPTABLES -F -t nat $IPTABLES -F -t mangle $IPTABLES -X $IPTABLES -X -t nat $IPTABLES -X -t mangle #logs all dropped packets $IPTABLES -N DROPLOG $IPTABLES -A DROPLOG -m limit -j LOG --log-prefix="dropped packet: " $IPTABLES -A DROPLOG -j DROP #informs about nmaps-Scans $IPTABLES -N SCANLOG $IPTABLES -A SCANLOG -m limit -j LOG --log-prefix="nmap scan: " $IPTABLES -A SCANLOG -j DROP #logging of invalid packets, perhaps part of a portscan $IPTABLES -N INVALIDLOG $IPTABLES -A INVALIDLOG -m limit -j LOG --log-prefix="invalid packet: " $IPTABLES -A INVALIDLOG -j DROP #INPUT, OUTPUT sperren, FORWARDing aktivieren $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT DROP $IPTABLES -P PREROUTING ACCEPT -t nat $IPTABLES -P POSTROUTING ACCEPT -t nat $IPTABLES -P OUTPUT ACCEPT -t nat #Transferlaenge bei DSL auf 1492 begrenzen, wichtig fuer DSL $IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu echo -n " Setting up mangle table..." #quality of service settings: ##ACKS $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp -m length --length :64 -j MARK --set-mark 10 #SSH/CS/HTTP/IRC (highest priority) $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 22 -j MARK --set-mark 11 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 53 -j MARK --set-mark 11 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p udp --dport 53 -j MARK --set-mark 11 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 80 -j MARK --set-mark 11 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 6667 -j MARK --set-mark 11 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 31337 -j MARK --set-mark 11 #SMTP/emule als Bulk markieren $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 25 -j MARK --set-mark 13 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 4661 -j MARK --set-mark 13 $IPTABLES -A POSTROUTING -t mangle -o ppp0 -p tcp --dport 4662 -j MARK --set-mark 13 print_status success ### lo, alles erlauben echo -n " Setting up rules for device lo..." #disable spoofing #$IPTABLES -A INPUT -p all -i lo ! -s $LOCAL -j REJECT #$IPTABLES -A OUTPUT -p all -o lo ! -d $LOCAL -j REJECT #53 -> 5353, 80 -> 8080 (lokal), 80 -> 3128 (remote) und Port 443 -> 8443 #accept all $IPTABLES -A OUTPUT -t nat -o lo -p tcp -d $LOCAL --dport 53 -j DNAT --to $SELF:5353 $IPTABLES -A OUTPUT -t nat -o lo -p tcp -d $SELF --dport 53 -j DNAT --to $SELF:5353 $IPTABLES -A OUTPUT -t nat -o lo -p udp -d $LOCAL --dport 53 -j DNAT --to $SELF:5353 $IPTABLES -A OUTPUT -t nat -o lo -p udp -d $SELF --dport 53 -j DNAT --to $SELF:5353 $IPTABLES -A OUTPUT -t nat -o lo -p tcp -d $LOCAL --dport 80 -j DNAT --to $SELF:8080 $IPTABLES -A OUTPUT -t nat -o lo -p tcp -d $SELF --dport 80 -j DNAT --to $SELF:8080 $IPTABLES -A PREROUTING -t nat -i lo -p tcp -d ! $LAN --dport 80 -j REDIRECT --to-port 3128 $IPTABLES -A OUTPUT -t nat -o lo -p tcp -d $LOCAL --dport 443 -j DNAT --to $SELF:8443 $IPTABLES -A OUTPUT -t nat -o lo -p tcp -d $SELF --dport 443 -j DNAT --to $SELF:8443 $IPTABLES -A INPUT -p all -i lo -j ACCEPT $IPTABLES -A OUTPUT -p all -o lo -j ACCEPT print_status success for i in $LAN_DEV do echo -n " Setting up rules for device $i..." #disable spoofing #$IPTABLES -A INPUT -i $i -p all ! -s $LAN -j REJECT #$IPTABLES -A OUTPUT -o $i -p all ! -d $LAN -j REJECT #Output erlauben $IPTABLES -A OUTPUT -o $i -j ACCEPT $IPTABLES -A INPUT -i $i -m state --state ESTABLISHED,RELATED -j ACCEPT #icmp $IPTABLES -A INPUT -i $i -p icmp -j ACCEPT #echo $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 7 -j ACCEPT #aktives ftp, telnet, ssh $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 20:23 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --sport 20:23 -j ACCEPT #smtp $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 25 -j ACCEPT #DNS $IPTABLES -A PREROUTING -t nat -i $i -p tcp -s $LAN -d $SELF --dport 53 -j REDIRECT --to-port 5353 $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 5353 -j ACCEPT $IPTABLES -A PREROUTING -t nat -i $i -p udp -s $LAN -d $SELF --dport 53 -j REDIRECT --to-port 5353 $IPTABLES -A INPUT -i $i -p udp -s $LAN -d $SELF --dport 5353 -j ACCEPT #DHCP $IPTABLES -A INPUT -i $i -p udp --dport 67:68 -j ACCEPT #www (lokale www-Anfragen an Port 8088 leiten, sonst erlauben) #www (entfernte Anfragen ueber transparenten Proxy leiten) $IPTABLES -A OUTPUT -t nat -o $i -p tcp -d $SELF --sport 80 -j DNAT --to $SELF:8080 $IPTABLES -A PREROUTING -t nat -i $i -p tcp -d $SELF --dport 80 -j DNAT --to $SELF:8080 $IPTABLES -A PREROUTING -t nat -i $i -p tcp -d ! $LAN --dport 80 -s 192.168.0.3 -j REDIRECT --to-port 3128 $IPTABLES -A INPUT -i $i -p tcp --dport 80 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 8080 -j ACCEPT #pop3 $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 110 -j ACCEPT #auth $IPTABLES -A INPUT -i $i -p tcp -s $LAN --dport 113 -j ACCEPT #erlaubt netbios (ns, dgm, ssn) $IPTABLES -A INPUT -i $i -p tcp --dport 137:139 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp --sport 137:139 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp --dport 137:139 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp --sport 137:139 -j ACCEPT #https #$IPTABLES -A OUTPUT -t nat -o $i -p tcp -d $SELF --dport 443 -j DNAT --to $SELF:8443 $IPTABLES -A PREROUTING -t nat -i $i -p tcp -d $SELF --dport 443 -j REDIRECT --to-port 8443 $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 8443 -j ACCEPT #LPRng $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --sport 445 -j ACCEPT #pop3s $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 995 -j ACCEPT #squid $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 3128 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -d $LAN -s $SELF --sport 3128 -j ACCEPT #mysql $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 3306 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -d $LAN -s $SELF --sport 3306 -j ACCEPT #mldonkey $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 4000:4002 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 4080 -j ACCEPT #hylafax $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 4558:4559 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -d $LAN -s $SELF --sport 4558:4559 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 32998 -j ACCEPT #counter-strike $IPTABLES -A INPUT -i $i -p tcp -s $LAN --dport 27015 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp -s $LAN --dport 27005:27015 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp -s $LAN --sport 27005:27015 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --sport 27060 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 27060 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --sport 24347 -j ACCEPT $IPTABLES -A INPUT -i $i -p tcp -s $LAN -d $SELF --dport 24347 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp -s $LAN -d $SELF --sport 24347 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp -s $LAN -d $SELF --dport 24347 -j ACCEPT #wc3 $IPTABLES -A INPUT -i $i -p tcp -s $LAN --dport 6112 -j ACCEPT $IPTABLES -A INPUT -i $i -p udp -s $LAN --dport 6112 -j ACCEPT print_status success done for i in $WAN_DEV do echo -n " Setting up rules for device $i..." #MASQUERADING: hier wird alles maskiert, was rausgehen darf $IPTABLES -A POSTROUTING -t nat -o $i -s $LAN -d ! $LAN -j MASQUERADE #allow all outgoing traffic $IPTABLES -A OUTPUT -o $i -p all -j ACCEPT #allow established incoming connections $IPTABLES -A INPUT -i $i -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #icmp $IPTABLES -A INPUT -i $i -p icmp --icmp-type 0 -j ACCEPT $IPTABLES -A INPUT -i $i -p icmp --icmp-type 3 -j ACCEPT $IPTABLES -A INPUT -i $i -p icmp --icmp-type 11 -j ACCEPT #ssh auf krypton weiterleiten $IPTABLES -A PREROUTING -t nat -i $i -p tcp --sport 1024: --dport 22 -j DNAT --to 192.168.0.50:22 #www (81-90) auf krypton weiterleiten $IPTABLES -A PREROUTING -t nat -i $i -p tcp --sport 1024: --dport 81:90 -j DNAT --to 192.168.0.50:81-90 print_status success #fi done ##NMAP Scans protokollieren ## NMAP FIN/URG/PSH $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j SCANLOG ## Xmas Tree $IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j SCANLOG ## Another Xmas Tree $IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j SCANLOG ##Null Scan(possibly) $IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j SCANLOG #drop all invalid packets $IPTABLES -A INPUT --match state --state INVALID --jump INVALIDLOG # den Rest protokollieren und wegschmeissen $IPTABLES -A INPUT -j DROPLOG $IPTABLES -A OUTPUT -j DROPLOG ;; stop) echo -n "Shutting down firewall" $IPTABLES -F -t nat $IPTABLES -F -t mangle $IPTABLES -F $IPTABLES -P INPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -X -t nat $IPTABLES -X -t mangle $IPTABLES -X print_status success ;; restart|reload) $0 stop && $0 start ;; status) $IPTABLES -L -v -n -x -t nat $IPTABLES -L -v -n -x ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 1 esac exit 0