Как я могу считать 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