凌峰创科服务平台

Linux服务器防火墙配置怎么操作?

Linux 服务器配置防火墙是保障系统安全的关键步骤,防火墙作为网络安全的第一道防线,能够有效过滤非法访问请求,防止未经授权的访问和攻击,在 Linux 系统中,常用的防火墙工具包括 iptables、firewalld 和 ufw,不同发行版可能默认使用不同的工具,CentOS 7+ 使用 firewalld,Ubuntu 使用 ufw,而传统系统多使用 iptables,本文将以 firewalld 和 iptables 为例,详细介绍 Linux 服务器防火墙的配置方法,包括基本规则管理、端口开放与限制、服务策略设置及高级安全策略等内容。

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

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

  1. firewalld:动态防火墙管理工具,支持区域(Zone)概念,可根据网络连接类型(如公共网络、家庭网络、受信任网络等)应用不同规则,支持运行时规则与永久规则分离,无需重启即可生效。
  2. iptables:基于内核的静态防火墙工具,通过链(Chain)和表(Table)管理规则,规则优先级从上到下匹配,一旦匹配即停止,灵活性高但配置相对复杂。

选择建议:对于新手或需要动态调整规则的场景,优先选择 firewalld;对于需要精细控制或旧系统兼容的场景,可使用 iptables。

firewalld 配置详解

启动与启用防火墙

# 启动 firewalld 服务
sudo systemctl start firewalld
# 设置开机自启
sudo systemctl enable firewalld
# 查看防火墙状态
sudo firewall-cmd --state

区域(Zone)管理

firewalld 默认包含多个区域,常用区域及作用如下:
| 区域名称 | 默认策略 | 适用场景 | |----------|----------|----------| | public | 拒绝所有连接,仅允许选定的服务 | 公共网络(如云服务器) | | trusted | 允许所有连接 | 内部受信任网络 | | drop | 丢弃所有数据包,不返回任何响应 | 高安全性需求,拒绝所有未知访问 | | home | 允许 SSH、DHCP 等,限制其他服务 | 家庭网络 |

查看当前区域

sudo firewall-cmd --get-active-zones

切换区域(临时生效,重启后恢复):

Linux服务器防火墙配置怎么操作?-图2
(图片来源网络,侵删)
sudo firewall-cmd --set-zone=public --zone=trusted

永久设置区域

sudo firewall-cmd --permanent --set-zone=trusted

端口与服务管理

  • 开放端口(以 80 端口为例):

    # 临时开放
    sudo firewall-cmd --add-port=80/tcp
    # 永久开放
    sudo firewall-cmd --permanent --add-port=80/tcp
  • 开放服务(firewalld 预定义服务,如 HTTP):

    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --reload  # 重新加载规则使永久生效
  • 查看已开放端口/服务

    Linux服务器防火墙配置怎么操作?-图3
    (图片来源网络,侵删)
    sudo firewall-cmd --list-ports
    sudo firewall-cmd --list-services
  • 关闭端口/服务

    sudo firewall-cmd --permanent --remove-port=80/tcp
    sudo firewall-cmd --permanent --remove-service=http
    sudo firewall-cmd --reload

富规则(Rich Rules)高级配置

富规则支持更复杂的条件判断,如基于 IP、端口、协议等限制访问。
示例:仅允许 192.168.1.100 访问 22 端口

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
sudo firewall-cmd --reload

拒绝特定 IP 访问

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" reject'
sudo firewall-cmd --reload

iptables 配置详解

基础语法与表结构

iptables 默认包含 4 个表,每个表包含不同的链:
| 表名称 | 作用 | 包含链 | |--------|------|--------| | filter | 数据包过滤 | INPUT、OUTPUT、FORWARD | | nat | 网络地址转换 | PREROUTING、POSTROUTING、OUTPUT | | mangle | 数据包修改 | PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING | | raw | 原始数据包处理 | PREROUTING、OUTPUT |

常用命令参数

  • -A:添加规则到链末尾
  • -I:插入规则到链指定位置(默认首部)
  • -D:删除规则
  • -p:协议(tcp/udp/icmp)
  • --dport:目标端口
  • -j:动作(ACCEPT/DROP/REJECT)

基本规则配置

  • 查看当前规则

    sudo iptables -L -n -v  # -n 不解析域名,-v 显示详细信息
  • 允许本地回环

    sudo iptables -A INPUT -i lo -j ACCEPT
  • 允许已建立的连接

    sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 开放 SSH 端口(22)

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 拒绝所有其他连接(默认拒绝策略):

    sudo iptables -P INPUT DROP  # 设置 INPUT 链默认策略为 DROP

规则保存与持久化

CentOS/RHEL

sudo yum install iptables-services
sudo systemctl enable iptables
sudo service iptables save  # 保存规则到 /etc/sysconfig/iptables

Ubuntu/Debian

sudo apt install iptables-persistent
sudo netfilter-persistent save  # 保存规则
sudo netfilter-persistent reload

端口转发配置

示例:将本机 8080 端口转发到 192.168.1.100 的 80 端口

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4  # 保存规则

防火墙安全加固建议

  1. 最小权限原则:仅开放必要的端口和服务,避免全开策略。

  2. 定期更新规则:根据业务变化调整防火墙策略,及时关闭无用端口。

  3. 日志监控:开启防火墙日志,记录被拒绝的连接,便于分析攻击行为。

    • firewalld 日志:
      sudo firewall-cmd --set-log-denied=all  # 记录所有拒绝的连接
      sudo journalctl -u firewalld  # 查看日志
    • iptables 日志:
      sudo iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: "
  4. 禁用 ICMP 请求:防止 ICMP 隧道攻击和端口扫描(部分场景需谨慎)。

    sudo iptables -A INPUT -p icmp -j DROP  # 禁用所有 ICMP
    sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP  # 仅禁用 ping 请求
  5. 结合 fail2ban 防暴力破解:通过防火墙规则自动封禁频繁失败的登录 IP。

相关问答 FAQs

问题 1:如何查看 Linux 服务器当前使用的防火墙工具?
解答:可通过以下命令判断:

  • 对于 firewalld:sudo systemctl status firewalld(若显示 active (running) 则正在使用)。
  • 对于 iptables:sudo iptables -L -n(若返回规则列表则说明 iptables 已配置)。
  • 部分系统可能同时安装两者,需通过 systemctl 确认哪个服务处于激活状态。

问题 2:防火墙规则配置错误导致无法远程登录,如何紧急恢复?
解答:可通过以下方式恢复:

  • firewalld:若因规则错误导致 SSH 被拒,可通过物理控制台或 VNC 登录服务器,执行 sudo firewall-cmd --panic-on 启用“紧急模式”(拒绝所有连接),再通过 sudo firewall-cmd --panic-off 关闭并重新配置规则。
  • iptables:若无法远程登录,可通过控制台执行 sudo iptables -F 清空所有规则(临时恢复),再通过 sudo iptables -P INPUT ACCEPT 设置默认允许策略,之后重新配置正确的规则并保存。
分享:
扫描分享到社交APP
上一篇
下一篇