Come far scadere le regole di iptables?


18

Qualcuno mi ha detto che è possibile, ma non riesco a trovare nulla su Google o sulle pagine man.

Ho bisogno di vietare gli IP per un certo periodo di tempo, e quindi non ho più eseguito la scansione automaticamente.

Risposte:


18

Se intendi che iptables rimuova completamente la regola da sola, non sarai in grado di farlo, per quanto ne so. Qual è lo scopo di questo? Se hai bisogno di un tipo di divieto temporaneo automatico, la soluzione standard è fail2ban .

In alternativa, puoi utilizzare un lavoro cron per rimuovere la regola che stai aggiungendo o, meglio se vuoi farlo in modo interattivo, un atlavoro:

iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm 

Dai anche un'occhiata al recentmodulo di iptables. Questo con la sua --secondsopzione può essere di aiuto, a seconda delle tue reali esigenze. man iptablesper maggiori informazioni.


oh wow il lavoro 'at' sembra fantastico. Posso combinarlo con nohup e &? Come?
HappyDeveloper,

Non è necessario utilizzare nohup: il lavoro at viene eseguito indipendentemente dal terminale utilizzato per crearlo. Ciò significa che viene eseguito in una shell che non eredita le variabili di ambiente, a proposito, ed è di /bin/shdefault. Ma questo probabilmente non sarà un problema in questo caso.
Eduardo Ivanec,

9

Inserisci un commento con un timestamp (probabilmente secondi dall'epoca) nelle regole. Spazzare periodicamente per le regole scadute.

Si noti che il kernel Linux più recente ha il supporto per il caricamento dinamico di indirizzi IP in una cache consultata da regole iptable anziché come regole iptables dirette.

Esempio:

iptables  -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP 
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'

Ovviamente puoi iptables -D INPUT $1invece di stampare il comando.


grande idea. Non sono sicuro di come fare la parte ampia, ci penserò ..
HappyDeveloper

+1 Ottima idea, forse non la più semplice ma sicuramente pulita.
Kyle Smith,

1
@HappyDeveloper: esempio fornito per add / sweep
Seth Robertson

1
Haha, dovevo solo fare anche questo, ho usato awk per la mia pulizia: iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'dove le regole sono fatte come:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
Kyle Smith,

I miei 2 centesimi in perl:iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
tuomassalo,

5

iptables ha un metodo per aggiungere automaticamente gli indirizzi IP a un elenco se sono soddisfatte le condizioni definite dall'utente. Uso quanto segue per evitare tentativi di hacking automatizzati sulla mia porta ssh:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP

Ciò consente di limitare i tentativi automatici di accesso al server limitando i tentativi di connessione dallo stesso indirizzo IP a uno ogni 60 secondi.

Se si desidera consentire un determinato numero di tentativi in ​​un intervallo di tempo, ad esempio 4 in 5 minuti, e in caso di errore, inserirli nella blacklist per un periodo più lungo, ad esempio 24 ore, è possibile fare qualcosa del tipo:

iptables -X black
iptables -N black
iptables -A black   -m recent --set   --name blacklist   -j DROP

iptables -X ssh
iptables -N ssh
iptables -I ssh 1   -m recent --update    --name blacklist   --reap   --seconds 86400     -j DROP
iptables -I ssh 2   -m recent --update    --name timer       --reap   --seconds   600     --hitcount 4   -j black
iptables -I ssh 3   -m recent --set       --name timer   -j ACCEPT

iptables -A INPUT   -p TCP --dport ssh   -m state --state NEW -j ssh

In quanto sopra, creiamo 2 catene; "ssh" e "black" e 2 elenchi; "timer" e "lista nera".

Brevemente; l'ultima catena mostrata sopra è la "porta" nella catena ssh.

  • La regola 1 nella catena ssh controlla se l'IP di origine è nella lista "lista nera". In tal caso, la connessione viene interrotta e il timer della blacklist 24 ore viene riavviato. Se la regola 1 è falsa, andiamo alla regola 2.
  • La Regola 2 nella catena SSH verifica se l'IP di origine ha effettuato più di 4 tentativi di connessione in 5 minuti. In tal caso, invia il pacchetto alla catena "nero" dove viene aggiunto all'elenco "lista nera". La catena "nera" quindi DROP interrompe la connessione e il gioco è fatto.
  • La regola 3 nella catena "ssh" viene raggiunta solo se le regole 1 e 2 sono false. In tal caso, il pacchetto viene ACCETTATO e l'IP di origine viene aggiunto all'elenco "timer" in modo da poter monitorare la frequenza dei tentativi di connessione.

L'opzione "--reap" dice al kernel di cercare nell'elenco ed eliminare tutti gli elementi che sono più vecchi del limite di tempo impostato; 5 minuti per l'elenco "timer" e 24 ore per l'elenco "lista nera".

nota: gli spazi extra sono per la leggibilità e sono opzionali nello script della shell.


3

IPTables ha una funzione creata appositamente per questo: IP Set. Fai una volta la regola e persiste come al solito, ma controlla una serie di ips (o porte) per le partite. La cosa interessante è che questo set può essere aggiornato in modo dinamico ed efficiente senza disturbare il resto del firewall.

Il sito Web principale , esempi .

Quindi, per usarlo, dovresti comunque usare ato cronpianificare la rimozione.



2

Come qualcuno ha già detto: dovresti usare ipset per questa funzione.

ipset può aggiungere un indirizzo IP con valore di timeout. Al termine del timeout, il record verrebbe automaticamente rimosso da ipset.

timeout All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example: ipset create test hash:ip timeout 300 ipset add test 192.168.0.1 timeout 60 ipset -exist add test 192.168.0.1 timeout 600

http://ipset.netfilter.org/ipset.man.html

Questo è il modo preferibile per controllare questo comportamento.


0

Ho bisogno di vietare gli IP per un certo periodo di tempo, e quindi non ho più eseguito la scansione automaticamente.

Potresti provare il seguente

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP

0

A seconda di cosa esattamente si desidera realizzare il netfilter recente o i moduli temporali potrebbero essere utilizzati per raggiungere questo obiettivo.

Entrambi sono documentati nella pagina man di iptables .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.