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.
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:
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 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 la sua --seconds
opzione può essere di aiuto, a seconda delle tue reali esigenze. man iptables
per maggiori informazioni.
/bin/sh
default. Ma questo probabilmente non sarà un problema in questo caso.
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 $1
invece di stampare il comando.
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"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
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.
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.
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 at
o cron
pianificare la rimozione.
È possibile utilizzare fail2ban per vietare gli indirizzi IP e configurare il periodo di tempo per cui un indirizzo verrà bandito.
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.
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 .