凌峰创科服务平台

Linux服务器防火墙配置如何正确操作?

Linux服务器防火墙配置是保障服务器安全的重要环节,防火墙作为网络安全的第一道防线,能够有效过滤恶意流量、防止未授权访问,保护服务器数据和服务安全,在Linux系统中,常见的防火墙工具包括iptables(传统工具)、firewalld(CentOS/RHEL 7+默认工具)以及nftables(新一代框架),本文将详细介绍Linux服务器防火墙的配置方法,包括基础概念、常用命令、策略规则及安全实践,帮助用户构建安全的服务器防护体系。

Linux服务器防火墙配置如何正确操作?-图1
(图片来源网络,侵删)

防火墙基础概念与工具选择

在配置防火墙前,需了解核心概念:规则(Rules)是防火墙的过滤条件,包含匹配条件(如源IP、端口)和动作(如ACCEPT允许、DROP拒绝、REJECT拒绝并返回错误);链(Chains)是规则的集合,如INPUT(入站)、OUTPUT(出站)、FORWARD(转发);表(Tables)是链的分组,如filter(过滤表,默认使用)、nat(地址转换表)、mangle(数据包修改表)。

Linux服务器常用的防火墙工具包括:

  1. iptables:基于内核的包过滤工具,功能强大但配置复杂,适用于大多数Linux发行版。
  2. firewalld:动态管理防火墙,支持区域(Zone)策略,可动态修改规则无需重启,适合CentOS/RHEL 7+、Fedora等系统。
  3. nftables:iptables的替代品,语法更简洁,性能更高,逐渐成为主流(如Ubuntu 20.04+、CentOS 8+默认使用)。

工具选择需根据系统版本和需求:若使用旧版系统(如CentOS 6),推荐iptables;新版系统(如CentOS 8+、Ubuntu 22.04)优先使用firewalld或nftables。

iptables防火墙配置详解

基础命令与语法

iptables命令基本格式为:
iptables [-t 表名] [选项] [链名] [匹配条件] [动作]
常用选项:

Linux服务器防火墙配置如何正确操作?-图2
(图片来源网络,侵删)
  • -L:列出规则
  • -A:添加规则到链尾
  • -I:插入规则到链首
  • -D:删除规则
  • -F:清空规则
  • -p:协议(如tcp、udp、icmp)
  • --dport:目标端口
  • --sport:源端口
  • -s:源IP地址
  • -j:动作(ACCEPT、DROP、REJECT)

实际配置步骤

(1)查看当前规则

iptables -L -n -v  # -n显示数字IP,-v显示详细信息

(2)设置默认策略
默认策略建议为“拒绝所有,允许特定”,避免开放过多端口:

iptables -P INPUT DROP     # 默认拒绝入站
iptables -P OUTPUT ACCEPT  # 默认允许出站
iptables -P FORWARD DROP   # 默认拒绝转发

(3)允许本地回环
本地回环(lo)是服务器内部通信必需的,需允许访问:

iptables -A INPUT -i lo -j ACCEPT

(4)允许已建立的连接
避免已建立的连接被中断,提高效率:

Linux服务器防火墙配置如何正确操作?-图3
(图片来源网络,侵删)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

(5)开放必要端口
以开放SSH(22端口)、HTTP(80端口)、HTTPS(443端口)为例:

# 允许SSH访问(限制特定IP可选)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT  # 仅允许IP 192.168.1.100访问SSH
# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

(6)拒绝ICMP ping请求(可选)
为防止被网络扫描,可禁用ICMP请求:

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

(7)保存规则
不同系统保存方式不同:

  • CentOS/RHEL:service iptables save
  • Ubuntu/Debian:iptables-save > /etc/iptables/rules.v4

高级配置示例

(1)限制连接频率
防止暴力破解,如限制SSH每分钟最多5个连接:

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 6 -j DROP

