CentOS 系统中 iptables 端口管理详解
在 CentOS 系统中,iptables
是用于配置和管理网络防火墙规则的重要工具,它允许管理员通过设置一系列的规则来控制网络流量,从而实现对服务器端口的安全管理和访问控制,本文将详细介绍如何在 CentOS 中使用iptables
进行端口管理,包括开放、关闭和查看端口等操作。

一、CentOS 中iptables
的基础概念
iptables
是一个基于内核的包过滤系统,它根据预先定义的规则来决定如何处理进出系统的网络数据包,每个规则由多个条件组成,如源地址、目的地址、协议类型、端口号等,当数据包与某个规则的条件匹配时,就会执行相应的动作,如接受(ACCEPT)、拒绝(DROP)或跳转到其他链。
在 CentOS 系统中,iptables
主要包含以下几个内置链:
INPUT:处理进入本地系统的数据包。
FORWARD:处理通过本地系统转发的数据包。
OUTPUT:处理从本地系统发出的数据包。

默认情况下,这些链中的规则可能会根据系统的安全策略进行设置,但在大多数情况下,需要手动添加规则来满足特定的需求。
二、CentOS 中iptables
的安装与启动
在较新的 CentOS 版本中,默认使用的是firewalld
作为防火墙服务,但仍然可以安装和使用iptables
,以下是安装和启动iptables
的基本步骤:
1、安装iptables
软件包:
- yum install iptablesservices y
2、启动并启用iptables
服务:
- systemctl start iptables
- systemctl enable iptables
3、验证iptables
服务状态:

- systemctl status iptables
三、CentOS 中iptables
的常用操作命令
在使用iptables
进行端口管理时,常用的操作命令包括增加规则、删除规则、查看规则以及保存规则等。
1、增加规则:
语法格式:iptables [选项] A 链名 条件 j 动作
示例:开放本机的 8080 端口,允许所有服务器访问该端口。
- iptables A INPUT p tcp dport 8080 j ACCEPT
2、删除规则:
语法格式:iptables [选项] D 链名 规则编号
示例:删除刚才添加的开放 8080 端口的规则,首先使用iptables L n linenumber
命令查看规则编号,然后执行删除操作。
- iptables D INPUT 4 # 假设规则编号为 4
3、查看规则:
语法格式:iptables [选项] L [链名]
示例:查看当前所有的防火墙规则。
- iptables L n
4、保存规则:
语法格式:service iptables save
或/etc/rc.d/init.d/iptables save
示例:保存当前的防火墙规则,以便在系统重启后仍然生效。
- service iptables save
四、CentOS 中iptables
的端口开放与关闭示例
1、开放特定端口:
开放单个端口:开放本机的 3306 端口,允许外部服务器访问该端口上的 MySQL 服务。
- iptables A INPUT p tcp dport 3306 j ACCEPT
开放多个端口:可以使用多条iptables
命令分别开放不同的端口,或者编写脚本批量添加规则,以下是一个开放多个端口的示例脚本:
- #!/bin/bash
- PORTS=(22 80 443 3306)
- for PORT in "${PORTS[@]}"; do
- iptables A INPUT p tcp dport $PORT j ACCEPT
- done
2、关闭特定端口:
关闭单个端口:关闭本机的 22 端口,禁止外部服务器通过 SSH 访问该服务器。
- iptables A INPUT p tcp dport 22 j DROP
关闭多个端口:同样可以使用多条iptables
命令分别关闭不同的端口,或者编写脚本批量添加规则,以下是一个关闭多个端口的示例脚本:
- #!/bin/bash
- PORTS=(80 443 3306)
- for PORT in "${PORTS[@]}"; do
- iptables A INPUT p tcp dport $PORT j DROP
- done
五、CentOS 中iptables
的高级应用:端口转发与 NAT
除了基本的端口开放和关闭操作外,iptables
还支持端口转发和网络地址转换(NAT)等功能,这些功能在构建复杂的网络环境和实现负载均衡等方面非常有用。
1、端口转发:端口转发可以将到达一个端口的流量重定向到另一个端口或地址上,将到达本机 8080 端口的流量转发到本地的 80 端口上。
- iptables t nat A PREROUTING p tcp dport 8080 j REDIRECT toport 80
2、NAT:NAT 可以将私有网络中的 IP 地址转换为公有网络上的 IP 地址,从而实现多个设备共享一个公网 IP 地址上网,以下是一个简单的 NAT 配置示例,将内网中的 IP 地址段转换为公网 IP 地址:
- # 开启 IP 转发功能
- echo 1 > /proc/sys/net/ipv4/ip_forward
- # 清除原有的 NAT 规则
- iptables t nat F
- # 添加 NAT 规则,假设内网 IP 段为 192.168.1.0/24,公网 IP 为 192.0.2.1
- iptables t nat A POSTROUTING o eth0 j MASQUERADE
- iptables t nat A PREROUTING i eth0 p tcp d 192.0.2.1 dport 80 j DNAT todestination 192.168.1.10:80
六、FAQs
1、Q: CentOS中如何查看已开放的端口?
A: 在 CentOS 中,可以通过多种方法查看已开放的端口,以下是一些常用的方法:使用netstat
命令、ss
命令或lsof
命令结合grep
命令来筛选出指定端口的使用情况,要查看端口 8080 是否被占用,可以使用以下命令:netstat tuln | grep 8080
,如果输出结果中包含该端口的信息,则说明该端口已被占用;如果没有输出结果,则说明该端口未被占用。
也可以使用telnet
命令来尝试连接指定端口,如果连接成功,则说明该端口是开放的;如果连接失败,则可能该端口未开放或被防火墙阻止。
对于使用firewalld
作为防火墙的 CentOS 7及以上版本系统,还可以使用firewallcmd listports
命令来列出当前已开放的端口。
需要注意的是,查看已开放端口的操作可能需要超级用户权限,因此在执行相关命令时可能需要在前面加上sudo
,由于网络环境和系统配置的不同,具体的命令输出结果可能会有所差异,如果对网络配置不太熟悉,建议在进行任何更改之前备份相关的配置文件和重要数据,以免造成不必要的损失。