Repository 32bit  Forum
Repository 64bit  Wiki

iptables, limitare connessioni su una porta

Postate qui per tutte le discussioni legate alla sicurezza di Linux/Slackware

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

iptables, limitare connessioni su una porta

Messaggioda tgmx » gio ago 25, 2011 9:52

Ciao Ragazzi,
ho un'applicazione su un server che sta in ascolto su una porta (Es 5678) nell'attesa di connessioni da altre applicazioni remote che si connettono per scaricare alcuni dati (non ve la faccio tanto lunga dato che la parte funzionale non è importante).

Ora vorrei dare una stretta sulla questione sicurezza (attualmente un po' trascurata) e vorrei cominciare dal limitare le connessioni sulla porta 5678 nel seguente modo:

1) impedire connessioni sulla 5678 da uno stesso ip se più frequenti di una ogni 10 sec
2) impedire connessioni sulla 5678 se più frequenti di 1 ogni 2 secondi indipendentemente dall'ip

Potrei gestire questa cosa a livello di applicazione (sull'applicazione che gira sul server) ma sarebbe tutto più bello se ci pensasse iptables... :-)

Avete consigli?
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: iptables, limitare connessioni su una porta

Messaggioda ocman » gio ago 25, 2011 10:17

iptables è perfetto per questo
direttamente dal man


Codice: Seleziona tutto
   connlimit
       Allows you to restrict the number of parallel connections to a server per client IP address (or client address block).

       [!] --connlimit-above n
              Match if the number of existing connections is (not) above n.

       --connlimit-mask prefix_length
              Group hosts using the prefix length. For IPv4, this must be a number between (including) 0 and 32. For IPv6, between 0 and 128.

       Examples:

       # allow 2 telnet connections per client host
              iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT

       # you can also match the other way around:
              iptables -A INPUT -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT

       # limit the number of parallel HTTP requests to 16 per class C sized network (24 bit netmask)
              iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT

       # limit the number of parallel HTTP requests to 16 for the link local network
              (ipv6) ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT




questo di seguito di solito è il più usato nel tuo caso e per prevenire attacchi del tipo port scan/firewall rules discovery/DOS

Codice: Seleziona tutto
   limit
       This module matches at a limited rate using a token bucket filter.  A rule using this extension will match until this limit is reached (unless the `!' flag is used).  It can be used in combination with the LOG target to give limited
       logging, for example.

       --limit rate[/second|/minute|/hour|/day]
              Maximum average matching rate: specified as a number, with an optional `/second', `/minute', `/hour', or `/day' suffix; the default is 3/hour.

       --limit-burst number
              Maximum initial number of packets to match: this number gets recharged by one every time the limit specified above is not reached, up to this number; the default is 5.


Ultima modifica di ocman il gio ago 25, 2011 12:09, modificato 1 volta in totale.
ocman
Linux 2.4
Linux 2.4
 
Messaggi: 239
Iscritto il: gio lug 31, 2008 17:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: iptables, limitare connessioni su una porta

Messaggioda tgmx » gio ago 25, 2011 11:05

Ho provato:
iptables -A INPUT -p tcp --syn --dport 5678 -m connlimit --connlimit-above 2 -j REJECT
sembra impedire più di due connessioni da uno stesso host ma anche dopo che le due connessioni effettuate vengono chiuse non permette più altre connessioni.
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: iptables, limitare connessioni su una porta

Messaggioda tgmx » gio ago 25, 2011 11:06

tgmx ha scritto:Ho provato:
iptables -A INPUT -p tcp --syn --dport 5678 -m connlimit --connlimit-above 2 -j REJECT
sembra impedire più di due connessioni da uno stesso host ma anche dopo che le due connessioni effettuate vengono chiuse non permette più altre connessioni.



EDIT:
dopo un certo dimeout torna tutto raggiungibile.

Ora devo approfondire come gestire le connessioni in base al tempo.
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: iptables, limitare connessioni su una porta

Messaggioda 414N » gio ago 25, 2011 12:36

Consiglio: se invece di REJECT usi DROP, fai in modo che eventuali attaccanti che cercano porte aperte non possano capire se la porta che usi è aperta o chiusa, perché non gli giunge alcuna risposta (che invece REJECT invia).
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2882
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: iptables, limitare connessioni su una porta

Messaggioda tgmx » ven ago 26, 2011 9:00

@ 414N
Grazie della dritta...

Ora per limitare rispetto al tempo sto provando questo:
Codice: Seleziona tutto
iptables  -A INPUT -p tcp --dport 4211 -m state --state NEW -m recent --set
iptables  -A INPUT -p tcp --dport 4211 -m state --state NEW -m recent --update --seconds 10 --hitcount 2 -j DROP


In questo modo blocco le connessioni da uno stesso ip se con frequenza maggiore di una ogni 10 secondi.
Sembra funzionare bene ma ha un effetto collaterale: se il client remoto ogni 5 sec prova a connettersi, le sue connessioni vengono sempre bloccate mentre io mi aspettqavo di avere bloccata una connessione si e una no. Se poi il client remoto non tenta nessuna connessione per 10 sec e poi ci riprova allora riesce a connettersi.

Come posso risolvere questo problema?
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4


Torna a Sicurezza

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite