linux防火墙配置

一、概述

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

二、firewalld配置(CentOS7)

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

2.1 firewalld服务基础操作

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

操作需求 命令 说明
查看服务状态 systemctl status firewalld 显示 active (running) 为启动,inactive (dead) 为停止(高亮区分)
查看防火墙运行状态 firewall-cmd --state 直接返回 runningnot 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为“端口/协议”,返回yesno
永久开放端口 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:80dpt: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. 端口开放后仍无法访问

除防火墙外,需检查:

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

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

六、总结

CentOS 7防火墙配置核心在于区分firewalldiptables

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

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

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