Newsgroup: it.comp.os.linux.iniziare
Titolo: Problemi con iptables

Ciao a tutti,
ho due problemi con iptables. Recentemente ho messo in piedi un server linux
(slackware 9.1) con modem ADSL usb dove girano i servizi http (apache) e
streaming (icecast) oltre a ssh per l'amministrazione remota, inoltre fa
da router per un pc (win XP) su lan interna che ogni tanto naviga in
internet. Il tutto è ok (nat/masquerade compreso) fino a quando cerco di
applicare delle regole di input con iptables:
iptables -P INPUT DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 8000:8001 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 
127.0.0.0/255.0.0.0
 -j ACCEPT
iptables -A INPUT -s 
192.168.1.0/255.255.255.0
 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
fatto ciò succede una cosa strana (almeno per me!): se cerco di connettermi
da casa ad uno qualunque dei servizi tutto funziona bene, mentre se cerco
di connettermi da una qualunque altra postazione (lan del lavoro,
connessione dial-up, ecc.) nessun servizio è raggiungibile tranne ssh
che dal lavoro fà il login correttamente ma dopo un semplice "ls -l" si
pianta la connessione. Se la policy di input la riporto su ACCEPT tutto
torna a funzionare correttamente.
NB: a casa ho una configurazione simile con router linux (sempre slack) e
pc su lan interna.
Secondo problema (suppongo legato al primo): sul pc win ho installato vnc
e anche in questo caso da casa va tutto correttamente mentre da un'altra
postazione fà il login ma poi compare solo una schermata nera.
chiedo scusa per il post lungo (e incasinato) ma non riesco a venirne a capo.
grazie

 pianta la connessione.  
Per questo non so risponderti.
Ovviamente se metti "-P ACCEPT" ti "funziona" tutto:
infatti il sistema per ogni pacchetto che arriva, esamina le regole
sequenzialmente.
Se per il pacchetto in esame nessuna delle regole e' soddisfatta
allora viene utilizzata la policy di default (quella che imposti
con "-P").
Ho messo "funziona" tra virgolette perche', per come hai fatto le
regole, mettendo -P ACCEPT in pratica accetti in input _qualunque_cosa_,
ovvero _non_hai_piu'_un_firewall_
Spero di averti chiarito un po' le idee.
Comunque ti consiglio la lettura degli HOWTO su 
www.netfilter.org
.
Ciao,
   Marco.

    Marco.
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Si', me lo sono proprio meritato!
 
Ciao,
  Marco.

   Marco.
Ciao,
Stefano


