Newsgroup: it.comp.os.linux.sys
Titolo: dubbi su iptables

Una configurazione di test su di un server WEB:
cat /etc/sysconfig/iptables
#di default droppo tutto
-P INPUT DROP
#accetto tutto ciň che proviene da  eth1 (sulla lan sicura) e lo
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
#ACCESSO AL WEBSERVER
-A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
#Connessioni stabilite e relate
-A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
#ridroppo tutto per sicurezza
-A INPUT -i eth0 -p tcp -j DROP
-A INPUT -i eth0 -p udp -j DROP
-A INPUT -i eth0 -p icmp --icmp-type8  -j DROP
adesso per permettere a questa macchina di uscire su internet devo 
aggiungere una linea del genere (naturalmente prima del drop):
-A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT
in quanto se il mio server si collega ad un altro server web riceverebbe 
come primo pacchetto
un pacchetto con la flag syn e ack attivi quindi una connessione non ancora 
stabilita (SYN SEND).
Quindi se volessi da questa macchina effettuare un scan con nmap di altre 
macchine ciň sarebbe
del tutto inutile in quanto tutti i pacchetti con flag SYN e ACT settati 
verrebbero scartati giusto ?
come si risolve questo problema ?
scusatemi se ho detto delle cavolate ma iptables mi sta facendo perdere la 
testa:)

 verrebbero scartati giusto ?
Difficile dirlo, non hai settato le default policy (-P). In teoria, con 
un set di regole liscio (quindi senza policy esplicitamente dichiarate) 
dovrebbero essere tutte impostate ad "ACCEPT", quindi il problema non 
dovrebbe porsi, visto che gestisci l'established,related per i pacchetti 
tcp.
Fra l'altro non hai nemmeno settato le regole per la loopback, cosa che 
potrebbe crearti non pochi problemi.

 --syn -j ACCEPT
Permettimi di farti notare che ..syn si usava su ipchains.
Usarlo su iptables che è STATEFUL è una cosa che fa accapponare la pelle ad
ogni "purista" o ad ogni persona che sappia utilizzare al meglio iptables.
-m state --state NEW è molto molto molto meglio, insieme ai cugini
ESTABLISHED e RELATED.
Max

potrebbe crearti non pochi problemi.
si questa è per la loopback


 ESTABLISHED e RELATED.
Fai questo esperimento.
iptables -I INPUT -i lo -p tcp -m state --state NEW -j LOG
hping -A -p 8000 127.0.0.1
Se ti ritrovi roba nel log relativa a pacchetti diretti alla porta 8000,
allora la tua equivalenza tra --syn e NEW non è vera. :)
-- 
Chaos A.D.		|	Raging crowd
Tanks on the streets	|	Burning cars
Confronting police	|	Bloodshed starts
Bleeding the Plebs	|	Who'll be alive?

 allora la tua equivalenza tra --syn e NEW non è vera. :)
ma a chi ti riferisci ? a me ?
giuro che non ho capito.
Max

 ma a chi ti riferisci ? a me ?
Il quoting e le references sono piuttosto chiari.
No, non parlavo con te.


 ma a chi ti riferisci ? a me ?
Beh, sì.


 ESTABLISHED e RELATED.
Forse a voler fare le cose fatte bene, si dovrebbe scrivere --syn -m 
state --state NEW, perché dai test che ho fatto in passato, lasciare 
soltanto --m state --state NEW non filtra come ci si aspetta.
Poi vabbeh, io mi sto ancora facendo le ossa, per cui potrebbe darsi che 
abbia detto una marea di cazzate. In quel caso spero che abbiate 
abbastanza forza d'animo per perdonarmi :P

 -A INPUT -i lo -j ACCEPT
scusa, mi era proprio sfuggita.
Ti suggerirei comunque di passare su it.comp.os.linux.iniziare :)

> allora la tua equivalenza tra --syn e NEW non č vera. :)
Io ho detto che sono equivalenti ?
mi pare proprio il contrario.
Max
 

 mi pare proprio il contrario.
Ok, hai detto che non si deve filtrare per flag ma per stato.
Ho solo fatto notare che nella categoria NEW, relativamente al
tcp, non rientrano affatto i soli pacchetti con flag SYN che è
legittimo attendersi in un handshaking tcp, ma anche, ad esempio,
dei pacchetti con flag ack.
Dunque, a voler far la punta al c^W^W^Walla matita, una regola
con il --syn è più restrittiva di una regola con -p tcp -m state
--state NEW, tutto qui. :)


 --state NEW, tutto qui. :)
Hai ragione.
Non avevo colto il dettaglio del -p tcp che avevi scritto.
Senza dubbio --syn è più ristrittivo, ma --state NEW è generalmente più
corretto e uniforme.
E si adatta anche a udp e altri protocolli.
Max
 

 conformità alla tua regola.
ho fatto una prova e verificato che non funziona
ovvero senza :
-A INPUT -i eth0 -p tcp --sport  80 -j ACCEPT
non riesco a ricevere pacchetti che provengono dal server web.
la connessione viene marcata ESTABLISHED dopo aver ricevuto un pachetto con 
la
flag SYN e ACT settata, quindi senza questa riga non sembra andare.

 flag SYN e ACT settata, quindi senza questa riga non sembra andare.
Bisogna vedere come hai scritto il ruleset.
Firewall minimale:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Assicuro che funziona.

 --syn -j ACCEPT
Accetti SYN provenienti dalla 80 di qualcuno?!?
Che senso dovrebbe avere?

 non riesco a ricevere pacchetti che provengono dal server web.
Ehm.... il tuo "al un server web" mi deve aver spiazzato non poco 
l'altro giorno.
Riformulo in modo da farti capire, sperando di aver finalmente capito 
cosa intendevi tu:
- se tu devi accedere ad un server web sulla cui macchina hai settato le 
regole che hai impostato, allora la regola che discrimina (o meglio, 
accetta) il traffico sulla porta 80 DEVE ESSERCI.
- se tu dalla macchina con il server web sul quale hai impostato le 
regole che hai postato vuoi accedere ad ALTRI server web, non hai 
bisogno di molte altre regole, visto che gestisci l'established related 
(io avevo capito che tu rientravi in questa casistica).
Spero di aver chiarito il qui pro quo.

 Assicuro che funziona.
In realtà no, manca un
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
:-P


Nessuno infatti, doveva applicarla a questa:
-A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
:)

 capito che tu rientravi in questa casistica).
invece dalle prove che ho fatto con quel set di regole :
#di default droppo tutto
#di default invece in output esce tutto
-P INPUT DROP
#accetto tutto ciò che proviene da eth1 (sulla lan sicura) e lo
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
#ACCESSO AL WEBSERVER
-A INPUT -i eth0 -p tcp -m state --state NEW --dport 80 -j ACCEPT
#Connessioni stabilite e relate
-A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
#ridroppo tutto per sicurezza
-A INPUT -i eth0 -p tcp -j DROP
-A INPUT -i eth0 -p udp -j DROP
-A INPUT -i eth0 -p icmp --icmp-type8 -j DROP
come CLIENT non riesco ad accedere e nessun servizio,
l'unico modo è aggiungendo questa regola
-A INPUT -i eth0 -p tcp --sport PORTA DEL SERVIZO AL QUALE VOGLIO 
ACCEDERE -j ACCEPT
perche i pacchetti che provengono dal server al quale mi collego, arrivano 
con la flag SYN,ACK e  non sembrano rientrare nel
rule ESTABLISHED.
è cosi o è il mio firewall che ha qualche problema ?

 capito che tu rientravi in questa casistica).
invece dalle prove che ho fatto con quel set di regole :
#di default droppo tutto
#di default invece in output esce tutto
-P INPUT DROP
#accetto tutto ciò che proviene da eth1 (sulla lan sicura) e lo
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
#ACCESSO AL WEBSERVER
-A INPUT -i eth0 -p tcp -m state --state NEW --dport 80 -j ACCEPT
#Connessioni stabilite e relate
-A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
#ridroppo tutto per sicurezza


 rule ESTABLISHED.
??
hai controllato con lsmod che ip_conntrack esista?


Però se ci pensi bene un pacchetto SYN,ACT non rientra nello stato 
ESTABLISHED perciò potrebbe venire non matchata.
non so che altro pensare sono solo sicuro che se non metto la regola in 
questione
il classico wget non riesce a reperire il sito richiesto.

 ESTABLISHED perciò potrebbe venire non matchata.
Assolutamente no: se il SYN/ACK è generato in risposta ad un precedente 
SYN, questo verrà marchiato sicuramente come ESTABLISHED (visto che 
conterrà il sequence number+1 che era contenuto nel SYN di partenza).

comprendo le vostre perplessità ma il "problema" rimane per maggiora 
chiarezza vi posto tutta la configurazione:
trovate un pò di confusione perche non ho omesso nessuna riga anche quelle 
commentate:
cat /etc/sysconfig/iptables
# Generated by iptables-save v1.2.11 on Fri Dec  3 11:32:04 2004
*filter
#POLICY DEFAULT
-P INPUT DROP
-A INPUT -i eth1 -s 
10.0.0.0/255.255.255.0
 -d 10.0.0.4 -j ACCEPT
