Soluzione 1:
Se intendi che iptables rimuova completamente la regola da solo, non sarai in grado di farlo, per quanto ne so. Qual è lo scopo di questo? Se hai bisogno di una sorta di ban temporaneo automatico, la soluzione standard è fail2ban.
In alternativa puoi usare un cron job per rimuovere la regola che stai aggiungendo, o, meglio se vuoi farlo in modo interattivo, un at
lavoro:
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 recent
modulo di iptables. Questo con il suo --seconds
opzione può essere di aiuto, a seconda delle vostre effettive esigenze. man iptables
per ulteriori informazioni.
Soluzione 2:
Metti un commento con un timestamp (probabilmente secondi dall'epoca) nelle regole. Controlla periodicamente le regole scadute.
Si noti che il kernel Linux più recente ha il supporto per il caricamento dinamico degli indirizzi IP in una cache consultata dalle regole iptable invece che 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 $1
invece di stampare il comando.
Soluzione 3:
iptables ha un metodo per aggiungere automaticamente gli indirizzi IP a un elenco se vengono soddisfatte le condizioni definite dall'utente. Uso quanto segue per evitare tentativi di hacking automatizzati alla mia porta ssh:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Questo aiuta a limitare i tentativi automatici di ottenere l'accesso al server limitando i tentativi di connessione dallo stesso indirizzo IP a uno ogni 60 secondi.
Se vuoi 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, puoi fare qualcosa del genere:
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 liste; "timer" e "lista nera".
Brevemente; l'ultima catena mostrata sopra è la "porta" nella catena ssh.
- La regola 1 nella catena ssh verifica se l'IP di origine è nella lista "lista nera". In tal caso, la connessione viene interrotta e il timer della lista nera di 24 ore viene riavviato. Se la regola 1 è falsa, passiamo 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 "nera" dove viene aggiunto alla lista "lista nera". La catena "nera" interrompe quindi 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 la lista "timer", e 24 ore per la lista "blacklist".
nota:gli spazi extra sono per la leggibilità e sono facoltativi nel tuo script di shell.
Soluzione 4:
IPTables ha una caratteristica fatta apposta per questo:IP Set. Fai la regola una volta e persiste come al solito ma controlla un insieme di ips (o porte) per le corrispondenze. La cosa interessante è che questo set può essere aggiornato in modo dinamico ed efficiente senza disturbare il resto del firewall.
Il sito principale, esempi.
Quindi, per usarlo, dovresti comunque usare at
o cron
per programmare la rimozione.
Soluzione 5:
Puoi utilizzare fail2ban per vietare gli indirizzi IP e configurare il periodo di tempo per cui un indirizzo verrà bannato.