Múltipla ip ban, lida do arquivo IP's - ban in iptables

4

Como eu posso ler os endereços IP do arquivo e banir o iptables.

88.123.xxx
123.456.xxx
65.234.xxx

    
por user66638 24.02.2011 / 21:52

4 respostas

9

Solução simples, direta e de uma linha:

for IP in $(cat ip_list); do iptables -A INPUT -s $IP/32 -d 0/0 -j DROP; done

Isso bloqueará qualquer comunicação dos endereços IP em qualquer protocolo ou porta.

Mas talvez você devesse pensar em fazer um script de firewall adequado usando iptables-save e iptables-restore ou mesmo Shorewall .

EDIT: A mesma linha, detalhada:

for IP in $(cat ip_list); do echo "Banning $IP"; iptables -A INPUT -s $IP/32 -d 0/0 -j DROP; done
    
por 24.02.2011 / 22:03
2

Tente isso

#!/bin/bash
while read ipaddr
do
    /sbin/iptables -I INPUT -s $ipaddr -j DROP
done </path/to/iplist-to-drop | sort | uniq
~

Ou usando uma cadeia separada

#!/bin/bash

/sbin/iptables -N Dropped-From-File
/sbin/iptables -I INPUT -s 0.0.0.0/0 -j Dropped-From-File
while read ipaddr
do

    /sbin/iptables -I Dropped-From-File -s $ipaddr -j DROP
done </path/to/iplist-to-drop | sort | uniq


/sbin/iptables -A Dropped-From-File -j RETURN
    
por 24.02.2011 / 23:04
2

você também pode usar o módulo ipset ( link ). Quando a lista de endereços IP for longa, combiná-los um por um com regras iptables individuais levará a um desempenho degradado. O Ipset deve ter um desempenho muito melhor. Além disso, com o ipset você pode recarregar endereços a qualquer momento sem tocar em suas regras.

Mesmo que você não queira se incomodar com o ipset, é melhor deixar endereços proibidos na tabela "raw" do iptables. Dessa forma, a estrutura de rastreamento de conexão não os verá e não criará registros de estado dos quais você nunca precisará. Isso também deve melhorar o desempenho caso o firewall precise lidar com muito tráfego.

    
por 25.02.2011 / 00:31
1

É melhor usar ipset e table raw , como vadimk disse. Aqui está como você faz isso

apt-get install ipset
ipset -N badips iphash
while read ip; do ipset -A badips "$ip"; done < badips.txt
iptables -t raw -I PREROUTING -m set --match-set badips src,dst -j DROP

Para tornar essas regras persistentes na reinicialização do Debian 7 eu tive que usar modificado iptables-persistent

/etc/init.d/iptables-persistent save
    
por 30.12.2016 / 07:52