#!/bin/sh
IPTABLES=/sbin/iptables
case "$1" in
start)
echo -n "Starting firewall"
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
# accetta in loopback
$IPTABLES -A INPUT -i lo -j ACCEPT
# blocca multicast ed altri igmp
$IPTABLES -A INPUT -p igmp -j DROP
# blocca le richieste auth
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# usa stateful inspection
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# permette l'ingresso dei pacchetti provenienti dalla lan
$IPTABLES -A INPUT -p tcp -s 192.168.1.0/24 -i eth0 -j ACCEPT
$IPTABLES -A INPUT -p udp -s 192.168.1.0/24 -i eth0 -j ACCEPT
$IPTABLES -A INPUT -p icmp -s 192.168.1.0/24 -i eth0 -j ACCEPT
# permette l'accesso al server WEB
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
# permette l'accesso in FTP
$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 20 -j ACCEPT
# permette l'accesso al MAIL server
$IPTABLES -A INPUT -p tcp --dport 25 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 110 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 587 -j ACCEPT
# permette il logging remoto dalla lan e dal router pubblico
$IPTABLES -A INPUT -p udp -s 192.168.1.0/30 --dport 514 -j ACCEPT
$IPTABLES -A INPUT -p udp -s 192.168.1.0/24 --dport 514 -j ACCEPT
# permette l'accesso al server DNS
$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 53 -j ACCEPT
# logging
$IPTABLES -A INPUT -p tcp --syn -m limit --limit 3/minute --limit-burst 5 -j LOG --log-prefix "SYN "
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/minute --limit-burst 5 -j LOG --log-prefix "PING "
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
# permette l'accesso alla SECURE SHELL dagli indirizzi ip autorizzati
$IPTABLES -A INPUT -p tcp -s 192.168.1.2 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 192.168.1.3 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 192.168.1.4 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 192.168.1.5 --dport 22 -j ACCEPT
# blocca tutti i syn
$IPTABLES -A INPUT -p tcp --syn -j REJECT --reject-with tcp-reset
# routing, firewalling e nat per la lan
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -s 192.168.1.0/24 -i eth0 -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o eth1 -j SNAT --to 80.206.230.6
# Quality Of Service
$IPTABLES -t mangle -A OUTPUT -p tcp --sport 20 -j TOS --set-tos 0x08
$IPTABLES -t mangle -A OUTPUT -p tcp --sport 21 -j TOS --set-tos 0x10
$IPTABLES -t mangle -A OUTPUT -p tcp --sport 22 -j TOS --set-tos 0x10
$IPTABLES -t mangle -A OUTPUT -p tcp --sport 25 -j TOS --set-tos 0x08
$IPTABLES -t mangle -A OUTPUT -p udp --sport 53 -j TOS --set-tos 0x10
$IPTABLES -t mangle -A OUTPUT -p tcp --sport 53 -j TOS --set-tos 0x08
$IPTABLES -t mangle -A FORWARD -p tcp --dport 20 -j TOS --set-tos 0x08
$IPTABLES -t mangle -A FORWARD -p tcp --dport 21 -j TOS --set-tos 0x10
$IPTABLES -t mangle -A FORWARD -p tcp --dport 22 -j TOS --set-tos 0x10
$IPTABLES -t mangle -A FORWARD -p tcp --dport 25 -j TOS --set-tos 0x08
$IPTABLES -t mangle -A FORWARD -p udp --dport 53 -j TOS --set-tos 0x10
$IPTABLES -t mangle -A FORWARD -p tcp --dport 53 -j TOS --set-tos 0x08
echo " done."
;;
stop)
echo -n "Stopping firewall"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -X
$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F POSTROUTING
$IPTABLES -t nat -F PREROUTING
$IPTABLES -t mangle -F INPUT
$IPTABLES -t mangle -F OUTPUT
$IPTABLES -t mangle -F FORWARD
echo " done."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: start|restart|stop"
esac