linux防火墙配置

一、概述

CentOS 7与CentOS 6.x最大的差异之一在于防火墙默认工具:前者采用firewalld作为默认防火墙管理工具,后者则是iptables。本文将详细讲解firewalld的日常配置、iptables的传统用法,以及两种防火墙工具的切换方法,适用于服务器端口开放、安全防护等常见场景。

二、firewalld配置(CentOS7)

firewalld是动态防火墙管理工具,支持即时生效(无需重启服务)、区域(Zone)管理等特性,比传统iptables更灵活。以下是核心操作命令与实战场景。

2.1 firewalld服务基础操作

首先需掌握服务的启动、停止、状态查看,确保防火墙处于预期运行状态:

操作需求 命令 说明
查看服务状态 systemctl status firewalld 显示 active (running) 为启动,inactive (dead) 为停止(高亮区分)
查看防火墙运行状态 firewall-cmd --state 直接返回 running 或 not running,简洁高效
启动服务 systemctl start firewalld 临时启动,重启系统后失效
停止服务 systemctl stop firewalld 临时停止,重启系统后失效
重启服务 systemctl restart firewalld 修改配置后需重启生效(动态规则可无需重启,见下文)
设置开机自启 systemctl enable firewalld 永久生效,避免重启后防火墙失效
禁止开机自启 systemctl disable firewalld 适用于需要切换到 iptables 或无需防火墙的场景

示例:查看当前防火墙状态

执行systemctl status firewalld,若输出如下则表示正常运行:

● firewalld.service - firewalld - dynamic firewall daemon
  Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
  Active: active (running) since 三 2024-06-10 10:00:00 CST; 2h ago

2.2 核心配置:端口开放与规则管理

服务器常用场景(如Web服务、数据库)需开放指定端口,firewalld支持临时开放(重启失效)和永久开放(需重载配置),推荐优先使用永久规则。

2.2.1 端口操作命令

操作需求 命令 关键参数说明
查询端口是否开放 firewall-cmd --query-port=80/tcp 80/tcp为“端口/协议”,返回yes或no
永久开放端口 firewall-cmd --permanent --add-port=80/tcp --permanent表示永久生效,需重载配置;支持范围端口(如8080-8090/tcp)
永久移除端口 firewall-cmd --permanent --remove-port=80/tcp 移除已开放的端口,同样需重载配置
重载配置(使永久规则生效) firewall-cmd --reload 无需重启服务,即时加载新规则,不中断现有连接
查看所有开放规则 firewall-cmd --list-all 显示当前区域的所有规则(端口、服务、源地址等),如:
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0
 sources:
 services: ssh dhcpv6-client
 ports: 80/tcp 3306/tcp
 protocols:
 forward: no
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

2.2.2 实战场景:开放Web服务端口

以开放Nginx(80端口)和MySQL(3306端口)为例:

  1. 永久开放80/tcp和3306/tcp端口:
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=3306/tcp
  1. 重载配置使规则生效:
firewall-cmd --reload
  1. 验证端口是否开放:
firewall-cmd --query-port=80/tcp  # 输出yes
firewall-cmd --query-port=3306/tcp  # 输出yes

2.3 区域(Zone)管理(可选)

firewalld通过“区域”划分网络环境(如public公共网络、trusted信任网络),不同区域可配置不同规则。默认使用public区域,日常场景无需修改,若需切换区域:

# 查看当前使用的区域
firewall-cmd --get-active-zones

# 将eth0网卡切换到trusted区域(允许所有连接)
firewall-cmd --permanent --zone=trusted --change-interface=eth0

# 重载配置
firewall-cmd --reload

三、iptables配置(CentOS6)

若更习惯iptables的配置逻辑,可关闭firewalld并启用iptables。以下是完整切换与配置步骤。

3.1 关闭firewalld并安装iptables

  1. 停止并禁止firewalld开机自启:
systemctl stop firewalld

systemctl disable firewalld

