Назад | Перейти на главную страницу

Множественный запрет IP, чтение из IP-адресов файлов -> бан в iptables

Как я могу считать IP-адреса из файла, а затем забанить в iptables.

88.123.xxx
123.456.xxx
65.234.xxx

Простое, прямое, однострочное решение:

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

Это заблокирует любую связь с IP-адресов по любому протоколу или порту.

Но, возможно, вам стоит подумать о том, чтобы создать правильный скрипт брандмауэра, используя iptables-save и iptables-restore или даже Shorewall.

РЕДАКТИРОВАТЬ: Та же строка, многословная:

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

Попробуй это

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

Или используя отдельную цепочку

#!/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

вы также можете использовать модуль ipset ( http://ipset.netfilter.org/ ). Когда список IP-адресов становится длинным, сопоставление их по одному с отдельными правилами iptables приведет к снижению производительности. Ipset должен работать намного лучше. Кроме того, с помощью ipset вы можете перезагрузить адреса в любое время, не затрагивая свои правила.

Даже если вы не хотите возиться с ipset, лучше убрать заблокированные адреса в "сырую" таблицу iptables. Таким образом, фреймворк отслеживания соединений не увидит их и не будет создавать записи состояния, которые вам никогда не понадобятся. Это также должно улучшить производительность в случае, если межсетевой экран должен обрабатывать большой трафик.

Лучше использовать ipset и стол raw, как сказал Вадимк. Вот как вы это делаете

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

Чтобы сохранить эти правила при перезагрузке в Debian 7, мне пришлось использовать модифицированный iptables-persistent

/etc/init.d/iptables-persistent save