为什么你应该关心这个问题?除非你喜欢随机端口扫描和潜在的安全漏洞,否则FirewallD是让你的CentOS设置更安全的关键。它灵活、强大,而且不需要网络安全的博士学位来配置。

启动和运行FirewallD

让我们从安装FirewallD开始,让它像一台运转良好的机器一样工作:


# 安装FirewallD
sudo yum install firewalld

# 启动并启用FirewallD
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 检查状态
sudo firewall-cmd --state

如果你看到“running”,恭喜!你已经迈出了进入更安全世界的第一步。

FirewallD基础:区域、服务和规则

在我们深入之前,让我们分解一些关键概念:

  • 区域:将其视为网络接口的不同安全级别。公共、可信、家庭——随你命名。
  • 服务:常用应用程序的预定义规则集。无需记住端口号!
  • 规则:允许和不允许的详细信息。

这里是如何检查默认区域的快速示例:


sudo firewall-cmd --get-default-zone

打造你的安全堡垒:创建和配置区域

现在,让我们动手为我们的Web服务器创建一个自定义区域:


# 创建一个名为'webserver'的新区域
sudo firewall-cmd --permanent --new-zone=webserver

# 将其设置为eth0的活动区域
sudo firewall-cmd --permanent --zone=webserver --change-interface=eth0

# 允许HTTP和HTTPS流量
sudo firewall-cmd --permanent --zone=webserver --add-service=http
sudo firewall-cmd --permanent --zone=webserver --add-service=https

# 重新加载以应用更改
sudo firewall-cmd --reload

砰!你刚刚为你的Web服务器创建了一个量身定制的自定义区域。感受力量吧!

服务和端口:你的数字门卫

FirewallD中的服务就像预打包的规则集。它们很方便,但有时你需要更具体。让我们看看如何管理两者:


# 将SSH服务添加到默认区域
sudo firewall-cmd --permanent --add-service=ssh

# 打开特定端口(例如,用于端口8080上的自定义应用程序)
sudo firewall-cmd --permanent --add-port=8080/tcp

# 别忘了重新加载!
sudo firewall-cmd --reload

专业提示:除非你只是在测试,否则始终使用--permanent标志。否则,你的更改会消失得比开发者聚会上的免费披萨还快。

IP过滤:明智地选择你的朋友

有时,你想对谁能进入持挑剔态度。FirewallD的丰富规则让你可以做到这一点:


# 仅允许特定IP的SSH访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'

# 阻止IP范围(也许他们不太友好)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" reject'

sudo firewall-cmd --reload

保持记录:在FirewallD中记录日志

如果你不知道谁试图闯入,保镖有什么意义?让我们设置一些日志记录:


# 启用丢弃数据包的日志记录
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" log prefix="DROPPED: " level="info" limit value="5/m" drop'

# 重新加载并检查日志
sudo firewall-cmd --reload
sudo journalctl -f -t kernel | grep DROPPED

现在你可以坐下来观看失败的尝试滚滚而来。这就像一场黑客真人秀,但不那么戏剧化,更具教育意义。

锁定SSH:因为密码已经过时了

SSH是系统访问的圣杯。让我们把它变成坚不可摧的堡垒:


# 为SSH创建一个专用区域
sudo firewall-cmd --permanent --new-zone=sshsecure

# 仅允许可信IP的SSH访问
sudo firewall-cmd --permanent --zone=sshsecure --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'

# 将特定接口设置为此区域
sudo firewall-cmd --permanent --zone=sshsecure --change-interface=eth1

sudo firewall-cmd --reload

现在你的SSH访问比鼓手的军鼓还紧。

自动化FirewallD:因为懒惰的管理员是高效的管理员

让我们创建一个简单的脚本来自动更新我们的规则:


#!/bin/bash

# update_firewall.sh
TRUSTED_IP=$(curl -s http://myserver.com/trusted_ips.txt)

sudo firewall-cmd --permanent --zone=sshsecure --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
sudo firewall-cmd --permanent --zone=sshsecure --add-rich-rule="rule family=\"ipv4\" source address=\"$TRUSTED_IP\" service name=\"ssh\" accept"

sudo firewall-cmd --reload

echo "Firewall updated with new trusted IP: $TRUSTED_IP"

用cron计划这个,你就有了一个自动更新的防火墙。欢迎来到未来!

大结局:保护你的CentOS王国

我们已经覆盖了很多内容,从基本设置到高级配置。这里是你的CentOS安全检查清单:

  • 安装并启用FirewallD
  • 为不同的服务设置自定义区域
  • 仔细配置服务和端口
  • 为关键服务实施IP过滤
  • 启用日志记录以捕捉偷偷摸摸的尝试
  • 使用专用区域和IP限制保护SSH
  • 自动化规则更新以实现最大懒惰(效率)

记住,安全不是一次性设置,而是一个持续的过程。保持你的规则更新,监控那些日志,并保持健康的警惕。

“唯一真正安全的系统是关闭并拔掉电源,锁在钛合金保险箱中,埋在混凝土掩体中,并被神经毒气和高薪武装警卫包围的系统。即便如此,我也不会拿我的生命去赌。” - Gene Spafford

现在去像专业人士一样保护那些CentOS服务器吧。你的未来自我(和你的老板)会感谢你的。

附言:别忘了偶尔测试你的防火墙设置。你不想在为时已晚时才意识到它不起作用,对吧?