View Full Version : Domandona iptables e nemesis
Ciao a tutti, ho il seguente script di esempio con cui configuro un firewall iptables su una Debian 5.0.
##VARIABILI
IPTABLES="/sbin/iptables"
LOCAL_IP="192.168.0.10"
##DEFAULT RULE
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
##CHAIN DI OUTPUT
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j DROP
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j LOG --log-prefix "PORTA 12345:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 1024: -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 1024: -m state --state NEW,ESTABLISHED -j LOG --log-prefix "FTP DATA CONNECTION OUT:"
##CHAIN DI INPUT
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 1024: -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 1024: -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j LOG --log-prefix "FTP DATA INPUT: "
Lo script permette l'instaurazione di connessioni dalle porte >=1024 verso host esterni, bloccando solamente le connessioni in uscita dirette alla porta 12345.
Lo script provato in vari modi usando per esempio netcat e telnet sembra funzionare correttamente, ma provando a generare un pacchetto con nemesis per testarne il funzionamento il pacchetto in questione esce come niente fosse dal FW!!! Come mai questo strano comportamento con nemesis? sembra che nemesis riesca a bypassare iptables.
Questo è il comando che ho usato per generare il pacchetto di prova con nemesis:
nemesis tcp -d eth0 -v -a 123456789 -s 987654321 -f S -x 5555 -y 12345 -P - -S 192.168.0.10 -D 192.168.0.13 -I 123 -T 10
Qualcuno può aiutarmi a trovare il problema?
Ciao a tutti e grazie
Gimli[2BV!2B]
24-11-2009, 19:18
La tua affermazione riguardo all'uscita indisturbata è dovuta alla mancanza di righe di log che iniziano con "PORTA 12345:"? Oppure dall'altra parte intercetti i pacchetti?
Prova ad invertire le regole; prima logga, poi scarta:
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j LOG --log-prefix "PORTA 12345:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j DROP
Il drop interrompe la valutazione della catena, quindi la regola di log non dovrebbe essere eseguita a causa della posizione in cui l'hai messa.
;29819181']La tua affermazione riguardo all'uscita indisturbata è dovuta alla mancanza di righe di log che iniziano con "PORTA 12345:"? Oppure dall'altra parte intercetti i pacchetti?
Prova ad invertire le regole; prima logga, poi scarta:
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j LOG --log-prefix "PORTA 12345:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j DROP
Il drop interrompe la valutazione della catena, quindi la regola di log non dovrebbe essere eseguita a causa della posizione in cui l'hai messa.
Si è vero le regole andrebbero tutte invertite LOG e DROP intendo, cmq io per la prova ho intercettato i pacchetti sulla macchina diciamo destinataria... quindi non mi sono basato sui LOG.
Ciao
Gimli[2BV!2B]
24-11-2009, 20:20
Le linee di log compaiono?
Non conosco nemesis e non ho ancora controllato la sua man, i dati corretti li vedo in gioco...
Prova a fare un RETURN, che dovrebbe comunque interrompere la valutazione della catena facendo ricadere i pacchetti nella policy di default, l'OUTPUT DROP:
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j RETURN
;29820091']Le linee di log compaiono?
Non conosco nemesis e non ho ancora controllato la sua man, i dati corretti li vedo in gioco...
Prova a fare un RETURN, che dovrebbe comunque interrompere la valutazione della catena facendo ricadere i pacchetti nella policy di default, l'OUTPUT DROP:
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP -d 0/0 --dport 12345 -j RETURN
Domani appena riesco provo a sistemare le regole di LOG mettendole prima delle altre e il RETURN
Cmq guardando questo schema di netfilter:
_____
Ingresso / \ Uscita
-->[Decisioni]-->|FORWARD|------>
[di routing] \_____/ ^
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
----> Processi locali --
Per i processi le mier regole funzionano... è solo usando nemesis o packit che le regole sembrano essere bypassate, sembrerebbe come se facessero l'inject del pacchetto subito dopo la chain di output evitando il filtraggio.
Gimli[2BV!2B]
24-11-2009, 22:13
Ho controllato nemesis, si appoggia alle librerie libnet e libpcap.
libcap è una simpatica bestiola (http://www.tcpdump.org/): in entrata intercetta tutto il traffico prima di netfilter, in uscita ha la stessa libertà... quindi, sì nemesis bypassa iptables.
Un esempio di riferimento a questa cosa. (http://seclists.org/tcpdump/2004/q1/299)
;29821939']Ho controllato nemesis, si appoggia alle librerie libnet e libpcap.
libcap è una simpatica bestiola (http://www.tcpdump.org/): in entrata intercetta tutto il traffico prima di netfilter, in uscita ha la stessa libertà... quindi, sì nemesis bypassa iptables.
Un esempio di riferimento a questa cosa. (http://seclists.org/tcpdump/2004/q1/299)
Ecco!!! allora non sono io pazzo! :asd: Grazie mille dell'aiuto cmq!
Non c'è quindi modo di fare lavorare libpcap prima della chain di output?
Lo stesso problema quindi mi si verifica all'inverso con tcpdump o tshark che sia... :muro:
Svelato il mistero!!! :asd:
Se usiamo con nemesis l'opzione:
-d eth0
nemesis apre un canale RAW con l'interfaccia di rete riuscendo a bypassare anche netfilter, questo sia in ingresso che in uscita.
# nemesis tcp -d eth0 -S 192.168.0.10 -x 5000 -D 192.168.0.13 -y 457
TCP Packet Injected
Se non si specifica l'interfaccia netfilter non apre il canale RAW e fa passare il pacchetto in uscita verso netfilter che quindi lo droppa.
# nemesis tcp -S 192.168.0.10 -x 5000 -D 192.168.0.13 -y 457
ERROR: Incomplete packet injection. Only wrote -1 bytes.
TCP Injection Failure
Ciao
P.S. Il test postato in questa pagina non si riferisce allo script sopra riportato ma ad un'altro che posto di seguito, cmq la sostanza non cambia
##VARIABILI
LOCAL_IP="192.168.0.10"
SERVER_IP="192.168.0.13"
IPTABLES="/sbin/iptables"
##DEFAULT POLICY
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
##CHAIN DI INPUT
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 456 -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j LOG --log-prefix "IN FROM TCP456:"
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 456 -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 2000:3000 -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j LOG --log-prefix "IN FROM TCP2k3k:"
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 2000:3000 -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p UDP -s $SERVER_IP --sport 53 -d $LOCAL_IP --dport 1024: -j LOG --log-prefix "DNS QUERY RESPONSE:"
$IPTABLES -A INPUT -p UDP -s $SERVER_IP --sport 53 -d $LOCAL_IP --dport 1024: -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 21 -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j LOG --log-prefix "FTP COMMAND IN"
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 21 -d $LOCAL_IP --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 20 -d $LOCAL_IP --dport 1024: -m state --state NEW,ESTABLISHED -j LOG --log-prefix "FTP DATA IN:"
$IPTABLES -A INPUT -p TCP -s 0/0 --sport 20 -d $LOCAL_IP --dport 1024: -m state --state NEW,ESTABLISHED -j ACCEPT
##CHAIN DI OUTPUT
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 456 -m state --state NEW,ESTABLISHED -j LOG --log-prefix "OUT TO TCP456:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 456 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 2000:3000 -m state --state NEW,ESTABLISHED -j LOG --log-prefix "OUT TO TCP2000:3000:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 2000:3000 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p UDP -s $LOCAL_IP --sport 1024: -d $SERVER_IP --dport 53 -j LOG --log-prefix "DNS QUERY OUT:"
$IPTABLES -A OUTPUT -p UDP -s $LOCAL_IP --sport 1024: -d $SERVER_IP --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 21 -m state --state NEW,ESTABLISHED -j LOG --log-prefix "FTP COMMAND OUT:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 20 -m state --state RELATED,ESTABLISHED -j LOG --log-prefix "FTP DATA IN:"
$IPTABLES -A OUTPUT -p TCP -s $LOCAL_IP --sport 1024: -d 0/0 --dport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p ICMP -s $LOCAL_IP ! --icmp-type 8/0 -j LOG --log-prefix "ICMP ECHO REQ OUT:"
$IPTABLES -A OUTPUT -p ICMP -s $LOCAL_IP ! --icmp-type 8/0 -j ACCEPT
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.