# 验证是否已停止(输出 not running)
firewall-cmd --state
  1. 安装iptables服务(CentOS7默认未预装):
yum install -y iptables-services

注意:安装后需确保系统未重启,否则可能出现

unit not found

错误,若报错可重新执行安装命令。

3.2 iptables核心配置(端口开放与规则修改)

iptables规则通过配置文件/etc/sysconfig/iptables管理,需手动编辑文件并重启服务生效。

3.2.1 查看与编辑配置文件

  1. 查看默认配置文件内容:
cat /etc/sysconfig/iptables

默认配置(仅开放SSH 22端口)如下:

\*filter

:INPUT ACCEPT \[0:0]

:FORWARD ACCEPT \[0:0]

:OUTPUT ACCEPT \[0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT
  1. 编辑配置文件开放指定端口(如80、3306、8080):
vim /etc/sysconfig/iptables

在22端口规则下方添加新端口规则(不可放在文件末尾,否则会被REJECT规则拦截):

# 开放 80 端口(HTTP)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

# 开放 3306 端口(MySQL)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

# 开放 8080 端口(Tomcat)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

编辑完成后,按Esc输入:wq!保存退出。

3.2.2 iptables服务操作与规则生效

  1. 重启iptables服务使配置生效:
systemctl restart iptables
  1. 设置iptables开机自启(避免重启后规则丢失):
systemctl enable iptables
  1. 查看iptables规则是否生效:
iptables -L -n

输出中若包含dpt:80、dpt:3306等条目,说明规则已成功加载。

四、端口开放验证:telnet工具使用

配置完成后,需验证端口是否真正开放(避免防火墙规则配置错误),推荐使用telnet工具检测。

4.1 客户端(Windows)启用telnet

  1. 打开“控制面板” → “程序和功能” → “启用或关闭Windows功能”;
  2. 勾选“Telnet客户端”和“Telnet服务器”(仅需客户端即可),点击“确定”;
  3. 打开CMD命令提示符,输入telnet验证是否启用(出现telnet>提示符表示成功)。

4.2 验证端口开放状态

  1. 基本语法:telnet [服务器IP/域名] [端口]

示例 1:验证服务器80端口(IP为192.168.1.100):

telnet 192.168.1.100 80

示例 2:验证服务器 3306 端口(域名为 db.example.com):

telnet db.example.com 3306
  1. 结果判断:
  • 连接成功:CMD 窗口变为全黑(无报错),表示端口开放且可访问;
  • 连接失败:提示 “不能打开到主机的链接,链接失败”,需检查防火墙规则或服务是否启动。

五、常见问题与注意事项

  1. firewalld 重载配置 vs 重启服务:
  • firewall-cmd --reload:动态加载规则,不中断现有连接,推荐日常使用;
  • systemctl restart firewalld:重启服务,会中断现有连接,仅在必要时使用(如修改区域配置)。
  1. iptables配置文件位置错误:

务必编辑/etc/sysconfig/iptables,而非其他路径,否则规则无法生效;且新增规则需放在REJECT规则之前。

  1. 端口开放后仍无法访问:

除防火墙外,需检查:

  • 服务器对应服务是否启动(如Nginx、MySQL);
  • 云服务器安全组是否开放对应端口(如阿里云、腾讯云需额外配置安全组规则)。
  1. 切换防火墙后开机自启失效:

切换为iptables后,需执行systemctl enable iptables,否则重启后iptables不会自动启动。

六、总结

CentOS 7防火墙配置核心在于区分firewalld和iptables:

  • 推荐新手使用firewalld,动态规则、命令简洁,适合快速开放端口;
  • 熟悉CentOS 6的用户可切换到iptables,通过配置文件管理规则,兼容性更强。

无论选择哪种工具,配置后务必通过telnet或nc(nc -zv服务器IP端口)验证端口开放状态,确保服务可正常访问。

posted @ 2025-11-02 04:11  夏尔_717  阅读(137)  评论(0)    收藏  举报