io penserei ai tipi di pacchetti...tempo fa avevo scritto un firewall sul modello di quello di mike per postarlo, alla fine non l'ho più fatto. Te lo pasto per darti una mano
#!/bin/bash
# Firewall by OhiOhiOhi
# AVVIATE QUESTO FIREWALL DA ROOT
# Settare i seguenti valori in base alle proprie esigenze
INT=eth0
LOCALHOST="127.0.0.1"
DNS1="130.244.127.161" # In questi due punti inserite i DNS del vostro
DNS2="130.244.127.169" # provider. In default ho messo quelli tele2
ETH="192.168.1.1"
IPT=iptables
echo "Firewall by OhiOhiOhi"
echo " "
case $1 in
## START
start)
echo "Sto attivando il firewall..."
# Politiche
input=DROP
output=ACCEPT
fw=DROP
## Inizio bash scripting per iptables
## Opzioni kernel
echo "Carico i moduli del kernel"
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_tables
modprobe ipt_mac
modprobe ipt_limit
modprobe ip_queue
modprobe ipt_state
modprobe ipt_owner
modprobe ipt_REJECT
modprobe ipt_unclean
modprobe ipt_multiport
echo "Setto contromisure contro attacchi"
## Contromisure contro attacchi DoS: da usare solo sotto attacco
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# echo "100" > /proc/sys/net/ipv4/vs/timeout_synack
# echo "10" > /proc/sys/net/ipv4/vs/timeout_synrecv
# echo "128" > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Questo comando ignora tutti i ping alla vostra macchina, abilitandolo
# potreste avere problemi di rete
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Riduce il numero di SYN-FLOOD
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Protezione contro SYS-FLOOD attack
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Ignora i pacchetti indirizzati a broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# serve per abilitare il trasferimento di pacchetti tra interfacce
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Protezione contro spoofing e sourcerouting
echo "1" > /proc/sys/net/ipv4/tcp_rfc1337
# Una protezione in più anche se utilizzata in combinazione con router
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# Da disabilitare solo se non si usa un Router
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# non logga i pacchetti con difetti
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects
# Effettua controlli sui pacchetti ICMP
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# Protezione da proxy ARP
echo "0" > /proc/sys/net/ipv4/conf/all/proxy_arp
# Controlla il routing: Serve per prevenire in piccola parte un
# ip_spoofing al computer
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
# Questo comando logga i pacchetti martirians ovvero i pacchetti senza
# tragitto certo
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
# Abilita il dynamic socket address rewriting
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# Setta le porte locali
echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range
# Disabilita il Forwarding
echo "0" > /proc/sys/net/ipv4/ip_forward
# Torsmo
usare execi per fare un cat sul file
# echo "Firewall ON" > "vostro_file_torsmo"
## IPTABLES
echo "Setto iptables"
# Preparo le chain
$IPT -F
$IPT -P INPUT $input
$IPT -P OUTPUT $output
$IPT -P FORWARD $fw
$IPT -N CHAIN-SCAN
$IPT -N SYN-FLOOD
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Utile comando per accettare solo alcuni tipi di icmp
for ic in 0 3 11 ; do
$IPT -A INPUT -i $INT -p icmp --icmp-type $ic -j ACCEPT
done
# Abilita i DNS replays
$IPT -A INPUT -i $INT -p udp -s $DNS1 --dport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $DNS2 --dport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $ETH --dport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $DNS1 --sport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $DNS2 --sport 53 -j ACCEPT
# Blocca pacchetti broadcast
$IPT -A INPUT -p ALL -d 255.255.255.255 -j $input
$IPT -A INPUT -s 10.128.0.0/255.255.0.0 -j $input
# Crea catene SYN-FLOOD
$IPT -A INPUT -p tcp --syn -j SYN-FLOOD
$IPT -t filter -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j CHAIN-SCAN
# Protezione contro Xmas scan
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK -j CHAIN-SCAN
# Blocccare scansioni senza flag
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j CHAIN-SCAN
# Bloccare pacchetti SYN+RST e SYN+FIN
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j CHAIN-SCAN
# Bloccare scansioni FIN
$IPT -A INPUT -p tcp --tcp-flags FIN FIN -j CHAIN-SCAN
# Sicurezze alternative
$IPT -A INPUT -p udp --dport 135:139 -j DROP
$IPT -A INPUT -p tcp --dport 6000 -j DROP
# Abilito localhost
$IPT -A INPUT -s $LOCALHOST -j ACCEPT
# Usare questi parametri per abilitare aMule
$IPT -A INPUT -p tcp --sport 4661:4662 -j ACCEPT
$IPT -A INPUT -p udp --sport 4661:4666 -j ACCEPT
$IPT -A INPUT -p tcp --dport 4662 -j ACCEPT
$IPT -A INPUT -p udp --dport 4665 -j ACCEPT
# Usare per abilitare scambio file in aMsn
$IPT -A INPUT -p tcp --dport 6891:6895 -j ACCEPT
# Usare per abilitare DCC
$IPT -A INPUT -p tcp --dport 3333 -j ACCEPT
echo " "
echo "Firewall attivato "
;;
## STOP
stop)
echo "Risistemo tutto come era prima"
# Politiche
input=ACCEPT
output=ACCEPT
fw=ACCEPT
# Risetto i valori di kernel
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/tcp_rfc1337
echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "1" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
echo "0" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/ip_forward
# echo "Firewall OFF" > "vostro_tordsmo_filez"
# Risetto le politiche di default
$IPT -F
$IPT -X CHAIN-SCAN
$IPT -X SYN-FLOOD
$IPT -P INPUT $input
$IPT -P OUTPUT $output
$IPT -P FORWARD $fw
echo " "
echo "Firewall disattivato...ora prova a pararti your butt :P"
;;
*)
echo "firez [start|stop]"
echo "Nel caso attiviate il firewall due volte consecutive"
echo "potrebbero esserci degli errori di esistenza di chain"
echo "Ignorateli pure
"
echo "Eventualmente se riscontrate errori di altro tipo"
echo "verificate la correttezza dei parametri..."
echo " "
echo "Mi raccomando leggete con attenzione il firewall e"
echo "settate i parametri prima di dare start ... ENJOY!"
;;
esac
echo " "