ho modificato notevolmente uno script per un firewall che avevo trovato in giro... ho aggiunto un po di regole ma niente di speciale...
il probleme e' che a firewall attivo la connessione col sito
http://deb.univpm.it
è davvero moooolto lenta! Anzi, dopo qualche secondo la pagina continua a caricare ma non finisce!
Specialmente se cerco di scaricare le slides da
http://deb.univpm.it/Farina/FondamentiEM.html
si fermano poco dopo la metà!!!
Se disabilito il firewall tutto va bene!
La cosa strana è che solo questo sito mi da problemi!
Non saprei che fare!
Vi sembra che ci sia qualcosa di sbagliato nello script?
Ho controllato il log e quando richiedo un download mi scrive
ANTISCAN IN=ppp0 OUT= MAC= SRC=193.205.130.81 DST=84.221.57.248 LEN=1203 TOS=0x00 PREC=0x20 TTL=50 ID=5529 DF PROTO=TCP SPT=80 DPT=63262 WINDOW=215 RES=0x00 ACK PSH FIN URGP=0
Il fatto è che la chain ANTISCAN l'ho creata per non rispondere alle scansioni di nmap...
Grazie!
Codice: Seleziona tutto
#!/bin/bash
##
ferma_fw() {
for table in filter nat mangle ; do
echo -n "Pulisco, "
$IPT -t $table -F #--flush
echo -n "elimino "
$IPT -t $table -X # --delete-chain
echo "ed azzero $table"
$IPT -t $table -Z # --zero
done
}
## Interfaccia esterna da proteggere 'settare la propria'
## in genere l'interfaccia esterna e' configurata da un DHCP quindi ha indirizzo dinamico.
EIF="ppp0"
IIF="eth0"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"
## Loopback
LOCALHOST="127.0.0.1"
## RETE
LAN="192.168.0.0/24"
## Provider1 DNS 'inserire i propri dns'
DNS1="213.205.36.70"
## Provider2 DNS
DNS2="213.205.32.70"
## PATH di iptables 'adattare alla propria macchina, se necessario'
IPT=`which iptables`
##
# aMule vars
EMULEPORT=4662
EMULEUDP=4672
EMULEUDP2=`expr $EMULEPORT + 3`
EMULEHOST=192.168.0.42
# Samba vars
SAMBA_UDP="137"
SAMBA_UDP2="138"
SAMBA_TCP="139"
SAMBA_TCP2="445"
#ANSI COLOR
MAGENTA='\e[35m'
GREEN='\e[32m'
YELLOW='\e[33m'
WHITE='\e[37m'
BLUE='\e[34m'
CYAN='\e[36m'
RED='\e[31m'
NULL='\e[0m'
COLOR=$BLUE
##
case "$1" in
#*******************************************************************STOP
stop)
COLOR=$GREEN
messaggio="Disattivo il firewall ..."
echo -e "$COLOR$messaggio\n"
ferma_fw
echo -e "$NULL"
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
exit 0
;;
policy)
COLOR=$WHITE
messaggio="Politiche ..."
echo -e "$COLOR$messaggio"
$IPT -t filter -nvL
echo "--------------"
$IPT -t nat -nvL
echo "--------------"
$IPT -t mangle -nvL
##
## espande la politica di netfilter
## visualizzando le catene e informazioni sulle
echo -e "$NULL\n"
##
exit 0
;;
#*********************************************************Verifica Syn Flood
vsf)
COLOR=$YELLOW
messaggio="Syn Flood ..."
echo -e "$COLOR$messaggio"
echo ""
echo " Verifico se siamo in presenza di Syn Flood"
echo ""
echo " Oltre 20-30 tentativi di connessione da uno stesso"
echo " indirizzo, indicano un tentativo di flood, verificare comunque i Log"
echo " prima di attivare le contromisure"
##
netstat -npla | grep SYN_RECV
##
echo -e "$NULL\n"
exit 0
;;
#**************************************************************START
start)
COLOR=$RED
messaggio="Attivo il firewall ..."
echo -e "$COLOR$messaggio$NULL\n"
##
## Politica INPUT
inchain="DROP"
##
## Politica OUTPUT
outchain="ACCEPT"
##
## Routing
fw="ACCEPT"
CF="1"
##
## Opzioni diverse dalle standard
##
## Politica OUTPUT
## 'se si attiva, decommentare le regole relative all'uscita dei pacchetti'
## outchain="DROP"
##
## Non funziona da router
# fw="DROP"
# CF="0"
##
## Opzioni kernel
SC="1"
ER="1"
DE="1"
TW="1"
SR="0"
DR="0"
ASR="0"
ISR="1"
SAV="1"
LOG="1"
DSR="1"
;;
*)
exit 0
;;
esac
##
#*******************************************************BLOCCO COMUNE
##
echo -e "$COLOR"
#################
## area kernel ##
#################
##
# echo "Abilito forwarding... "
echo "$CF" > /proc/sys/net/ipv4/ip_forward
##
# echo "Abilito syn-cookies (protezione syn-flood attacks)..."
echo "$SC" > /proc/sys/net/ipv4/tcp_syncookies
##
# echo "Riduco il numero di possibili SYN Floods..."
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
##
##
# echo "Abilito ICMP echo-request su indirizzi broadcast (Smurf amplifier)..."
# Questi parametri servono ad ignorare ogni ICMP echo requests
# inviato da indirizzi broadcast. Serve a prevenire
# un gran numero di attacchi smurfs e DoS.
echo "$ER" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
##
# Contromisure contro attacchi DoS
# echo "Disabilito ICMP echo-request (usare solo se si ᅵ sotto attacco Dos)"
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# #sotto attacco syn incrementare il valore di tcp_max_syn_backlog e decrementare
# #il valore dei timeout_*
# 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
##
# echo "Abilito protezione defrag error... "
echo "$DE" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
##
# echo "Abilito time-wait assassination hazards in tcp (RFC 1337)..."
echo "$TW" > /proc/sys/net/ipv4/tcp_rfc1337
##
# echo "Abilito sourcerouting and spoofing protection..."
for i in /proc/sys/net/ipv4/conf/*; do
##
# echo "Abilito politica per source-routed packets..."
# Questa politica e' usata per accettare o rifiutare pacchetti
# di tipo 'source routed'. E' attiva di default, ma ᅵ considerata
# un rischio per la sicurezza.
echo "$SR" > $i/accept_source_route
##
# echo "Abilito politica per ICMP Redirect accept/send..."
# Questa opzione disabilita la redirezione dei pacchetti ICMP.
# E' generalmente considerato un rischio per la sicurezza.
echo "$DR" > $i/accept_redirects
# Per questo motivo, e' preferibile accettare ICMP solo
# dal gateway di default (opzione secure_redirects).
echo "$ASR" > $i/send_redirects
# echo "Abilito secure ICMP redirects..."
echo "$ISR" > $i/secure_redirects
##
# echo "Disabilito Proxy ARP ..."
# # E' un'opzione utilizzata per la realizzazione di DMZ;
# # ᅵ disabilitata in quanto non rientra negli scopi di questo script.
# # per maggiorni info: http://www.sjdjweis.com/linux/proxyarp/
# echo "0" > $i/proxy_arp
##
# echo "Abilito source-address verification (prevent spoofing)..."
# Abilita i controlli previsti nel RFC1812.
# ᅵ raccomandato per sistemi basati su interfacce singole
# Disattivare se si hanno interfacce multiple collegate alla stessa rete.
# Questo controllo blocca i pacchetti che si presentano ad una interfaccia esterna
# con indirizzo forgiato per sembrare provenienti da interfaccia interna;
# il controllo e' comunque ripetuto in seguito.
echo "$SAV" > $i/rp_filter
##
done
##
# echo "Applico settaggi controllo ..."
if [ -f /proc/sys/net/ipv4/icmp_destunreach_rate ]; then
echo "5" > /proc/sys/net/ipv4/icmp_destunreach_rate
fi
if [ -f /proc/sys/net/ipv4/icmp_echoreply_rate ]; then
echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate
fi
if [ -f /proc/sys/net/ipv4/icmp_paramprob_rate ]; then
echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate
fi
if [ -f /proc/sys/net/ipv4/icmp_timeexceed_rate ]; then
echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate
fi
##
# echo "Abilito il Log su spoofed, source routed e redirect packets..."
# Questa opzione serve a loggare i pacchetti provenienti da indirizzi impossibili.
echo "$LOG" > /proc/sys/net/ipv4/conf/all/log_martians
##
# echo "Abilito dynamic socket address rewriting..."
# Utile se si utilizza un indirizzo dinamico assegnato da DHCP.
# echo "$DSR" > /proc/sys/net/ipv4/ip_dynaddr
##
# echo "Setto porte locali ..."
echo "56000 65096" > /proc/sys/net/ipv4/ip_local_port_range
##
##
#################################
## inizio competenza iptables ##
#################################
##
echo "Azzero le chain..."
ferma_fw
#####################################################
# DEFAULT POLICY
$IPT -P INPUT $inchain
$IPT -P OUTPUT $outchain
$IPT -P FORWARD DROP
#####################################################
echo "Accetto connessioni da $LOCALHOST"
$IPT -A INPUT --in-interface lo -j ACCEPT
echo "Accetto connessioni dalla rete lan $LAN"
$IPT -A INPUT --in-interface $IIF -m state --state INVALID -j LOG --log-level info --log-prefix "INV LAN "
$IPT -A INPUT --in-interface $IIF --source $LAN -j ACCEPT
echo "Genero catene utente ..."
echo "Regole AntiSpoofing"
$IPT -N ANTISPOOF
$IPT -A INPUT --in-interface ! lo --source $LOCALHOST -j ANTISPOOF
$IPT -A INPUT --in-interface ! lo --destination $LOCALHOST -j ANTISPOOF
$IPT -A INPUT --in-interface $EIF --source $CLASS_A -j ANTISPOOF
$IPT -A INPUT --in-interface $EIF --source $CLASS_B -j ANTISPOOF
$IPT -A INPUT --in-interface $EIF --source $CLASS_C -j ANTISPOOF
$IPT -A INPUT --in-interface $EIF --source $CLASS_D_MULTICAST -j ANTISPOOF
$IPT -A INPUT --in-interface $EIF --source $CLASS_E_RESERVED_NET -j ANTISPOOF
$IPT -A ANTISPOOF -j LOG --log-level info --log-prefix "ANTISPOOF "
$IPT -A ANTISPOOF -j DROP
echo "Configuro le regole di INPUT"
echo "Creo catena AMULE+AMULEWEB -> DROP"
$IPT -N AMULE
$IPT -A INPUT --in-interface $EIF --protocol tcp --destination-port 1755 -j AMULE
$IPT -A INPUT --in-interface $EIF --protocol udp --destination-port 1758 -j AMULE
$IPT -A INPUT --in-interface $EIF --protocol udp --destination-port 1756 -j AMULE
# echo "Accetto connessioni AMULEWEB"
$IPT -A INPUT --protocol tcp --destination-port 4711 -j AMULE
$IPT -A AMULE -j DROP
# echo "Accetto connessioni HTTP"
# $IPT -A INPUT --protocol tcp --destination-port 80 -j LOG --log-level info --log-prefix "HTTP "
# $IPT -A INPUT --protocol tcp --destination-port 80 -j ACCEPT
# echo "Accetto connessioni FTP"
# $IPT -A INPUT --in-interface $IIF --protocol tcp --destination-port 21 -j LOG --log-level info --log-prefix "FTP "
# $IPT -A INPUT --protocol tcp -m helper --helper ftp --sport ftp-data -m state --state RELATED,ESTABLISHED -j ACCEPT
# $IPT -A INPUT --protocol tcp -m helper --helper ftp -m state --state ESTABLISHED -j ACCEPT
# $IPT -A INPUT --in-interface $IIF --protocol tcp --destination-port 21 -j ACCEPT
# echo "Accetto connessioni SSH"
# $IPT -A INPUT --protocol tcp --destination-port 22 -j LOG --log-level info --log-prefix "SSH "
# $IPT -A INPUT -m limit --limit 10/min --protocol tcp --syn --destination-port 22 -j ACCEPT
# $IPT -A INPUT --protocol tcp --destination-port 22 -j ACCEPT
echo "Creo catena BITTORRENT -> DROP"
$IPT -N BITTRRNT
$IPT -A INPUT --in-interface $EIF --protocol tcp --destination-port 6881:6889 -j BITTRRNT
$IPT -A BITTRRNT -j DROP
# echo "Accetto connessioni WENGO"
# $IPT -N WENGO
# $IPT -A INPUT --protocol udp --destination-port 5060 -j WENGO
# $IPT -A WENGO -j DROP
# # Dynamic Address - La richiesta di assegnazione dell'indirizzo è di tipo broadcast la risposta potrebbe non essere accettata: abilita il DHCP
# $IPT -A INPUT --protocol UDP --source-port 67 --destination-port 68 -j ACCEPT
# # DHCPd - abilitare in presenza di DHCP interno
echo "Accetto connessioni DHCPd"
$IPT -A INPUT --in-interface $IIF --protocol tcp --sport 68 --dport 67 -j ACCEPT
$IPT -A INPUT --in-interface $IIF --protocol udp --sport 68 --dport 67 -j ACCEPT
echo "Accetto ICMP type 0,3,11..."
for ic in 0 3 11 ; do
$IPT -A INPUT --in-interface $EIF --protocol icmp --icmp-type $ic -j ACCEPT
done
##
# Decommentare se si desidera che il proprio sistema risponda ai ping
$IPT -A INPUT --in-interface $EIF --protocol ICMP --icmp-type 8 -j $inchain
##
# echo "Accetto ICMP dalla rete locale..."
# $IPT -A INPUT --in-interface $IIF --protocol ICMP --icmp-type 8 -j $inchain
# $IPT -A INPUT --in-interface $IIF --source $LAN --protocol icmp -j ACCEPT
# echo "Accetto SAMBA da rete locale..."
# $IPT -A INPUT --in-interface $IIF --protocol udp --destination-port $SAMBA_UDP -j ACCEPT
# $IPT -A INPUT --in-interface $IIF --protocol udp --destination-port $SAMBA_UDP2 -j ACCEPT
# $IPT -A INPUT --in-interface $IIF -m state --state NEW -m tcp --protocol tcp --destination-port $SAMBA_TCP -j ACCEPT
# $IPT -A INPUT --in-interface $IIF -m state --state NEW -m tcp --protocol tcp --destination-port $SAMBA_TCP2 -j ACCEPT
##
echo "Accetto DNS replays"
$IPT -A INPUT --in-interface $EIF --protocol udp --source $DNS1 --sport 53 -j ACCEPT
$IPT -A INPUT --in-interface $EIF --protocol tcp --source $DNS1 --sport 53 -j ACCEPT
$IPT -A INPUT --in-interface $EIF --protocol udp --source $DNS2 --sport 53 -j ACCEPT
$IPT -A INPUT --in-interface $EIF --protocol tcp --source $DNS2 --sport 53 -j ACCEPT
echo "Blocco ogni pacchetto broadcast"
$IPT -A INPUT --protocol ALL -i $EIF --destination 255.255.255.255 -j $inchain
##
echo "Attivo SYN-FLOODING protection..."
$IPT -N SYN-FLOOD
$IPT -A INPUT --protocol tcp --syn -j SYN-FLOOD
$IPT -A SYN-FLOOD -m limit --limit 1/s --limit-burst 10 -j LOG --log-level info --log-prefix "SYN-FLOOD "
$IPT -A SYN-FLOOD -m limit --limit 1/s --limit-burst 10 -j DROP
##
echo "Blocco le scansioni Xmas tree, i pacchetti senza flag, i flag irregolari, le scansioni..."
$IPT -N ANTISCAN
##Blocco le scansioni Xmas tree
$IPT -A INPUT --protocol tcp --tcp-flags ALL FIN,URG,PSH -j ANTISCAN
$IPT -A INPUT --protocol tcp --tcp-flags ALL SYN,RST,ACK -j ANTISCAN
##
##Blocco i pacchetti senza flags
$IPT -A INPUT --protocol tcp --tcp-flags ALL NONE -j ANTISCAN
##
##Blocco i pacchetti SYN+RST e SYN+FIN
$IPT -A INPUT --protocol tcp --tcp-flags SYN,RST SYN,RST -j ANTISCAN
$IPT -A INPUT --protocol tcp --tcp-flags SYN,FIN SYN,FIN -j ANTISCAN
##
##Blocco le scansioni FIN
$IPT -A INPUT --protocol tcp --tcp-flags FIN FIN -j ANTISCAN
$IPT -A ANTISCAN -j LOG --log-level info --log-prefix "ANTISCAN "
$IPT -A ANTISCAN -j DROP
##
##Elimino pacchetti broadcast netbios
# $IPT -A INPUT --protocol udp --destination-port 135:139 -j $inchain
##
echo "Accetto connessioni RELATED/ESTABLISHED..."
#in input
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Dirotto pacchetti NEW e INVALID verso CHAIN..."
# $IPT -A INPUT --in-interface $EIF -m state --state NEW,INVALID -j LOG --log-level info --log-prefix "NEW-INV "
$IPT -A INPUT --in-interface $EIF -m state --state NEW,INVALID -j DROP
# echo "Accetto NEW e INVALID dalla LAN"
# $IPT -A INPUT --in-interface $IIF -m state --state NEW,INVALID -j ACCEPT
##
########################
## regole particolari ##
########################
##
##
##
# echo "Imposto le regole sulla tabella MANGLE..."
# # Setto il TTL su tutti i pacchetti in uscita a 128.
# # per nascondere la propria rete dietro al router,
# # convertire i pacchetti uscenti dalla LAN ad un TTL
# # uguale a quello dei pacchetti generati dal router.
# # TTL non e' inserito nelle versioni comunemente
# # distribuite (senza patch-o-matic)
# $IPT -t mangle -A FORWARD --out-interface $EIF -j TTL --ttl-inc 1
##
echo "Risolvo il blocco derivante da ICMP fragmentation"
# Il target TCPMSS risolve i problemi di connessione derivanti da server
# che bloccano i pacchetti ICMP Fragmentation Needed.
# Tale blocco spesso blocca il trasferimento dati anche in presenza di connessioni stabilite.
$IPT -A FORWARD --protocol tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
##
##
##############################
## regole su FORWARD e nat ##
##############################
##
##
##
$IPT -N lanINET
$IPT -N inetLAN
$IPT -N aprichiudi
$IPT -A FORWARD --in-interface $IIF --out-interface $EIF -j lanINET
$IPT -A FORWARD --in-interface $EIF --out-interface $IIF -j inetLAN
$IPT -A lanINET --source ! $LAN -j DROP
$IPT -A lanINET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A inetLAN -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A inetLAN --protocol tcp --destination-port $EMULEPORT --destination $EMULEHOST -j aprichiudi
$IPT -A inetLAN --protocol udp --destination-port $EMULEUDP --destination $EMULEHOST -j aprichiudi
$IPT -A inetLAN --protocol udp --destination-port $EMULEUDP2 --destination $EMULEHOST -j aprichiudi
$IPT -A aprichiudi -j DROP
$IPT -A FORWARD -m state --state INVALID -j $inchain
$IPT -A FORWARD --out-interface $EIF --in-interface $EIF -j DROP
echo "Controllo di sanita' dei pacchetti sulla tabella nat-PREROUTING..."
$IPT -t nat -A PREROUTING --in-interface $EIF --source $LOCALHOST -j $inchain
$IPT -t nat -A PREROUTING --in-interface $EIF --source $LAN -j $inchain
echo "Eseguo port-forwarding per amule $EMULEHOST"
$IPT -t nat -A PREROUTING --in-interface $EIF --protocol tcp --destination-port $EMULEPORT -j DNAT --to-destination $EMULEHOST:$EMULEPORT
$IPT -t nat -A PREROUTING --in-interface $EIF --protocol udp --destination-port $EMULEUDP -j DNAT --to-destination $EMULEHOST:$EMULEUDP
$IPT -t nat -A PREROUTING --in-interface $EIF --protocol udp --destination-port $EMULEUDP2 -j DNAT --to-destination $EMULEHOST:$EMULEUDP2
echo "Abilito MASQUERADE su $EIF"
##
#usare su indirizzi dinamici (esempio connessioni dial-up)
$IPT -t nat -A POSTROUTING --out-interface $EIF -j MASQUERADE
## politica per la tabella mangle
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
##
##################
## fine del FW ##
##################
##
##
echo ""
echo "Da ora la politica per INPUT e' ....... $inchain"
echo "la politica per OUTPUT e' ............. $outchain"
echo "IP forwarding e' settato su ........... $fw "
echo -e "$NULL"
##
# exit 0
