在Linux系统中,“禁止穿透”通常指防止外部网络通过非法手段(如端口转发、隧道技术、反向代理等)访问内部网络资源,或阻止内部服务被未授权工具穿透至公网,这一操作对于维护系统安全、防止数据泄露至关重要,尤其对于服务器、内网设备等场景,以下是Linux环境下禁止穿透的详细方法及操作步骤。
通过防火墙规则禁止网络穿透
防火墙是Linux系统网络安全的第一道防线,通过配置精准的规则可有效阻断穿透行为,主流防火墙工具包括iptables
和firewalld
,需根据系统版本选择。
使用iptables配置规则
iptables
是Linux传统的内核级防火墙,通过filter
、nat
等表实现数据包过滤。
- 禁止特定端口入站:若需防止外部访问内部服务(如SSH的22端口、MySQL的3306端口),可添加拒绝规则:
iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止外部访问SSH iptables -A INPUT -p tcp --dport 3306 -j DROP # 禁止外部访问MySQL
- 禁止IP转发:穿透常依赖IP转发功能(如NAT转发),禁用可阻断数据包跨网段传输:
iptables -P FORWARD DROP # 设置默认转发策略为拒绝
- 禁止特定IP访问:若已知恶意IP,可直接封禁:
iptables -A INPUT -s 恶意IP -j DROP
规则配置后需保存(CentOS系统使用
service iptables save
,Ubuntu使用iptables-save > /etc/iptables/rules.v4
),避免重启失效。
使用firewalld配置规则
firewalld
是CentOS 7+、RHEL 7+等系统的默认防火墙,支持区域(Zone)和富规则(Rich Rule)配置,操作更直观。
- 禁止端口访问:
firewall-cmd --permanent --add-port=22/tcp # 允许SSH(示例,实际需根据需求禁止) firewall-cmd --permanent --remove-port=3306/tcp # 禁止MySQL端口 firewall-cmd --reload # 重载规则
- 设置默认拒绝策略:
firewall-cmd --set-default-zone=drop # 将默认区域设为拒绝所有连接
- 通过富规则精细控制:例如仅允许内网IP访问SSH:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=ssh accept'
禁用IP转发功能
IP转发(ip_forward
)是Linux内核的默认功能,允许服务器将接收到的数据包转发至其他网络接口,常被用于穿透攻击(如将公网请求转发至内网设备)。
- 临时禁用:
echo 0 > /proc/sys/net/ipv4/ip_forward
- 永久禁用:修改
/etc/sysctl.conf
文件,添加或修改参数:net.ipv4.ip_forward = 0
保存后执行
sysctl -p
使配置生效,若服务器需作为网关(如内网共享上网),则需谨慎操作,避免影响合法转发需求。
禁用不必要的服务与端口
穿透常依赖系统开放的服务(如SSH、RDP、HTTPD等),关闭不必要的服务可减少攻击面。
- 检查开放端口:使用
ss
或netstat
命令查看当前监听端口:ss -tulnp | grep LISTEN # 查看监听的TCP/UDP端口及对应进程
- 关闭不必要服务:以
httpd
(Apache)为例,停止并禁用服务:systemctl stop httpd systemctl disable httpd
- 卸载危险服务:若发现非必要的高危服务(如Telnet、RSH),建议彻底卸载:
yum remove telnet-server # CentOS/RHEL apt-get remove telnetd # Debian/Ubuntu
内核参数加固
通过调整内核参数,可增强系统对穿透攻击的防御能力,例如禁用ICMP重定向、防止源路由欺骗等。
编辑/etc/sysctl.conf
文件,添加以下参数:
net.ipv4.conf.all.accept_source_route = 0 # 禁止源路由 net.ipv4.conf.all.accept_redirects = 0 # 禁止ICMP重定向 net.ipv4.conf.all.send_redirects = 0 # 禁止发送ICMP重定向 net.ipv4.icmp_echo_ignore_all = 1 # 禁止ICMPping请求(可选)
执行sysctl -p
使配置生效,这些参数可防止攻击者利用ICMP或源路由进行穿透或欺骗。
容器环境下的禁止穿透(以Docker为例)
若系统运行Docker容器,默认情况下容器端口会映射到宿主机,可能被利用穿透。
- 禁止端口映射:运行容器时避免使用
-p
或--publish
参数,或限制仅本地访问:docker run -d --name myapp --publish=127.0.0.1:8080:80 nginx # 仅宿主机可访问8080端口
- 禁用Docker的iptables规则:Docker默认会修改iptables规则添加NAT转发,可通过以下方式禁用:
编辑/etc/docker/daemon.json
,添加:{"iptables": false}
重启Docker服务:
systemctl restart docker
,但需注意禁用后容器间通信可能受影响。
不同防火墙工具命令对比
需求 | iptables命令 | firewalld命令 |
---|---|---|
禁止TCP 22端口入站 | iptables -A INPUT -p tcp --dport 22 -j DROP |
firewall-cmd --permanent --remove-service=ssh |
禁止特定IP访问 | iptables -A INPUT -s 192.168.1.100 -j DROP |
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.100 drop' |
禁止IP转发 | iptables -P FORWARD DROP |
firewall-cmd --set-default-zone=drop |
注意事项
- 备份规则:修改防火墙规则前,建议备份当前配置(如
iptables-save > backup.iptables
),避免误操作导致失联。 - 定期检查:使用
journalctl -u iptables
或journalctl -u firewalld
查看防火墙日志,及时发现异常访问。 - 最小权限原则:仅开放业务必需的端口和服务,遵循“最小权限”原则降低风险。
相关问答FAQs
Q1: 禁止穿透后,如何允许特定IP(如公司内网IP)访问内部服务?
A: 可通过防火墙的“白名单”规则实现,以iptables为例,在拒绝规则前添加允许特定IP的规则:
iptables -I INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT # 允许内网IP访问SSH iptables -A INPUT -p tcp --dport 22 -j DROP # 默认拒绝其他IP访问SSH
firewalld可使用富规则:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=ssh accept' firewall-cmd --reload
Q2: 为什么禁止IP转发后,内网其他设备无法通过该Linux服务器上网?
A: 若Linux服务器作为内网设备的网关(如双网卡配置,连接公网和内网),禁止IP转发(ip_forward=0
)会阻断数据包的跨网段转发,导致内网设备无法通过服务器访问公网,此时需开启IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward # 临时开启 sysctl -p # 永久生效(需修改sysctl.conf中net.ipv4.ip_forward=1)
若服务器并非网关设备,则无需开启IP转发,避免被利用进行穿透攻击。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/25156.html