iptables + sito lento
Inviato: mar 26 giu 2007, 14:32
salve a tutti!
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!
PS: il sito è dell'univ di Ancona, sono uno studente...
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