通过脚本批量拉黑/解封IP

这个脚本使用read命令获取用户输入,通过交互的方式让用户指定操作类型和IP地址列表文件的路径。在执行添加操作时,脚本会从指定的文件中读取IP地址列表,并逐一将这些IP地址添加到firewall规则中,即实现拉黑IP地址的功能。在执行删除操作时,脚本会遍历指定的IP地址列表文件,找到所有被添加的IP地址并将其删除,即实现解封IP地址的功能。

bash <(curl -s -L https://img.cloudduo.cn/sh/firewall_only_ip_addresses.sh)

脚本示例

#!/bin/bash

# 定义变量
action=""
filename=""
log_file="/var/log/ip-blacklist.log"

# 获取用户输入
read -p "Please enter 'add' to blacklist IPs, or 'remove' to unblacklist IPs: " action
read -p "Please enter the path of the file containing IP addresses: " filename

# 检查文件是否存在
if [[ ! -f "$filename" ]]; then
    echo "File $filename not found."
    exit 1
fi

# 检查操作类型是否合法
if [[ "$action" != "add" && "$action" != "remove" ]]; then
    echo "Invalid action: $action"
    exit 1
fi

# 执行拉黑IP操作
if [[ "$action" == "add" ]]; then
    echo "Start blacklisting IPs in $filename..."
    while read -r line; do
        ip=$(echo "$line" | awk '{print $1}')
        if [[ -n "$ip" ]]; then
            firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="'$ip'" reject'
            echo "$(date) - $ip is blacklisted." >> "$log_file"
        fi
    done < "$filename"
    firewall-cmd --reload
    firewall-cmd --list-all
    echo "Done."
# 执行解封IP操作
else
    echo "Start removing IP rules..."
    while read -r line; do
        ip=$(echo "$line" | awk '{print $1}')
        if [[ -n "$ip" ]]; then
            firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="'$ip'" reject'
            echo "$(date) - $ip is removed from blacklist." >> "$log_file"
        fi
    done < "$filename"
    firewall-cmd --reload
    firewall-cmd --list-all
    echo "Done."
fi


其他方法一

登录实例,编辑/etc/hosts.deny文件,添加如下内容,然后保存并退出。
注意:sshd:all:deny表示拒绝了所有sshd远程连接。:deny可以省略。

sshd:203.XXX.XXX.189
#禁止203.XXX.XXX.189对服务器SSH的访问

sshd:203.XXX.XXX.0/255.XXX.XXX.0
#禁止203.XXX.XXX.0~255.XXX.XXX.0对服务器SSH的访问 

sshd:192.168.1.*:allow
以上写法表示允许192.168.1.*一个ip段连接sshd服务(这还需要hosts.deny这个文件配合使用),当然:allow完全可以省略的。
当然如果管理员集中在一个IP那么这样写是比较省事的
all:192.168.1.11

其他方法二

  1. 登录实例,编辑/etc/rc.local文件,添加如下内容,然后保存并退出。

    iptables -I INPUT -s 61.XXX.XXX.1 -j DROP
    # 61.XXX.XXX.1的全部屏蔽
    
    iptables -I INPUT -s 61.XXX.XXX.0/24 -j DROP
    #61.XXX.XXX.1到61.XXX.XXX.255的访问全部屏蔽
    
    iptables -I INPUT -s 192.XXX.XXX.202 -p tcp --dport 80 -j DROP
    # 192.XXX.XXX.202的80端口的访问全部屏蔽
    
    iptables -I INPUT -s 192.XXX.XXX.0/24 -p tcp --dport 80 -j DROP
    #192.XXX.XXX.1~192.XXX.XXX.255的80端口的访问全部屏蔽
    

    注:添加IP后可能会导致用户无法访问远程连接,请谨慎操作。如果用户进行了误操作

  2. 重启服务器即可。