Newsgroup: it.comp.sicurezza.varie
Titolo: [DOMANDA] Iptables - una sola connessione per ip

Vorrei impedire all'ip x.x.x.x di stabilire piu' di una connessione 
sulla porta n
Praticamente ogni ip puo' stabilire una sola connessione per volta su 
quella data porta.
Sapreste indicarmi la regola corretta per il mio iptables?
~omar



I casi sono due: o c'e' un modulo apposta che lo fa per iptables, e che
ora non mi viene in mente.
Oppure ti tocca implementare una macchina a stati tua in vari modi:
- usando -m recent:
	* un SYN da $IP viene accettato e imposta un tag RECENT se non
	  c'e'
	* un SYN da $IP va in REJECT se il tag c'e'
	* un FIN/ACK cancella il tag RECENT (se lo perdi,  $IP muore e
	  non si connette piu' piu' piu' - e ti tocca inventarti degli
          accrocchi tipo crontab per sistemare le cose FORSE).
	La macchina a stati vera dovrebbe gestire anche SYN/ACK...
- usando -m limit:
	* limiti i SYN a diciamo uno ogni tot minuti. Non e' *proprio*
	  quello che cerchi ma ci si avvicina, ed e' molto piu' facile
	  e meno soggetto a incasinamenti.
Personalmente sarei in favore di capire cosa tu intenda per connessione
e realizzare quello che vuoi nel modo giusto, ché questo mi puzza tanto
di modo sbagliato :-)
Leonardo
-- 
"Se e' vero che Linux in se' e' gratis, non lo sono le indispensabili
interfacce grafiche (X, KDE ecc.) che consentono alle persone normali
di utilizzarlo."                    -- Jason Matusow, Microsoft Corp.



Mi pare che non esista nulla del genere.
Pero' puoi provare ad adattare il modulo limit, aggiungendo in coda alla
regola che permette la connessione qualcosa tipo: 
-m limit --limit 1/minute
o
-m limit --limit 1/hour
che limita il numero di volte che una regola puo' venire applicata,
superato il quale la considera sempre "non verificata".
HTH
-- 
Mario "Reliant" Pascucci
"From" field altered. Please use ilpettegolo(a)
yahoo.it
 for private mail.
http://ilpettegolo.altervista.org/

 di modo sbagliato :-)
Prima di tutto grazie per le tue prime indicazioni :)
Cerchero' di spiegarti quello che vorrei fare, con un esempio...
Ho un server in ascolto sulla porta 1234, esso accetta e stabilisce 
connessioni tcp...
Se tu ti connetti per la prima volta tutto ok, resti connesso apri la 
sessione e sei felice...
Se nel frattempo ti connetti di nuovo aprendo una nuova sessione, 
iptables ti fa le pernacchie... perche' <sei' gia' dentro>
Che ne pensi?
~omar

 HTH
In questo modo pero' verrebbe applicata ad tutti gli ip 
indiscriminatamente... o sbaglio?
Speriamo che esista quello che cerco, finora iptables non mi ha mai 
deluso :)
~omar

 
Mah... immagino che vada applicata ad una classe di ip, giusto?
Specifichi nella regola la classe di indirizzi sorgente che deve essere
sottoposta alla regola.
Tipo:
iptables -A INPUT -s 
10.23.1.0/24
 -d ip-del-server -p tcp --syn\
--dport porta-del-servizio -m limit --limit 1/hour -j ACCEPT
potrebbe fare al caso tuo, no?
Ma leggo dall'altra riposta il problema vero e' di limitare l'utente ad
una sola sessione per volta. 
Sarebbe il caso che fosse l'applicazione e controllare, e' piu' il suo
mestiere.
Farlo con iptables e' come piantare chiodi col trapano. Spento.
Poi, sempre IMHO, ok?


 Farlo con iptables e' come piantare chiodi col trapano. Spento.
Inizialmente infatti mi e' stato proposto di farlo fare direttamente al 
programmatore il controllo...
Quella di chiedere ad iptables e' stata una mia idea...
ho pensato che (se fosse esistita una regola a HOC...) sarebbe stato 
piu' pratico...
Grazie per il tuo aiuto :)
~omar

 Che ne pensi?
Mi pare un accrocchio per risolvere quello che invece e` un problema
applicativo, che spetta al server risolvere.
-- 
ciao, hal

 Mi pare che non esista nulla del genere.
C'è ed ha già avuto una risposta, che non gli avrei neanche
dato, se mi fossi accorto prima del mmultipost.
Il modulo si chiama connlimit ed è in pacth-o-matic-ng

 applicativo
Subscribe, ma iptables a volte serve anche a rimediare a deficienze
applicative...:-)

connessioni tcp...
Okay, questo genere di cose ANDREBBE risolto a livello applicativo.
Per esempio in inetd c'e' gia' il supporto per questo genere di cose,
sia a livello di TUTTI gli indirizzi:
       instances        5
sia a livello di singolo indirizzo in genere:
	per_source	3
Tu lo vuoi in piu' anche per uno "specifico" indirizzo IP, cioe', lui
limitato e gli altri no.
In questo caso dovresti mettergli un "wrapper", che legga per esempio
l'output di netstat e decida se uscire con un errore, oppure lanciare
un'istanza del server, e dichiarare quel wrapper come nuovo server.
Se il server non e' xinetdabile, IMVHO la meno peggio, anche se *non*
ottimale, e' iptables -m limit (man iptables), se le connessioni sono
"few and far between": diciamo anzi nel caso che "fra una connessione
e l'altra passa piu' tempo di quanto dura una connessione", ovvero se
lui sta connesso X minuti, e sconnesso Y minuti, Y >= X; dove X e' la
MASSIMA durata di una connessione e Y e' la MINIMA durata fra due.
Se nemmeno questo va bene, non ti resta che tentare con -m recent con
cui creare una macchina a stati (non sono sicurissimo che lo si possa
fare, ho solo la sensazione che si possa). Ricordando che se ti perdi
un pacchetto critico (tipo il FIN+ACK perche' magari non si sconnette
ma pigia il tasto RESET) la macchina rimane in uno stato "locked" che
non accetta piu' connessioni, e ti serve uno script di ripristino che
va fatto girare a intervalli regolari.
Un'alternativa attraente potrebbe essere offerta da man lart(8).


 Il modulo si chiama connlimit ed è in pacth-o-matic-ng
Grazie, sto vedendo che fa al caso mio...
~omar

 la prossima volta plonkami o evita di rispondere...
Io faccio quel che mi pare, fidati.
-- 
Chaos A.D.		|	Raging crowd
Tanks on the streets	|	Burning cars
Confronting police	|	Bloodshed starts
Bleeding the Plebs	|	Who'll be alive?

 Io faccio quel che mi pare, fidati.
Anche io sceriffo...
per esempio adesso vado in bagno...
~omar

 applicative...:-)
Iptables e' su una macchina  linux che fa da firewall verso un'altra su 
cui girail demone...
all'epoca non c'era l'esigenza di bloccare il multiaccesso dallo stesso 
ip, oggi invece si e' presentata...
In pratica facciamo prima a aggiungere la regola a iptables che chiamare 
l'omino del programma e fagli aggiungere questo controllo.
~omar

 f/u
Torna dagli altri 6 va...
~omar