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.
Rispondi
Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

iptables, limitare connessioni su una porta

Messaggio da tgmx »

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?

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: iptables, limitare connessioni su una porta

Messaggio da ocman »

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 25 ago 2011, 13:09, modificato 1 volta in totale.

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: iptables, limitare connessioni su una porta

Messaggio da tgmx »

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 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: iptables, limitare connessioni su una porta

Messaggio da tgmx »

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
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: iptables, limitare connessioni su una porta

Messaggio da 414N »

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
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: iptables, limitare connessioni su una porta

Messaggio da tgmx »

@ 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?

Rispondi