通过脚本批量拉黑/解封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
其他方法二
登录实例,编辑
/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后可能会导致用户无法访问远程连接,请谨慎操作。如果用户进行了误操作
重启服务器即可。