Come elenco gli indirizzi IP bloccati da iptables?


16

Per prevenire attacchi di forza bruta contro ssh ho aggiunto alcune regole di iptables (sotto). La domanda è: come posso elencare gli indirizzi IP bloccati?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

1
iptables -L INPUT -v -nmostra tutto l'ip bloccato
dinamico

Risposte:


16

Un'opzione sarebbe quella di registrare uno dei pacchetti rilasciati con una regola come:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Inseriscilo immediatamente prima della DROPregola. Quindi, puoi grep il file syslog per qualsiasi cosa con "FW_DROPPED" in esso e l'elenco degli IP sarà lì. Le voci nel file di registro sono simili al seguente:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Quindi, estraendo ciò che segue "SRC =" ti mostrerà gli IP rilasciati. Ordina quello, eliminando i duplicati e avrai il tuo elenco.

Ho trovato l' Iptables Tutorial come la documentazione più utile per iptables / netfilter.


Sì, questo è il modo di farlo.
Brent,

Ciò richiederebbe di duplicare le regole in quanto non si accede e si rilascia la stessa regola.
David Pashley,

3
Sarebbe ancora meglio se crea una catena di utenti in cui registra e rilascia i pacchetti offensivi. In questo modo, la duplicazione inutilmente viene rimossa. Può essere fatto in questo modo: iptables -N attacchi; iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j attacchi; iptables -A attacchi -j LOG --log-prefix "FW_DROPPED:"; iptables -A attacchi -j DROP
Cristian Ciupitu,

1
Concordato. Tabelle / catene sono la strada da percorrere; l'intero punto di iptables, davvero. Creo tabelle separate per accettate, eliminate silenziosamente, rifiutate in modo udibile, scartate, sospette inondazioni, illegali, sospette sonde, sospette scansioni, tipi sconosciuti e traffico monitorato. I miei FW si basano su questo vecchio script (avviso: autopromozione): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude,

1
Il modulo ipt_recent a cui ipozgaj e David Pashley hanno fatto riferimento è un'aggiunta piuttosto ingegnosa, anche se non può fornire lo stesso motivo preciso in cui un determinato IP è stato abbandonato (come è possibile con diverse impostazioni --log-prefix) o tenere traccia di un lunga storia di attacchi con timestamp. Sicuramente una buona idea usare entrambe le tecniche in concerto però.
yukondude,


4

Guarda a

/proc/net/ipt_recent/YOURNAME

dove YOURNAME è il nome che hai usato con l'opzione --name nella tua regola iptables.


Su alcune distro (es. Debian), il percorso valido è:/proc/net/xt_recent/[list-name]
itachi


1

Quello che faccio, ad esempio per lo spoofing dell'indirizzo di input, è definire la catena SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

quindi per inviare i pacchetti a questa catena se sono falsificati:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Potresti fare qualcosa del genere per ogni categoria di pacchetti che scarichi o rifiuti per ottenere una linea nel syslog da cercare, quindi periodicamente grep, taglia, ordina, per ottenere solo gli indirizzi IP da queste linee di registro.

Il vantaggio dell'utilizzo di catene individuali per ogni categoria è che la configurazione diventa più semplice e diventa più facile leggere la iptablesconfigurazione. Man mano che aggiungi sempre più regole, sarai contento di aver usato singole catene per specifiche azioni diverse.


Come si rilevano esattamente i pacchetti falsificati? Nella mia esperienza questo è impossibile nel caso generale.
Mark R

Quanto sopra è solo un esempio. Qui, sto cercando qualsiasi pacchetto in arrivo nella catena INPUT che proviene da un dispositivo esterno e tuttavia afferma di provenire da un indirizzo IP interno alla mia rete. In questo caso, posso assolutamente rilevare lo spoofing degli indirizzi, ma sì, nel caso generale le cose sono diverse.
Eddie,

1

"La domanda è: come posso elencare gli indirizzi IP bloccati?"

Crea una catena BANNED:

iptables -N BANNED
iptables -F BANNED

Creare una catena di registrazione:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Aggiungi il salto alla catena vietata nella catena INPUT prima della maggior parte delle altre regole

...
iptables -A INPUT -j BANNED
...

Ora aggiungi ipaddresses alla catena vietata:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

Puoi anche usarlo come un database con le opzioni di commento, così puoi sapere quando e perché ecc. Flock è importante quando iptables viene aggiornato frequentemente da molti processi - sembra che iptables non abbia alcun blocco incorporato.

Per visualizzare gli indirizzi e le regole vietati nella catena vietata:

iptables -S BANNED

Per visualizzare solo gli indirizzi IP unici ordinati:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

Ho un certo numero di demoni in esecuzione sui miei server che controllano i file syslog e i weblog, quindi se qualcosa di brutto viene tentato da qualcuno, il loro indirizzo viene automaticamente bandito per alcuni giorni, a seconda del tipo e della gravità e del numero di attacchi precedenti. Le informazioni vengono registrate in un database mysql e scadute periodicamente. Gli indirizzi sono inoltre distribuiti su ogni altra macchina del cluster tramite la replica mysql, quindi sono anche protetti e sincronizzati. Il mio software cerca anche il proprietario della rete e invia un reclamo all'ISP.

Dopo 10 anni di lavoro, spero di renderlo presto disponibile per tutti. Al momento ho circa 1,5 milioni di storie di indirizzi IP e centinaia di migliaia di attacchi di posta e ssh segnalati, che aiutano a pulire la rete. Se più lo usasse, spero che avrebbe un impatto maggiore.

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.