linux防火墙如何屏蔽
- Linux
- 2025-07-08
- 3116
iptables
命令添加规则屏蔽特定IP或端口,或通过
firewalld
配置永久规则来实现对网络流量的精准控制
Linux系统中,防火墙是保障网络安全的重要屏障,通过合理配置防火墙规则,可以有效地屏蔽反面IP、防止网络攻击以及控制网络访问权限,下面将详细介绍如何在Linux中利用防火墙进行屏蔽操作。
Linux防火墙
Linux系统中常见的防火墙工具有iptables、firewalld和UFW。
防火墙工具 | 特点 |
---|---|
iptables | 传统的防火墙管理工具,功能强大但配置相对复杂,需要手动编写规则。 |
firewalld | 动态管理防火墙,支持网络区域概念,配置相对简单,适合新手。 |
UFW | 简单易用的防火墙前端,基于iptables,适用于Ubuntu等发行版。 |
使用iptables屏蔽
检查iptables是否安装
在终端中执行以下命令:
sudo iptables -L
如果提示“iptables: command not found”,则需要安装iptables,对于基于Debian的系统(如Ubuntu),可以使用以下命令安装:
sudo apt-get install iptables
添加屏蔽规则
- 屏蔽单个IP地址
假设要屏蔽的IP地址为192.168.1.100,执行以下命令:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
这条规则表示将所有来自192.168.1.100的数据包丢弃。
- 屏蔽IP段
如果要屏蔽一个IP段,比如192.168.1.0/24网段,可以使用以下命令:
sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP
或者使用iprange模块指定IP范围:
sudo iptables -A INPUT -m iprange --src-range 192.168.1.0-192.168.1.255 -j DROP
- 屏蔽特定端口
除了按IP屏蔽,还可以按端口进行屏蔽,要屏蔽TCP的3306端口(MySQL默认端口),允许特定IP访问:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT -s 192.168.1.100 sudo iptables -A INPUT -p tcp --dport 3306 -j DROP
第一条规则允许来自192.168.1.100的IP访问3306端口,第二条规则则拒绝其他所有IP的访问。
保存并生效规则
配置完规则后,需要保存规则以便在系统重启后仍然有效,对于基于Red Hat的系统(如CentOS、RHEL),执行:
sudo service iptables save
对于Debian和Ubuntu系统,执行:
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
如果使用IPv6,则保存IPv6规则:
sudo ip6tables-save > /etc/iptables/rules.v6
删除规则
如果需要删除已添加的规则,可以使用以下命令:
sudo iptables -D INPUT -s 192.168.1.100 -j DROP
要清空所有规则,执行:
sudo iptables -F INPUT sudo iptables -F ACCEPT
使用firewalld屏蔽
firewalld是CentOS 7及以后版本的默认防火墙管理工具,相比iptables,它更加动态且易于管理。
启动并设置firewalld开机自启
sudo systemctl start firewalld sudo systemctl enable firewalld
添加屏蔽规则
- 屏蔽单个IP地址
假设要屏蔽的IP地址为192.168.1.100,执行以下命令:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject' sudo firewall-cmd --reload
这条规则表示拒绝所有来自192.168.1.100的数据包。
- 屏蔽IP段
要屏蔽192.168.1.0/24网段,执行:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" reject' sudo firewall-cmd --reload
- 屏蔽特定端口
与iptables类似,firewalld也可以按端口进行屏蔽,要屏蔽TCP的3306端口,允许特定IP访问:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" destination port port=3306 protocol=tcp accept' sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" destination port port=3306 protocol=tcp reject' sudo firewall-cmd --reload
删除规则
要删除已添加的规则,可以使用以下命令:
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" reject' sudo firewall-cmd --reload
使用UFW屏蔽(适用于Ubuntu等发行版)
UFW是Uncomplicated Firewall的缩写,它是一个简化的防火墙前端,基于iptables,非常适合在Ubuntu等发行版上使用。
启用UFW
sudo ufw enable
添加屏蔽规则
- 屏蔽单个IP地址
sudo ufw deny from 192.168.1.100
- 屏蔽IP段
sudo ufw deny from 192.168.1.0/24
- 屏蔽特定端口
sudo ufw deny 3306/tcp
删除规则
要删除已添加的规则,可以使用以下命令:
sudo ufw delete allow from 192.168.1.100
或者删除所有规则:
sudo ufw reset
注意事项
-
备份规则:在修改防火墙规则之前,建议备份当前配置,以防出现问题时能够快速恢复,对于iptables,可以将规则保存到文件中;对于firewalld,可以导出配置文件。
-
测试规则:在应用新的防火墙规则之前,最好先在一个非生产环境中进行测试,确保规则按预期工作,避免因规则错误导致合法用户无法访问。
-
日志记录:考虑添加日志记录规则以便于故障排除,在REJECT或DROP规则之前插入一条日志记录规则,记录被丢弃的数据包信息。
-
权限问题:上述操作需要管理员权限,请确保以root用户或具有sudo权限的用户身份执行命令。
相关问答FAQs
问1:如何查看当前防火墙的规则?
答:对于iptables,可以使用sudo iptables -L
命令查看当前规则;对于firewalld,可以使用sudo firewall-cmd --list-all
命令查看所有区域的规则;对于UFW,可以使用sudo ufw status
命令查看当前状态和规则。
问2:如何允许特定IP访问被屏蔽的端口?
答:在iptables中,可以先添加一条允许特定IP访问的规则,然后再添加拒绝其他IP的规则,要允许192.168.1.100访问3306端口,同时拒绝其他IP访问,可以执行以下命令:
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 3306 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 3306 -j DROP