Pagina 1 di 1

iptables, limitare connessioni su una porta

Inviato: gio ago 25, 2011 10:52
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?

Re: iptables, limitare connessioni su una porta

Inviato: gio ago 25, 2011 11:17
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.



Re: iptables, limitare connessioni su una porta

Inviato: gio ago 25, 2011 12:05
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.

Re: iptables, limitare connessioni su una porta

Inviato: gio ago 25, 2011 12:06
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.

Re: iptables, limitare connessioni su una porta

Inviato: gio ago 25, 2011 13:36
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).

Re: iptables, limitare connessioni su una porta

Inviato: ven ago 26, 2011 10:00
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?