在Linux服务器的日常运维中,安全始终是需要重点关注的问题。想象一下,如果你的服务器没有任何防护,外界的恶意攻击可能会轻易侵入,导致数据泄露或系统瘫痪。而防火墙,就像服务器的“门卫”,可以帮我们过滤不必要的访问,只允许合法的流量通过,从而保护服务器的安全。

一、Linux防火墙是什么?为什么需要它?

防火墙本质上是一套规则集合,它运行在Linux服务器的内核层面,负责检查进出服务器的网络数据包,决定哪些请求可以通过,哪些必须拒绝。举个生活中的例子:如果把服务器比作一座房子,防火墙就相当于门口的保安,只有持有“合法通行证”(符合规则的请求)的访客才能进入,其他人则会被拦下。

为什么需要防火墙?
- 防止黑客通过未授权端口扫描服务器,暴露系统漏洞;
- 阻止恶意程序(如病毒、木马)通过开放的端口入侵;
- 保护服务器上的敏感服务(如数据库、SSH),避免被未授权访问。

二、Linux常见防火墙工具

Linux系统中常见的防火墙工具有两个主流选择,新手可以优先从firewalld入手(更直观),如果使用旧版系统或特定场景,也可以了解iptables(底层工具)。

1. firewalld(推荐新手,基于“区域”管理)

firewalld是CentOS 7+、Fedora等主流发行版的默认防火墙工具,它通过“区域(zone)”管理规则,不同区域有不同的默认策略,比如:
- public(公共区域):默认拒绝大部分入站连接,允许出站连接(适合互联网服务器);
- trusted(信任区域):允许所有连接(适合内部可信网络);
- blocked(阻止区域):拒绝所有入站连接(适合临时隔离服务器)。

2. iptables(底层工具,适合进阶配置)

iptables是更底层的防火墙工具,通过“规则链”管理数据包过滤,功能强大但配置相对复杂。例如通过iptables -A INPUT -p tcp --dport 80 -j ACCEPT开放80端口。旧版CentOS(如CentOS 6)或Debian/Ubuntu可能默认使用iptables,新手了解基本概念即可。

三、firewalld配置实战(以CentOS 7+/RHEL 7+为例)

1. 检查firewalld状态

首先确认firewalld是否已安装并运行:

# 查看状态(active/running为正常)
systemctl status firewalld

# 如果未运行,启动服务
sudo systemctl start firewalld

# 开机自启
sudo systemctl enable firewalld

2. 基本操作:开放端口

场景:你刚部署了一个网站,需要临时开放80端口(HTTP),或永久开放22端口(SSH)供远程管理。

临时开放端口(仅当前会话生效,重启后失效)
# 开放80端口(TCP协议),仅对public区域生效(默认区域)
sudo firewall-cmd --add-port=80/tcp

执行后,防火墙会允许外部设备通过80端口访问你的服务器。若要验证是否生效,可尝试用浏览器访问服务器IP:80(需确保服务器已部署网站)。

永久开放端口(重启后仍生效)

临时开放后若要长期使用,需添加--permanent参数,并执行--reload重载规则:

# 永久开放80端口
sudo firewall-cmd --add-port=80/tcp --permanent

# 重载规则,使永久配置生效
sudo firewall-cmd --reload

关键:添加--permanent后,规则不会立即生效,必须执行--reload才会写入配置文件。

3. 查看当前防火墙规则

# 查看public区域已开放的临时端口
sudo firewall-cmd --list-ports

# 查看public区域已开放的永久端口
sudo firewall-cmd --list-ports --permanent

# 查看所有区域的完整规则(包括端口、服务、IP限制等)
sudo firewall-cmd --list-all

4. 配置安全策略

拒绝特定IP访问

如果发现某个IP频繁攻击服务器,可拒绝该IP访问特定端口:

# 拒绝IP 192.168.1.100访问22端口(SSH)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" drop' --permanent

# 重载规则
sudo firewall-cmd --reload
限制出站连接

如果服务器需要访问外部资源,可限制仅允许访问特定IP:

# 仅允许服务器访问192.168.1.0/24网段(内网IP)的8080端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" destination address="192.168.1.0/24" port protocol="tcp" port="8080" accept' --permanent

四、注意事项:避免防火墙配置失误

  1. 测试规则后再保存:修改规则后,先临时开放端口测试(如仅允许自己IP访问),确认能正常连接后再保存永久规则,避免因误配置导致无法远程登录服务器。
  2. 备份现有规则:操作前可导出当前规则,防止出错后无法恢复:
   sudo firewall-cmd --get-active-zones > firewall_backup.txt
  1. 不要同时运行多个防火墙:避免iptablesfirewalld冲突,建议只保留一个工具。
  2. 监控防火墙日志:通过/var/log/firewalld查看规则应用记录,排查访问异常(如多次被拒绝的IP)。

五、其他常见防火墙工具(如Ubuntu/Debian用户)

如果你使用Ubuntu、Debian等系统,推荐使用更简洁的ufw工具(“Uncomplicated Firewall”),基本命令与firewalld类似:

# 启用ufw(首次使用时)
sudo ufw enable

# 开放80端口(临时生效)
sudo ufw allow 80/tcp

# 允许SSH(22端口)来自特定IP
sudo ufw allow from 192.168.1.0/24 to any port 22

# 查看状态
sudo ufw status

总结

Linux防火墙配置的核心是“明确需求、合理限制、避免误操作”:
- 先明确需要开放的端口(如网站用80,SSH用22),区分临时与永久规则;
- 使用区域化工具(如firewalld)或简化工具(如ufw)管理规则,新手优先推荐firewalld或ufw;
- 配置后务必测试,避免因规则错误导致服务器无法访问。

掌握基本的防火墙配置,能让你的Linux服务器在提供服务的同时,最大限度降低安全风险。随着经验积累,你还可以进一步配置更复杂的策略(如限制连接频率、拒绝特定协议等),但基础操作永远是安全运维的第一步。

小夜