Linux防火墙配置详解:从零学会iptables与fire
前置准备
在开始配置Linux防火墙之前,请确保以下条件已满足:
- 一台运行CentOS 7+或Ubuntu 18.04+的服务器(其他发行版类似)。
- 拥有root权限或sudo权限。
- 已通过SSH连接到服务器。
- 备份当前防火墙规则(可选但推荐):对于iptables可使用
iptables-save > /root/iptables.backup,对于firewalld可备份/etc/firewalld/目录。
分步操作
一、使用iptables(传统内核级防火墙)
- 检查是否已安装iptables
which iptables如果未安装,CentOS执行:yum install -y iptables-services;
Ubuntu执行:apt install -y iptables-persistent。
- 查看当前规则
iptables -L -n -v默认所有流量允许,需手动添加规则。
- 添加基本规则(以开放SSH端口22为例)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP # 拒绝其他所有入站流量注意:如果当前SSH端口不是22,请相应修改端口号,避免把自己踢出服务器。
- 保存规则(CentOS)
service iptables save
systemctl enable iptablesUbuntu使用:netfilter-persistent save。
二、使用firewalld(动态防火墙管理工具)
- 查看firewalld状态
systemctl status firewalld如果未运行,启动并设置开机自启:systemctl start firewalld && systemctl enable firewalld。
- 添加允许端口
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload也可以添加服务:firewall-cmd --permanent --add-service=ssh。
- 查看已开放端口
firewall-cmd --list-all- 移除端口
firewall-cmd --permanent --remove-port=80/tcp
firewall-cmd --reload避坑指南
- 千万不要直接执行
iptables -A INPUT -j DROP而不先放行SSH,否则你会立刻断开连接。务必先添加SSH允许规则再设置默认拒绝。 - firewalld的运行时规则(不加
--permanent)在重启或firewall-cmd --reload后会丢失,一定要加上--permanent保存。 - 如果同时启用了iptables和firewalld,两者会冲突。建议只使用其中一个:CentOS 7+默认firewalld,CentOS 6使用iptables。
- 修改防火墙规则后需及时验证,使用新终端连接测试,不要关闭当前会话,以免误锁自己。
高频问题解答
- Q:如何开放一个端口范围?
A:iptables示例:iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT;
firewalld示例:firewall-cmd --permanent --add-port=8000-9000/tcp。
- Q:为什么添加规则后仍不能访问?
A:检查是否放行正确协议(TCP/UDP),确认服务器上服务是否监听在正确IP(0.0.0.0),以及云服务商的安全组是否也放行了该端口。
- Q:iptables重启后规则丢失怎么办?
A:确保已执行service iptables save或安装了iptables-persistent,并设置服务开机自启。
效果验证
- 使用telnet或nc测试端口连通性
telnet 你的服务器IP 22
或者
nc -vz 你的服务器IP 22
如果返回Connected或open,说明防火墙已放行该端口。
- 测试被拒绝的端口
telnet 你的服务器IP 80 # 如果80端口未开放,应显示连接超时或被拒绝- 检查iptables规则计数
iptables -L -n -v | head -20查看pkts列,如果被拒绝的包数量增加,说明规则生效。
- firewalld查看运行时规则
firewall-cmd --list-all确认ports或services列表包含你添加的项。
通过以上步骤,你已经完成了Linux防火墙配置详解的实践操作。
建议每次修改规则后立即验证,并将规则备份到安全位置。
遇到异常时优先检查SSH连接是否断开,并使用备用终端恢复默认规则。