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

Salve a tutti,
 
qualcuno sa se e` possibile (e come) configurare
un firewall, iptables magari, in modo da bloccare
famiglie di indirizzi IP dal data base GeoIP.
 
In altri termini bloccare intere nazioni, senza pero`
dover assegnare a mano tutti i gruppi di indirizzi
possibili (e meno che non siano solo un paio).
 
Sembra cattivo, lo so, ma sto facendo un esperimento...
 
bye,
 
-- 
 
piergiorgio
 


Provato a vedere che dice google per "iptables geoip"?
Perchï¿œ son certo che trovi tutto ;-)
 

 Perchï¿œ son certo che trovi tutto ;-)
 
Infatti, ci ho pensato esattamente nel momento
in cui ho premuto "send"... :-)
 
Grazie comunque...
 
Avrei ad ogni modo un paio di domande, non essendo
esperto della cosa.
 
Il modulo "geoip" sembra distinguere tra source
e destination country, mentre iptables distingue
tra source e deistination port.
 
Per bloccare qualunque traffico, su certe porte,
si devono aggiungere 4 regole, cioe` tutte le
possibili combinazioni sport/dport src/dst country?
 
Oppure c'e` una logica migliore?
 
Grazie di nuovo,
 
bye,
 
-- 
 
piergiorgio
 
 

 Oppure c'e` una logica migliore?
 
Usare le chain.
Mandi tutto il traffico di una (o N) regioni in una chain, e lï¿œ applichi
il filtraggio per porta/protocollo/whatever...
 

 famiglie di indirizzi IP dal data base GeoIP.
 
forse preferisci fare tutto da te, ma in caso contrario guardati il 
firewall Astaro, disponibile free anche per uso business: va molto bene 
e anche nella versione gratuita ha la funzione di blocco per country
 
-- 
Tinto
 
 

 e anche nella versione gratuita ha la funzione di blocco per country
 
Interessante, gli daro` un occhiata, grazie.
 
bye,
 
-- 
 
piergiorgio
 
 

 il filtraggio per porta/protocollo/whatever...
 
Hai per caso un esempio sottomano, oppure un link?
 
Il problema che ho e` che il traffico puo`
essere generato da fuori verso dentro e,
ovviamente, viceversa.
 
Quindi INPUT ed OUTPUT (di iptables) devono essere
controllati.
Ora, INPUT sembra relativamente facile, le porte
destinazione (interne) x:y dalle regioni a,b,c
sono in DROP.
 
In uscita, invece, sembra un po' piu` complicato,
poiche` un software (interno) puo` "aprire" una
porta di connessione e quindi permettere un
collegamento da fuori a dentro.
 
Cioe`, se un browser si collega alla porta 80 di
un server, internamente apre una porta >= 1024, per
il back channel, suppongo.
Ma questo lo saprai gia`, immagino.
 
Non vorrei bloccare le connessioni, dall'interno
all'esterno verso la porta 80 ed il relativo ritorno,
per una data regione, ma solo le connessioni dall'interno
all'esterno verso porte >= 1024, che aprono una porta
per una specifica regione.
 
Non so se sia chiaro...
 
Una cosa del genere blocca *tutto* il traffico
verso la Francia, anche quello verso la porta 80
(il ritorno, in realta')...
 
-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 1024:65535 -m geoip
--src-cc FR -j DROP
-A OUTPUT -m state --state NEW -m tcp -p tcp --sport 1024:65535 -m geoip
--dst-cc FR -j DROP
-A OUTPUT -m state --state NEW -m tcp -p tcp --sport 1024:65535 -m geoip
--src-cc FR -j DROP
-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 1024:65535 -m geoip
--dst-cc FR -j DROP
 
Come scrivevo, non sono esperto...
 
Servirebbe una regola del tipo: se la porta
verso cui mi collego e` < 1024 allora permetti di
aprire una porta >= 1024 interna.
 
bye,
 
-- 
 
piergiorgio
 
 


 
già, e il modulo di geolocalizzazione del traffico funziona molto bene.
 
nella 8 puoi bloccare o sbloccare i country, ma c'era una features 
request chiesta a gran voce per integrare il country block nelle policy. 
Non ne sono certo, ma non mi stupirebbe che nella 9 (presentata qualche 
settimana fa ufficialmente in italia) fosse stato sviluppata questa 
"estensione" al semplice geoip globale.

 tra source e deistination port.
 
 
Prego?
-s e -d, hai presente? :)

 vedere.
 
 
Non c'è contraddizione.
Fammi un esempio di quel che vorresti fare e lo traduciamo in iptables.

 Fammi un esempio di quel che vorresti fare e lo traduciamo in iptables.
 
Ci provo, vediamo se ci riesco, pero`... :-)
 
Allora, diciamo che ho una sorta di demone di
comunicazione, il quale e` in grado di ricevere
messaggi sulla porta, chesso`, 5000, ed e` in
grado di mandare messaggi, a qualche altro
server con lo stesso demone, su qualunque porta
non privilegiata (1024:65535, dovrebbero essere).
 
Quello che voglio e` che, per certe nazioni a
scelta, nessuna delle due comunicazioni sia
possibile.
 
La prima sembra facile, sulla seconda mi sono
perso, anche se, dopo questa spiegazione, forse
mi sono ritrovato...
 
Se non e` troppo disturbo, sarebbe veramente
utile, per me, avere un esempio di quanto sopra
in modo da verificare le mie regole...
 
Grazie anticipatamente,
 
bye,
 
-- 
 
piergiorgio
 
 

On 06/13/2012 07:25 PM, Piergiorgio Sartor wrote:
[...]
 
Rispondo a me stesso...
 
Allora, mi pare di aver capito, in pratica
basta, sulla chain OUTPUT fare un REJECT
per tutte le connessione verso le porte
1024:65535 delle nazioni bannate.
 
A questo punto, domanda, parte seconda... :-)
 
Quanto facile/difficile e` filtrare un
protocollo?
 
Qualcuno (oltre google) ha degli esempi
veloci da passare?


 protocollo?
 
Ecco, questo può essere più complicato.
 
La maniera "tradizionale" è filtrare le porte associate al protocollo.
Poi c'è L7 (
http://l7-filter.clearfoundation.com/
)
 
A te decidere che ti serve...

 
http://www.skullkrusher.net/linux/statemachine.html
 
 
Se ho capito cosa intende, non parla di stati già esistenti, ma di quello stesso
demone che apre nuove connessioni verso il mondo...


Cioè comunicazioni tipo P2P con porte a caso? allora in bocca al lupo...
 
-- 
Paranoia is a disease unto itself. And may I add: the person standing
next to you may not be who they appear to be, so take precaution.
-----------------------------------------------------------------------------
http://bofhskull.wordpress.com/
 

 possibile.
 
 
Partiamo dal primo caso, che è banale.
Supponiamo di volere una catena a parte e che il demone lavori in tcp.
 
iptables -N GEOIPIN
iptables -A INPUT - p tcp --dport 5000 -j GEOIPIN
#facciamo che logghiamo, anche
iptables -A GEOIPIN -m geoip --src-cc <lista_dei_paesi_cattivi> -j LOG
iptables -A GEOIPIN -m geoip --src-cc <lista_dei_paesi_cattivi> -j DROP
iptables -A GEOIPIN -j ACCEPT
 
Game over.
 
Vediamo se ho capito bene cosa intendi per il secondo caso.
Tu vuoi che *solo* quel demone non possa "mandare roba" (nel senso di aprire nuove connessioni)
verso alcuni paesi?
E' fattibile banalmente, sotto certe condizioni, ovvero che quel demone giri con un uid tutto suo.
Mettiamo che il demone giri come un utente che ha un corrispondente uid pari a, che so, 1234
 
iptables -N GEOIPOUT
iptables -A OUTPUT -m owner --uid-owner 1234 -j GEOIPOUT
iptables -A GEOIPOUT -m geoip --src-cc <lista_dei_paesi_cattivi> -j LOG
iptables -A GEOIPOUT -m geoip --src-cc <lista_dei_paesi_cattivi> -j DROP
iptables -A GEOIPOUT -j ACCEPT
 
Il tutto si può raffinare, ovviamente, specificando interfacce, stati e quant'altro, ma il concetto è questo.

 A te decidere che ti serve...
 
 
A volte la si può sfangare brutalmente anche solo con -m string. :)

 Cioè comunicazioni tipo P2P con porte a caso? allora in bocca al lupo...
 
Se po ffà, -m owner. :)


Se l'utente è dedicato e se il firewall gira sulla stessa macchina del
daemon, anche sì...
 
Ma filtri solo quel che esce. Quel che entra è un po' difficile...


 Ma filtri solo quel che esce. Quel che entra è un po' difficile...
 
Quel che entra lo filtri banalmente sulla porta destinazione, visto che l'OP ha dichiarato
che c'è una porta ben precisa in LISTEN e solo quella.

 
 
Come si fa con il protocollo?
 
Ho dato un'occhiata a Layer7Filter, come suggerito
da Skull, ma ho l'impressione che sia un po' morto
ed un po' complesso (kernel patch?).
 
C'e` qualche alternativa?
 
bye,
 
-- 
 
piergiorgio
 
 

 C'e` qualche alternativa?
 
Continuo a pensare che se hai un demone che gira con uid tutto suo --owner sia la soluzione ideale.