禁止icmp(Internet Control Message Protocol)互联网控制消息协议,禁止ping
1、临时禁止ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
2、永久禁止ping
编辑/etc/sysctl.conf文件,天剑或修改以下行:
net.ipv4.icmp_echo_ignore_all = 1
应用更改:sysctl -p
3、防火墙配置(防火墙规则顺序先放行白名单,再拒绝其他请求)
iptables:
#允许内部网络(如192.168.1.0/24) ICMP
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.1.0/24 -j accept
#允许指定ip
iptables -A INPUT -p icmp --icmp-type echo-request echo-request -s 178.11.1.0 -j
#拒绝所有进入服务器的数据包,返回ICMP主机禁止消息(icmp-host-prohibited)
-A INPUT -j REJECT --reject-with icmp-host-prohibited
#拒绝所有通过服务器转发的数据包,返回相同消息
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
禁止所有ICMP请求
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
保存规则
service iptables save
iptables -L -v -n # 检查规则是否生效
ufw:
ufw deny in proto icmp to any
ufw enable
firewald:
firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" drop'
firewall-cmd --reload
3、windows
命令行:netsh firewall set icmpsetting 8 disable
高级防火墙->入站规则->回显请求-ICMPv4-In->禁用规则
4、禁止telnet访问
disable_telnet.sh
#!/bin/bash
方法1:使用firewalld
firewall-cmd --permanent --remove-service=telnet
firewall-cmd --reload
方法2:使用iptables
禁用Telnet服务
systemctl disable --now telnet.socket
iptables -A INPUT -p tcp --dport 23 -j DROP
netfilter-persistent save
#方法3:ufw_disable_telnet.sh
#!/bin/bash
禁用Telnet服务
systemctl disable --now telnet.socket
添加ufw规则阻止端口23
ufw deny 23/tcp
ufw reload
修改hosts文件禁止Telnet访问
/etc/hosts.allow
ALL: ALL, EXCEPT 192.168.1.100
/etc/hosts.deny
telnetd: ALL
1、hosts.allow允许所有IP(排除特定IP),hosts.deny禁止telnetd服务
2、需root权限修改,实时生效无需重启服务
3、防止非法IP访问Telnet端口,适用于Linux/Unix系统
========================================
一、ipatble允许或禁止多个ip
icmp_filter.sh
#!/bin/bash
允许内部网络ICMP
for ip in 192.168.1.0/24; do
iptables -A INPUT -p icmp --icmp-type echo-request -s $ip -j ACCEPT
done
允许指定IP ICMP
for ip in 192.168.1.100 192.168.1.101; do
iptables -A INPUT -p icmp --icmp-type echo-request -s $ip -j ACCEPT
done
禁止多个IP ICMP
for ip in 1.1.1.1 2.2.2.2 3.3.3.3; do
iptables -A INPUT -p icmp --icmp-type echo-request -s $ip -j DROP
done
拒绝所有其他ICMP请求
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
保存规则
service iptables save
2、ufw允许和禁止多个ip
ufw_allow_deny_ip.sh
#!/bin/bash
检查root权限
if [[ $EUID -ne 0 ]]; then
echo "请以root权限运行此脚本"
exit 1
fi
检查ufw状态
if ! command -v ufw &> /dev/null; then
echo "未安装ufw,请先安装"
exit 1
fi
验证IP格式
validate_ip() {
local ip=$1
if [[ ip =\~ \^\[0-9\]{1,3}\\.\[0-9\]{1,3}\\.\[0-9\]{1,3}\\.\[0-9\]{1,3}(/(\[0-9\]\|\[1-2\]\[0-9\]\|3\[0-2\]))? ]]; then
return 0
else
return 1
fi
}
允许IP
allow_ip() {
local ip=$1
if validate_ip "$ip"; then
ufw allow from "$ip" to any proto icmp
echo "允许IP: $ip"
else
echo "无效IP格式: $ip"
fi
}
禁止IP
deny_ip() {
local ip=$1
if validate_ip "$ip"; then
ufw deny from "$ip" to any proto icmp
echo "禁止IP: $ip"
else
echo "无效IP格式: $ip"
fi
}
主菜单
while true; do
echo
echo "UFW IP管理工具"
echo "1. 允许IP"
echo "2. 禁止IP"
echo "3. 退出"
read -p "请选择操作 (1-3): " choice
case $choice in
read -p "请输入要允许的IP地址: " ip
allow_ip "$ip"
;;
read -p "请输入要禁止的IP地址: " ip
deny_ip "$ip"
;;
echo "退出"
break
;;
*)
echo "无效选项,请重试"
;;
esac
done
重启ufw
ufw reload
echo "规则已应用"
三、firewalld允许和禁止ip
#!/bin/bash
检查root权限
if [[ $EUID -ne 0 ]]; then
echo "请以root权限运行此脚本"
exit 1
fi
检查firewalld状态
if ! command -v firewall-cmd &> /dev/null; then
echo "未安装firewalld,请先安装"
exit 1
fi
验证IP格式
validate_ip() {
local ip=$1
if [[ ip =\~ \^\[0-9\]{1,3}\\.\[0-9\]{1,3}\\.\[0-9\]{1,3}\\.\[0-9\]{1,3}(/(\[0-9\]\|\[1-2\]\[0-9\]\|3\[0-2\]))? ]]; then
return 0
else
return 1
fi
}
允许IP
allow_ip() {
local ip=$1
if validate_ip "$ip"; then
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$ip' accept"
echo "允许IP: $ip"
else
echo "无效IP格式: $ip"
fi
}
禁止IP
deny_ip() {
local ip=$1
if validate_ip "$ip"; then
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$ip' drop"
echo "禁止IP: $ip"
else
echo "无效IP格式: $ip"
fi
}
主菜单
while true; do
echo
echo "Firewalld IP管理工具"
echo "1. 允许IP"
echo "2. 禁止IP"
echo "3. 退出"
read -p "请选择操作 (1-3): " choice
case $choice in
read -p "请输入要允许的IP地址: " ip
allow_ip "$ip"
;;
read -p "请输入要禁止的IP地址: " ip
deny_ip "$ip"
;;
echo "退出"
break
;;
*)
echo "无效选项,请重试"
;;
esac
done
重启firewalld
firewall-cmd --reload
echo "规则已应用"