iptables 封鎖 IP 黑名单

Blocking IP addresses from the Ultimate bad bot blocker's bad IP address list using iptables

在服務器上增加 iptables chain

iptables -N black_ip_list
iptables -I INPUT -p tcp -m multiport --dports 80,443 -j black_ip_list

新建 bash 文件 banip.sh

在這個文件中,首先清空 black_ip_list 中的規則, 然後從 mitchellkrogza/nginx-ultimate-bad-bot-blocker 中獲取最新的IP BLACKLIST 列表,循環每一個 IP 地址,將其設為拒絕請求。

#!/bin/bash
iptables -F black_ip_list
iptables -A black_ip_list -j RETURN

wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-ip-addresses.list -O old.blackip.txt 2>/dev/null

for ip in `cat old.blackip.txt`; do 
iptables -I black_ip_list 1 -s $ip -j REJECT --reject-with icmp-port-unreachable;
done

banip.sh 文件權限變更為可執行

sudo chmod a+x banip.sh

執行 banip.sh 文件

sudo ./banip.sh

TIPS:

  • 可以隔段時間執行一下該scripts,以獲取最新的block ip 列表
  • 解封ip
iptables -D black_ip_list -s <ip> -j REJECT --reject-with icmp-port-unreachable
  • 查看所有的 iptables chain 列表,並帶序號
iptables -L INPUT -n --line-numbers
  • 檢視當前 iptable 的所有規則
iptables -nvL
  • 清空和刪除 chain
iptables -F black_ip_list
iptables -X black_ip_list

注意,如果沒有先清空而直接刪除chain會拋出錯誤

iptables: Too many links.

延伸閱讀:

Y Cheung
Blogger, Programer & Traveler.
Shanghai