iptables, stato delle connesioni e pacchetti "dimenticati " o persi
ciao a tutti,
da un'analisi dei log del firewall vedo droppati alcuni pacchetti che
secondo me appartengono a connessioni lecite e permesse;
ad esempio:
TCP DROP IN=eth1 OUT=eth0 SRC=MIO_SERVER DST=XXX.XXX.XXX.XXX LEN=48 TOS=0x00
PREC=0x00 TTL=63 ID=41830 DF PROTO=TCP SPT=110 DPT=1079 WINDOW=5840 RES=0x00
ACK SYN URGP=0
in questo caso il firewall droppa un pacchetto con i flag SYN,ACK settati
proveniente da un mio server verso un client...ossia un pacchetto di
risposta alla richiesta di una connessione lecita...
oppure:
TCP DROP IN=eth1 OUT=eth0 SRC=MIO_SERVER DST=XXX.XXX.XXX.XXX LEN=1420
TOS=0x00 PREC=0x00 TTL=63 ID=56632 DF PROTO=TCP SPT=80 DPT=37320
WINDOW=6564 RES=0x00
ACK URGP=0
qui mi sega un ack su una connessione lecita dalla 80 del mio server
le connessioni sono gestita tramite lo stato delle connessioni di iptables
esempio generico:
iptables -A FORWARD -i $INT_LAN -o $INT_DMZ -p tcp -m state --state
NEW,ESTABLISHED,RELATED -m multiport -d $WWW --dport 80,443,22 -j ACCEPT
iptables -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -m multiport
-s $WWW --sport 80,443,22 -j ACCEPT
posso capire il drop di pacchetti con flag settati provenienti da internet e
dovuti a probabili scansioni, ma questi pacchetti provenienti dai server
dietro il firewall mi fanno pensare che iptables "dimentichi" o flushi ogni
tanto lo stato delle connessioni perdendo così qualche pacchetto...
In internet ho trovato info circa il parametro ip_conntrack_max e circa
hashsize parameter a lui direttamente collegato; dovrebbero gestire la
dimensione di ram che il fw utilizza per mantenere lo stato delle
connessioni...
Sul mio fw ci sono montati ben 2 Gb di ram e seguendo la formula trovata qui
http://www.wallfire.org/misc/netfilter_conntrack_perf.txt
ho ottenuto i valori di 131072 bytes per ip_conntrack_max e 16384 per
l'hashsize;
tuttavia se ip_conntrack lo modifico tramite la sua voce in /proc/sys/.... o
tramite sysctl non sono riuscito a capire come settare l'hashsize; se per un
kernel modulare può essere passato come parametro al momento del caricamento
del modulo, per un kernel monolitico come il mio come posso fare ?? esiste
una voce in sysctl o in /proc che non ho trovato ??
Ultimo dubbio:
è normale trovare il flag PSH settato durante la chiusura di una connessione
come in questo pacchetto droppato ??
TCP DROP IN=eth1 OUT=eth0 SRC=MIO_SERVER DST=XXX.XXX.XXX.XXX LEN=185
TOS=0x00
PREC=0x00 TTL=63 ID=46996 DF PROTO=TCP SPT=80 DPT=1117 WINDOW=9648 RES=0x00
ACK PSH FIN URGP=0
Se la combinazione di flag è corretta il pacchetto è stato droppato
erroneamente come negli altri esempi sopra ??
Grazie !!
Marco
Reply to: