Newsgroup: it.comp.os.linux.sys
Titolo: iptables e firewall

salve!
ho un problema con la configurazione di iptables per un firewall
"casalingo" che sto cercando di mettere a punto.
guardando mille guide e how-to sono arrivato a scrivere uno script di
configurazione che dovrebbe essere corretto (a volte l'ho pure copiato
pari pari da script trovati in rete spacciati per funzionanti), ma
sulla mia installazione (redhat 7.3 con l'ultimo netfilter e 2 schede
ethernet su due lan differenti (192.... e 10....) ogni volta mi
ritrovo con lo stesso "disguido".
in sintesi io vorrei che solo alcuni pc della mia lan siano abilitati
ad accedere ad alcuni servizi (tipo ftp,telnet,...), mentre altri
possano fare "tutto". 
per fare questo innanzitutto il mio script carica una serie di moduli
modprobe iptable_nat
modprobe iptable_filter
modprobe ipt_TOS
modprobe ipt_mark
modprobe ipt_tos
modprobe ipt_ttl
modprobe ipt_MARK
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ip_tables
modprobe ip_queue
modprobe ipt_multiport
modprobe ipt_mac
modprobe ipt_unclean
modprobe ipt_REJECT
modprobe ipt_state
modprobe ipt_owner
modprobe ipt_limit
modprobe ip_nat_irc
modprobe ip_nat_snmp_basic
modprobe ipt_MASQUERADE
poi definisco le policy di default
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
e visto che il forward č abilitato faccio in modo che accetti le
risposte dall'esterno
$IPTABLES -A FORWARD -p all -i $ETH_INTERNET -m state --state
ESTABLISHED,RELATED -j ACCEPT 
adesso voglio che del pc limitato vengano passate solo le chiamate ad
un POP
$IPTABLES -A FORWARD -s $IP_PC_LIMITATO -p tcp --dport 110 -j ACCEPT
mentre per gli altri passi tutto
$IPTABLES -A FORWARD -s $IP_PC_POTENTI -p all -j ACCEPT
tutto questo mentre il NAT fa il suo lavoro
$IPTABLES -t nat -A POSTROUTING -o $ETH_INTERNET -s $IP_LAN -p all -j
SNAT --to $IP_ETH_INTERNET
tutto corretto, no?
sembrerebbe, ma con questa configurazione il PC_POTENTE puň fare tutto
mentre quello 
LIMITATO non passa nemmeno per il pop.
se a questo punto cambio la regola per il suddetto limitato e faccio
passare tutto 
anche per lui
$IPTABLES -A FORWARD -s $IP_PC_LIMITATO -p all -j ACCEPT
ovviamente funziona.
se poi torno alla configurazione iniziale (con solo la porta POP
abilitata) questo 
funziona come avrebbe dovuto fare fin dall'inizio.
la cosa strana č quindi che per far funzionare la limitazione come io
volevo devo prima 
far passare il pc almeno una volta per la porta che volevo lasciargli.
e la cosa non mi sembra normale...
qualcuno ha qualche suggerimento sul perchč funziona cosě? dove sto
sbagliando?
spero di essere stato chiaro, grazie in anticipo per l'aiuto

Nel fausto dì di Thu, 25 Mar 2004 10:26:59 GMT,
il prode _g...@TOGLIQUESTOgmecommunications.ws_
presente alla corte di _it.comp.os.linux.sys_
così ebbe l'ardire di pronunziarsi:
| salve!
  Ciao.
[...]
| poi definisco le policy di default
|
| $IPTABLES -P INPUT DROP
| $IPTABLES -P OUTPUT ACCEPT
| $IPTABLES -P FORWARD DROP
|
| e visto che il forward è abilitato faccio in modo che accetti le
| risposte dall'esterno
|
| $IPTABLES -A FORWARD -p all -i $ETH_INTERNET -m state --state
| ESTABLISHED,RELATED -j ACCEPT 
|
| adesso voglio che del pc limitato vengano passate solo le chiamate ad
| un POP
|
| $IPTABLES -A FORWARD -s $IP_PC_LIMITATO -p tcp --dport 110 -j ACCEPT
  Siccome prima hai definito, per il bersaglio "ACCEPT", gli stati
"ESTABLISHED,RELATED", qui puoi ammettere esplicitamente solo i pacchetti di
stato "NEW", così filtri via pacchetti spuri.
  Vedo in alto che hai messo come "policy" per INPUT DROP.  Bene, ma devi
quindi mettere una regola di "ACCEPT" in INPUT per i pacchetti diretti alla
porta "pop3", potrebbe essere lì il blocco.
| mentre per gli altri passi tutto
|
| $IPTABLES -A FORWARD -s $IP_PC_POTENTI -p all -j ACCEPT
|
| tutto questo mentre il NAT fa il suo lavoro
  Controlla anche che il PREROUTING della catena "nat" non blocchi i pacchetti
di "pc limitato"; com'è la sua "policy"?
| $IPTABLES -t nat -A POSTROUTING -o $ETH_INTERNET -s $IP_LAN -p all -j
| SNAT --to $IP_ETH_INTERNET
|
| tutto corretto, no?
  Quanto hai riportato sembra a posto.
  Prova a farti uno scirptino che esegua i comandi:
iptables -t filter -L -v --line-numbers ; iptables -t nat -L -v
--line-numbers
e vedi quali contatori di pacchetti scartati aumenta ogni volta che tenti
l'accesso al server pop3 da parte di "pc limitato"; altrimenti, metti come
ultima regola delle catene INPUT (filter) e PREROUTING (nat) una regola di
LOG, così vedi dov'è che i pacchetti sono fermati o non sono ammessi e vanno a
finire contro la "policy" di DROP.
[...]
| spero di essere stato chiaro, grazie in anticipo per l'aiuto
  Spero di esserti stato d'aiuto.
  Sandro
-- 
"In a world without walls and fences
you would not need windows and gates."
(Confucius)

g...@TOGLIQUESTOgmecommunications.ws wrote:
[SNIP]
Il "flush" di tutto te lo sei ricordato, prima
della definizione delle policy e l'immissione delle regole?
bye G.L.
-- 
- Renaissance, aka Gian Luca Sole -
Cit. « E' assolutamente evidente che l'arte del cinema
  si ispira alla vita, mentre la vita si ispira alla TV »
                                         (Woody Allen)


wrote:


 
imho, dipende dal fatto che non hai una regola di forward per i pacchetti 
related e established provenienti dall'interno.
il pc limitato, si connette alla porta 110, riceve la risposta e inizia a 
trasmettere sulla nuova porta concordata col server.
peccato che questa porta sia diversa da 110 e quindi non sia permessa al 
transito attraverso il firewall...
se metti
$IPTABLES -A FORWARD -i $ETH_LAN -m state --state
ESTABLISHED,RELATED -j ACCEPT 
ti funziona qualcosa o è come prima?
-- 
+-------
| Paolo opg
|
| janickg ( at ) hotmail ( dot ) com
| (fake address in reply-to field!)
+-------

 determinati pc, diversi l'uno dall'altro..
IMHO si fa prima a scovare l'arcano con l'output di iptables-save.


modprobe ipt_MASQUERADE
James Tiberius Kirk, matricola SC 937-076 CEC,
 nato a Riverside, nello Iowa, USA, Terra il 1277.1 (26/03/2233).