iptables + sito lento

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
spudhead
Linux 1.x
Linux 1.x
Messaggi: 130
Iscritto il: sab 17 dic 2005, 0:17
Slackware: 12.2
Kernel: 2.6.28.7
Desktop: KDE 3.5.10
Località: Ancona, Italy

iptables + sito lento

Messaggio da spudhead »

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!

:arrow: PS: il sito è dell'univ di Ancona, sono uno studente...

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

Rispondi