(2)端口转发
将本地8080端口转发到目标服务器的80端口:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.200:80
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 80 -j ACCEPT

firewalld防火墙配置详解

firewalld通过“区域”管理不同网络环境的信任级别,默认区域为public,适合配置更灵活的场景。

基础命令

systemctl start firewalld    # 启动服务
systemctl enable firewalld   # 开机自启
firewall-cmd --state         # 查看状态
firewall-cmd --list-all      # 列出当前区域规则

实际配置步骤

(1)开放端口

# 永久开放SSH端口
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload  # 重新加载规则
# 开放自定义端口(如8080)
firewall-cmd --permanent --add-port=8080/tcp

(2)设置默认区域

firewall-cmd --set-default-zone=home  # 设置默认区域为home(信任级别较高)

(3)限制特定IP访问

# 禁止IP 192.168.1.100访问所有服务
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'

(4)端口转发

firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.200

区域策略说明

firewalld默认区域及适用场景:
| 区域名称 | 信任级别 | 适用场景 |
|------------|----------|------------------------------|
| trusted | 最高 | 信任网络,允许所有访问 |
| home | 中等 | 家庭网络,允许部分常见服务 |
| public | 默认 | 公共网络,仅允许必要服务 |
| dmz | 低 | 隔离区,仅允许特定端口访问 |
| drop | 最低 | 丢弃所有包,不返回响应 |

nftables防火墙配置(Ubuntu 22.04+示例)

nftables语法更简洁,支持动态规则,逐步替代iptables。

基础命令

nft list ruleset      # 查看规则集
nft add table inet filter  # 创建filter表(inet支持IPv4/IPv6)
nft add chain inet filter input { type filter hook input priority 0 \; }  # 添加input链

实际配置示例

# 允许本地回环
nft add rule inet filter input iif lo accept
# 允许已建立的连接
nft add rule inet filter input ct state established,related accept
# 开放SSH(22端口)
nft add rule inet filter input tcp dport 22 accept
# 默认拒绝所有
nft add rule inet filter input drop

保存规则

nft list ruleset > /etc/nftables/ruleset.nft  # 保存规则
echo "nft -f /etc/nftables/ruleset.nft" >> /etc/rc.local  # 开机自启

防火墙安全实践

  1. 最小权限原则:仅开放业务必需的端口,避免全端口开放。
  2. 定期更新规则:根据业务变化调整防火墙策略,及时关闭无用端口。
  3. 日志监控:开启防火墙日志,记录被拒绝的连接,便于分析攻击行为:
    iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: "
  4. 测试环境验证:生产环境修改规则前,先在测试环境验证,避免误操作导致服务中断。
  5. 结合其他安全工具:防火墙需与入侵检测系统(如Suricata)、SELinux等配合使用,构建多层次防护。

相关问答FAQs

Q1: 如何查看防火墙是否生效?
A1: 不同工具查看方式不同:

  • iptables:iptables -L -n -v,查看规则是否正确添加,如ACCEPTDROP计数是否变化。
  • firewalld:firewall-cmd --list-all,确认服务或端口是否在允许列表中。
  • nftables:nft list ruleset,检查规则链是否按预期配置。
    可通过外部工具(如nmap)扫描服务器端口,验证开放端口是否符合预期。

Q2: 修改防火墙规则后如何使其永久生效?
A2: 不同工具的持久化方式不同:

  • iptables:在CentOS/RHEL中执行service iptables save;在Ubuntu/Debian中执行iptables-save > /etc/iptables/rules.v4,并确保iptables-persistent已安装。
  • firewalld:使用--permanent选项添加规则后,执行firewall-cmd --reload,规则会自动保存到/etc/firewalld/目录。
  • nftables:将规则保存到配置文件(如/etc/nftables/ruleset.nft),并配置开机自动加载(如通过systemctl enable nftables)。
    若未正确持久化,服务器重启后规则将丢失。
分享:
扫描分享到社交APP
上一篇
下一篇