-A INPUT -i lo -j ACCEPT
##ESTABLISHED
-A INPUT -i etho -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#MYSQLD
-A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
#-A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
-A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
## per replica
-A INPUT -i eth0 -p tcp -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
-A INPUT -i eth0 -p tcp -s 0/0 --dport 3306 -j ULOG --ulog-prefix "adv 
mysql"
-A INPUT -i eth0 -p tcp -s 0/0 --dport 3306 -j REJECT
#SNMPD
-A INPUT -i eth0 -p udp --dport 161 -s xxx.xxx.xxx.xxx -j ACCEPT
#-A INPUT -i eth0 -p udp --dport 161 -s xxx.xxx.xxx.xxx -j ACCEPT
#SSHD
-A INPUT -i eth0 -p tcp --dport 4789 -s xxx.xxx.xxx.xxx -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 4789 -s xxx.xxx.xxx.xxx -j ACCEPT
-A INPUT -d xxx.xxx.xxx.xxx -p tcp --dport 4789 -s xxx.xxx.xxx.xxx/29 -j 
ACCEPT
-A INPUT -d xxx.xxx.xxx.xxx -p tcp --dport 4789 -s xxx.xxx.xxx.xxx/28 -j 
ACCEPT
-A INPUT -d xxx.xxx.xxx.xxx -p tcp --dport 4789 -s xxx.xxx.xxx.xxx/29 -j 
ACCEPT
#SENDMAIL
-A INPUT -i eth0 -p tcp --sport 25 -j ACCEPT
#HTTPD
-A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
#HTTPS
-A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
#FTP
-A INPUT -i eth0 -p tcp --dport 21 -s xxx.xxx.xxx.xxx -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 20 -s xxx.xxx.xxx.xxx  -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 21 -s xxx.xxx.xxx.xxx -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 20 -s xxx.xxx.xxx.xxx -j ACCEPT
-A INPUT -i eth0 -p tcp -s 0/0 --dport 21 -j ULOG  --ulog-prefix "adv ftp"
-A INPUT -i eth0 -p tcp -s 0/0 --dport 21 -j REJECT
#DNS
-A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
#CLIENT
-A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 4789 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 22 -j ACCEPT
#SCAN NMAP
-A INPUT -i eth0 -p tcp --dport 22:25 --syn -j ULOG --ulog-prefix "adv 
NMAP-S"
-A INPUT -i eth0 -p tcp --dport 22:25 --tcp-flags ALL FIN  -j 
ULOG --ulog-prefix "adv NMAP-SFIN"
-A INPUT -i eth0 -p tcp --dport 22:25 --tcp-flags ALL FIN,PSH,URG -j 
ULOG --ulog-prefix "adv NMAP-XMAS"
-A INPUT -i eth0 -p tcp --dport 22:25 --tcp-flags ALL NONE -j 
ULOG --ulog-prefix "adv NMAP-NSCAN"
-A INPUT -i eth0 -p tcp --syn -j REJECT
-A INPUT -i eth0 -p tcp --tcp-flags ALL FIN  -j REJECT
-A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,PSH,URG -j REJECT
-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j REJECT
#IP SPOFING
-A INPUT -i eth0 -s 
192.168.0.0/255.255.0.0
 -j REJECT
-A INPUT -i eth0 -s 
10.0.0.0/255.255.0.0
 -j REJECT
##PING
-A INPUT -i eth0 -p icmp -s xxx.xxx.xxx.xxx --icmp-type 8 -j ACCEPT
###server x opmanager
-A INPUT -i eth0 -p icmp -s xxx.xxx.xxx.xxx --icmp-type 8 -j ACCEPT
#-A INPUT -i eth0 -p icmp -s xxx.xxx.xxx.xxx --icmp-type 8 -j ACCEPT
#-A INPUT -p icmp --icmp-type echo-request -j ULOG --ulog-prefix=db
-A INPUT -p icmp --icmp-type echo-request -j DROP
#UDP
#-A INPUT -i eth0 -p udp -j ULOG --ulog-prefix=db
come servizi attivi cono apache + mysql(su localhost e accessibile solo da 
alcuni host) e viene gestita da remoto tramite ssh + snmp (accessibile solo 
dai miei host)
dove sbaglio in questa configurazione ?

 è cosi o è il mio firewall che ha qualche problema ?
RELATED ed ESTABLISHED accettate in sola relazione al protocollo TCP.
Applicazione maieutica: le risposte fornite dal server DNS, solitamente,
con quale protocollo sono ricevute?

 -A INPUT -i etho -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
Se questo è un copincolla, in questa riga c'è un errore che spiegherebbe
molto, se non tutto...

 con quale protocollo sono ricevute? (udp)
ma i server dns sono sulla lan interna e quindi su -i eth1
cat /etc/resolv.conf
nameserver 10.0.0.1
nameserver 10.0.0.2