Ciao!
Sempre piu' incuriosito dal grande mondo di iptables e dal tuo problema, mi sono
portato a casa il portatile della ditta per cui lavoro e ho "simulato" una rete collegandolo al PC che ho in casa.
Inoltre, per venire incontro alle tue esigenze, mi sono installato VNC (prima
d'ora non sapevo neppure cosa fosse).
Ho fatto in modo di configurare uno dei due PC (d'ora in poi "pisolo") come
server che eroga i segg. servizi:
- server WWW su porta 80
- server SSH su porta 22
- server VNC su porta 5900
Questi servizi sono erogati a tutti.
Gli altri servizi (ping, telnet e tutto quello che era attivo sul PC) sono
invece erogati _SOLO_ ai computer appartenenti alla stessa rete locale (195.53.74.0) di pisolo.
Per quanto riguarda VNC, per simulare la tua situazione, ho configurato il VNC
per rispondere alla porta 5910 e iptables per fare il NAT da 5900 a 5910 (scusa
ma per fare esattamente come nella tua situazione mi sarebbe servito un terzo
computer!)
Ovviamente ho fatto tutto "in locale" (ho usato un cavo incrociato) mentre tu
hai l'ADSL di mezzo (e non e' una cosa da poco!)
Il secondo computer ("pollicino") l'ho configurato in modi diversi per simulare:
1. una volta un computer appartenente alla stessa rete di pisolo (195.53.74.0)
2. un'altra volta un computer appartnente ad un'altra rete (192.168.1.0).
Il test e' andato a buon fine, ovvero la prima volta pollicino riusciva solo
ad accedere a SSH, WWW e VNC, la seconda volta pollicino accedeva invece a tutti i servizi messi a disposizione da pisolo.
Per quanto riguarda SSH e VNC: non ho mai avuto i tuoi problemi, ovvero ssh non
si piantava e VNC non mi dava schermi neri. Tuttavia erano un po' lenti.
Ho provato allora a impostare il TOS, ma non mi sembra di aver avuto molti miglioramenti.
Ti riporto qui in fondo lo script che ho usato per impostare il firewall su
pisolo per fare i test.
Per quanto riguarda i tuoi problemi forse la cosa dipende dal collegamento ADSL.Il fatto che le cose ti vadano bene quando ti colleghi com macchina router Linux mi ha fatto venire in mente una cosa che avevo letto riguardo TCPMSS su un manualetto di iptables.
Ti riporto qui la mitica frase: "(...) Solitamente si desidera come limite il valore dell'MTU meno 40. 
In questo modo si evita che alcuni firewall malconfigurati possano bloccare le nostre connessioni quando vengano richiesti dei flussi dati piuttosto consistenti.Configurare correttamente l'MSS e' fondamentale per poter utilizzare Linux come firewall che effettui masquerading sulla maggior parte delle linee ADSL in Italia. In caso contrario le macchine dietro al firewall avrebbero difficolta' nel comunicare con molte entita' presenti su Internet. Il comando e' semplice:
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu"
Ed ecco invece lo script che ho usato per i test:
<--- INIZIA QUI --->
#!/bin/sh
MY_INTRANET_NET="
195.53.74.0/24
"
# Carico modulo per cambiare il TOS
modprobe ipt_TOS
# Rimuovo le vecchie regole
iptables -F
iptables -X
# NAT per VNC: le richieste in arrivo e destinate a 5900 le devo portare a 5910
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 5900 -j DNAT --to-destination 
195.53.74.1:5910
# Policy di input a DROP
iptables -P INPUT DROP
# Rifiuto i ping degli attacchi DoS (forse e' inutile perche' comunque la policy di default e' DROP)
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128:65535 -j DROP 
# Accetto i pacchetti relativi a connessioni gia' esistenti
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accetto connessioni via ssh (porta 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Accetto connessioni per demone WWW httpd (porta 80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Accetto connessioni dalla rete locale
iptables -A INPUT -s ${MY_INTRANET_NET} -j ACCEPT
# Accetto connessioni dall'interfaccia "lo"
iptables -A INPUT -i lo -j ACCEPT
# tuning per connessioni varie
# 
# CODICE	TOS
# 0x00		Normal-Service
# 0x02		Minimize-Cost
# 0x04		Maximize-Reliability
# 0x08		Maximize-Throughput
# 0x010		Minimize-Delay
# Minimizzo ritardi per connessioni WWW e SSH
iptables -t mangle -A PREROUTING -p tcp -m tcp -m multiport --dports 22,80 -j TOS --set-tos 0x10
# Massimizzo il throughput per VNC
iptables -t mangle -A PREROUTING -p tcp -m tcp -m multiport --dports 5900,5910 -j TOS --set-tos 0x08
<--- FINISCE QUI --->
Purtroppo pero' non credo che questa mia sbrodolata di parole ti possa in qualche 
modo essere utile per risolvere il problema!
Fammi comunque sapere se ti viene in mente qualcosa per risolvere il tutto
(o anche solo per capire).
Ciao,
   Marco.

Mi sono accorto di averti spedito lo script sbagliato (manca
infatti l'accettazione dei pacchetti sulla porta 5910).
Di seguito riporto quello corretto.
Ho rifatto nuovamente il test con il server configurato esattamente
come prima e come client ho usato questa volta un volgarissimo Win ME
(i test precedenti erano stati fatti con client e server entrambi Linux
Slackware).
Sul client inoltre ho attivato il firewall windows (Zone Alarm).
Anche questa volta nessun problema! Non ho potuto testare veramente
la connessione ssh (non ho client ssh per Win - per ora :-) ), mi sono
limitato a vedere se mi riusciva un telnet sulla porta 22. Ho provato
anche WWW e VNC e nessun problema.
Il fatto che il mio script non differisca molto dalle tue impostazioni
mi fa venire il dubbio che i tuoi problemi non dipendano tanto dal
firewall con iptables, ma dagli altri host da cui cerchi di collegarti
(piu' che da loro dalla rete su cui transitano i dati prima di arrivare
al tuo server).
Rimango in attesa delle novita' (il tuo problema mi appassiona proprio).
Ciao,
   Marco.
<------------->
#!/bin/sh
MY_INTRANET_NET="
195.53.74.0/24
"
# Carico modulo per cambiare il TOS
modprobe ipt_TOS
# Rimuovo le vecchie regole
iptables -F
iptables -X
# NAT per VNC: le richieste in arrivo e destinate a 5900 le devo portare a 5910
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 5900 -j DNAT --to-destination 
195.53.74.1:5910
# Policy di input a DROP
iptables -P INPUT DROP
# Rifiuto i ping degli attacchi DoS (forse e' inutile perche' comunque la policy di default e' DROP)
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128:65535 -j DROP 
# Accetto i pacchetti relativi a connessioni gia' esistenti
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accetto connessioni via ssh (porta 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Accetto connessioni per demone WWW httpd (porta 80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Accetto connessioni a VNC sulla porta 5910
iptables -A INPUT -p tcp --dport 5910 -j ACCEPT
# Accetto connessioni dalla rete locale
iptables -A INPUT -s ${MY_INTRANET_NET} -j ACCEPT
# Accetto connessioni dall'interfaccia "lo"
iptables -A INPUT -i lo -j ACCEPT
# tuning per connessioni varie
# 
# CODICE	TOS
# 0x00		Normal-Service
# 0x02		Minimize-Cost
# 0x04		Maximize-Reliability
# 0x08		Maximize-Throughput
# 0x010		Minimize-Delay
# Minimizzo ritardi per connessioni WWW e SSH
iptables -t mangle -A PREROUTING -p tcp -m tcp -m multiport --dports 22,80 -j TOS --set-tos 0x10
# Massimizzo il throughput per VNC 
# DUBBIO: avendo fatto il NAT, devo farlo solo sulla 5910 (che e' la porta reale su cui lavora VNC)
# o anche sulla 5900 che e' la porta da cui arrivano le richieste dal mondo esterno?
# Visto il dubbio lo faccio su entrambe.
iptables -t mangle -A PREROUTING -p tcp -m tcp -m multiport --dports 5900,5910 -j TOS --set-tos 0x08
<------------->

    Marco.
Beh, intanto ti devo un grazie enorme per il tempo che hai speso a fare
tutte quelle prove (mi sento in debito almeno di una media chiara :-)
Ieri sono riuscito a fare qualche prova in particolare ho provato la
regola relativa al TCPMSS. Mi è sembrata immediatamente la soluzione
corretta, ho fatto anche una ricerca mirata con google ed in effetti ho
trovato un messaggio di un tale che ha avuto praticamente il mio stesso
problema con tiscali (anche nel mio caso c'è tiscali) e l'ha risolto con
quella regola. Per cui sono partito alla grande ma purtroppo non funziona
ancora. Doppia delusione poichè la prima volta mi ero dimenticato di
caricare il modulo ipt_TCPMSS......
Devo dire che ho fatto delle prove un pò frettolose, non ho avuto molto
tempo a disposizione, domani potrò fare delle prove in più.
Comunque credo che sia questa la strada giusta.
Certo, come dici tu può essere un problema degli host che stanno
dall'altra parte però ormai ho già provato la LAN aziendale, due
connessioni dial-up diverse ed una connessione ADSL tin e non và mai !
Devo ancora provare i tuoi suggerimenti per le regole in input
(vedi TOS).
Grazie ancora
ciao,
Stefano