在Linux系统中,放行端口是确保网络服务(如Web服务、数据库、SSH等)能够正常访问的关键操作,由于不同Linux发行版默认使用的防火墙工具不同(如CentOS/RHEL常用firewalld,Ubuntu/Debian常用iptables或ufw),且云服务器(如AWS、阿里云)还需额外配置安全组,因此需根据具体场景选择合适的方法,本文将详细介绍Linux系统放行端口的多种方式,包括不同防火墙工具的操作步骤、注意事项及验证方法。
使用firewalld放行端口(CentOS/RHEL默认)
firewalld是CentOS 7及以上版本、RHEL 7及以上版本默认的动态防火墙管理工具,支持区域(Zone)管理,可灵活配置信任网络和端口。
操作步骤:
-
检查firewalld状态
首先确认firewalld是否运行,若未运行需先启动并设置开机自启:systemctl status firewalld # 查看状态(inactive为未运行) systemctl start firewalld # 启动firewalld systemctl enable firewalld # 设置开机自启
-
添加端口规则
- 临时放行(重启后失效):直接添加端口,无需
--permanent
参数。firewall-cmd --zone=public --add-port=8080/tcp # 放行TCP 8080端口
- 永久放行(重启后生效):添加
--permanent
参数,修改后需重新加载防火墙。firewall-cmd --permanent --zone=public --add-port=8080/tcp firewall-cmd --reload # 重新加载防火墙使规则生效
- 批量放行多个端口:用逗号分隔端口,如
8080-8082
表示放行8080至8082端口:firewall-cmd --permanent --zone=public --add-port=8080-8082/tcp firewall-cmd --reload
- 临时放行(重启后失效):直接添加端口,无需
-
查看已开放端口
firewall-cmd --list-ports # 查看所有已开放端口 firewall-cmd --zone=public --list-ports # 查看指定区域(public)的端口
-
设置服务别名(可选)
若需放行常见服务(如http、https),可直接通过服务名配置,无需记忆端口:firewall-cmd --permanent --add-service=http # 放行HTTP服务(默认80端口) firewall-cmd --permanent --add-service=https # 放行HTTPS服务(默认443端口) firewall-cmd --reload
firewalld常用命令总结
操作场景 | 命令示例 |
---|---|
启动firewalld | systemctl start firewalld |
开机自启firewalld | systemctl enable firewalld |
永久放行端口(需重载) | firewall-cmd --permanent --add-port=端口号/协议 |
临时放行端口(无需重载) | firewall-cmd --add-port=端口号/protocol |
重新加载防火墙 | firewall-cmd --reload |
查看已开放端口 | firewall-cmd --list-ports |
删除端口规则 | firewall-cmd --permanent --remove-port=端口号/协议 |
使用iptables放行端口(Ubuntu/Debian默认或CentOS旧版)
iptables是Linux内核级的防火墙工具,功能强大但规则复杂,常见于Ubuntu/Debian系统或未启用firewalld的CentOS 6及以下版本。
操作步骤:
-
检查iptables状态
iptables -L -n # 查看当前规则(-n不解析域名,-L列出规则链) systemctl status iptables # 查看iptables服务状态(CentOS)
若未运行,需启动并设置开机自启(CentOS):
systemctl start iptables systemctl enable iptables
-
添加端口规则
iptables规则按“链”(Chain)和“表”(Table)管理,常用filter
表的INPUT
链(控制入站流量)。- 开放TCP端口:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT # 追加规则:允许TCP 8080端口入站
- 开放UDP端口:
iptables -A INPUT -p udp --dport 53 -j ACCEPT # 允许UDP 53端口(DNS服务)
- 开放端口范围:
iptables -A INPUT -p tcp --dport 8080-8082 -j ACCEPT
- 开放TCP端口:
-
保存规则(关键步骤)
iptables规则默认重启后失效,需手动保存:- CentOS:
service iptables save # 保存至/etc/sysconfig/iptables
- Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4 # 保存至IPv4规则文件
- CentOS:
-
设置开机自启
- CentOS:
chkconfig iptables on
- Ubuntu/Debian:
systemctl enable iptables
- CentOS:
-
查看与删除规则
- 查看规则编号:
iptables -L INPUT --line-numbers
(带编号,方便删除) - 删除指定规则:
iptables -D INPUT 编号
(如iptables -D INPUT 3
删除第3条规则)
- 查看规则编号:
iptables常用命令总结
操作场景 | 命令示例 |
---|---|
开放TCP端口 | iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT |
开放UDP端口 | iptables -A INPUT -p udp --dport 端口号 -j ACCEPT |
保存规则(CentOS) | service iptables save |
保存规则(Ubuntu/Debian) | iptables-save > /etc/iptables/rules.v4 |
查看规则带编号 | iptables -L INPUT --line-numbers |
删除规则 | iptables -D INPUT 编号 |
使用ufw放行端口(Ubuntu简化防火墙)
ufw(Uncomplicated Firewall)是Ubuntu提供的简化防火墙工具,命令更直观,适合新手。
操作步骤:
-
检查ufw状态
ufw status # 默认为inactive(未启用) ufw enable # 启用ufw(会提示防火墙规则变更,输入y确认)
-
添加端口规则
- 开放指定端口:
ufw allow 8080/tcp # 放行TCP 8080端口 ufw allow 53/udp # 放行UDP 53端口
- 开放端口范围:
ufw allow 8080:8082/tcp # 放行8080-8082 TCP端口
- 开放服务:
ufw allow http # 放行HTTP(80端口) ufw allow ssh # 放行SSH(22端口)
- 开放指定端口:
-
查看与删除规则
- 查看规则:
ufw status numbered
(带编号) - 删除规则:
ufw delete 编号
(如ufw delete 3
)或直接指定规则:ufw delete allow 8080/tcp
- 查看规则:
ufw常用命令总结
操作场景 | 命令示例 |
---|---|
启用ufw | ufw enable |
开放TCP端口 | ufw allow 端口号/tcp |
开放UDP端口 | ufw allow 端口号/udp |
开放端口范围 | ufw allow 起始端口:结束端口/tcp |
查看规则(带编号) | ufw status numbered |
删除规则 | ufw delete 编号 |
云服务器安全组配置(额外步骤)
若使用云服务器(如AWS EC2、阿里云ECS、腾讯云CVM),仅开放系统防火墙端口可能仍无法访问,需额外配置安全组(虚拟防火墙,控制云服务器的网络流量)。
操作步骤(以阿里云为例):
- 登录云平台控制台,进入“云服务器ECS”管理页面。
- 选择目标实例,点击“安全组”配置,进入安全组列表。
- 点击“配置规则”,添加“入方向”规则:
- 授权策略:允许
- 授权对象:0.0.0.0/0(允许所有IP,或指定IP段,如192.168.1.0/24)
- 端口范围:输入需放行的端口(如8080),或选择“全部端口”
- 协议类型:TCP/UDP/ICMP,根据服务选择(如TCP)
- 保存规则,等待1-2分钟生效。
注意:云服务器安全组规则与系统防火墙规则需协同配置,缺一不可。
验证端口是否开放
配置完成后,需验证端口是否真正开放,可通过以下方法:
-
使用telnet测试(需安装telnet工具,Ubuntu/Debian:
apt install telnet
,CentOS:yum install telnet
):telnet IP地址 端口号 # 如telnet 192.168.1.100 8080
若端口开放,会显示“Connected to …”;若未开放,则显示“Connection refused”。
-
使用netcat(nc)测试:
nc -zv IP地址 端口号 # 如nc -zv 192.168.1.100 8080
成功时显示“Connection to IP地址 port [端口号] [tcp/udp] succeeded!”。
-
使用ss或netstat检查监听状态:
ss -tuln | grep 端口号 # 查看端口是否处于监听状态(LISTEN) netstat -tuln | grep 端口号
注意事项
- 权限问题:所有防火墙操作均需root权限或sudo权限,普通用户无法执行。
- 端口冲突:确保需开放的端口未被其他服务占用(通过
ss -tuln | grep 端口号
检查)。 - 服务状态:端口放行后,需确认对应服务已启动并监听该端口(如nginx:
systemctl status nginx
)。 - 规则顺序:iptables按规则顺序匹配,添加规则时需注意位置(
-I
插入到指定位置,-A
追加到末尾)。 - 安全限制:为避免安全风险,建议仅开放必要的端口,并限制访问IP(如ufw:
ufw allow from 192.168.1.100 to any port 8080
)。
相关问答FAQs
Q1:为什么端口已通过firewalld开放,但外部设备仍无法访问?
A:可能原因包括:① firewalld未运行或规则未重新加载(需执行firewall-cmd --reload
);② 服务未监听0.0.0.0(如服务仅监听127.0.0.1,需修改配置为0.0.0:8080
);③ 云服务器安全组未开放该端口(需登录云平台配置安全组入方向规则);④ 外部网络防火墙或运营商策略拦截(可尝试用telnet本地IP测试,排除本地防火墙问题)。
Q2:如何永久删除firewalld中已添加的端口规则?
A:删除firewalld端口规则需分“临时”和“永久”两种情况:① 若规则是临时添加(无--permanent
),直接删除即可,重启后自动失效;② 若规则是永久添加(带--permanent
),需使用--remove-port
参数并重新加载防火墙,具体命令为:firewall-cmd --permanent --remove-port=端口号/协议
,然后执行firewall-cmd --reload
,若需批量删除,可通过firewall-cmd --list-ports --permanent
查看所有永久规则,再逐个删除。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37511.html