IPTABLES 封鎖 IP 黑名单

Posted by Y Cheung on Wed, Nov 24, 2021

在服務器上增加 iptables chain

1iptables -N black_ip_list
2iptables -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地址,將其設為拒絕請求。

1#!/bin/bash
2iptables -F black_ip_list
3iptables -A black_ip_list -j RETURN
4
5wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-ip-addresses.list -O old.blackip.txt 2>/dev/null
6
7for ip in `cat old.blackip.txt`; do 
8iptables -I black_ip_list 1 -s $ip -j REJECT --reject-with icmp-port-unreachable;
9done

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

1sudo chmod a+x banip.sh

執行 banip.sh 文件

1sudo ./banip.sh

TIPS:

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

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

1iptables: Too many links.

延伸閱讀: