在Linux服务器上,我们经常需要运行各种服务,比如Web服务器(80端口)、SSH远程连接(22端口)等。这些服务要能对外提供服务,就需要在服务器的防火墙中开放对应的端口。本文将为Linux新手介绍几种常见的开放端口方法,内容简单易懂,适合初学者快速上手。
一、为什么需要开放端口?¶
举个例子:如果你的服务器安装了Web服务器(如Nginx、Apache),默认通过80端口提供网页服务。但如果防火墙没开放80端口,外界访问时会提示“连接被拒绝”,服务也就无法正常使用。因此,开放端口是让服务对外通信的必要步骤。
二、常见的Linux防火墙工具¶
不同Linux发行版(如Ubuntu、CentOS)默认使用的防火墙工具不同,以下是最常见的3种,按新手友好度排序:
1. UFW(Uncomplicated Firewall)¶
适用系统:Ubuntu、Debian等基于Debian的发行版
特点:操作极简,像“开关”一样简单,适合纯新手入门。
步骤1:检查UFW状态¶
如果系统未安装UFW,先安装:
sudo apt update && sudo apt install ufw # Ubuntu/Debian专用
查看UFW是否运行(默认未启用时显示“Status: inactive”):
sudo ufw status
步骤2:开放端口¶
以开放 22端口(SSH远程连接) 和 80端口(Web服务) 为例:
# 开放22端口(TCP协议)
sudo ufw allow 22/tcp
# 开放80端口(TCP协议,HTTP服务)
sudo ufw allow 80/tcp
如果需要开放UDP端口(如DNS的53端口),只需加udp标识:
sudo ufw allow 53/udp
步骤3:启用UFW¶
开放端口后,必须启用UFW才能生效:
sudo ufw enable
(启用时会提示确认,输入y回车即可)
步骤4:验证开放结果¶
查看已开放的端口列表:
sudo ufw status
输出类似:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
2. firewalld(适用于CentOS/RHEL/Fedora)¶
适用系统:CentOS 7+、RHEL、Fedora
特点:动态防火墙管理,支持“区域(zone)”概念,可更灵活地控制不同网络环境的规则。
步骤1:检查firewalld状态¶
CentOS/RHEL默认已安装firewalld,直接查看状态:
sudo systemctl status firewalld
(显示“active (running)”表示已运行)
步骤2:开放端口¶
firewalld默认使用public区域(公共网络),开放端口需指定区域和协议:
# 开放22端口(TCP)
sudo firewall-cmd --permanent --zone=public --add-port=22/tcp
# 开放80端口(TCP)
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
参数说明:
- --permanent:规则永久生效(重启后不丢失);
- --zone=public:指定区域为“public”(公共网络);
- --add-port=22/tcp:添加TCP协议的22端口。
步骤3:重新加载规则¶
添加规则后,需重启firewalld或重新加载规则:
sudo firewall-cmd --reload
步骤4:验证开放结果¶
查看已开放的端口:
sudo firewall-cmd --list-ports
输出类似:
22/tcp 80/tcp
3. iptables(通用底层工具)¶
适用系统:几乎所有Linux发行版
特点:功能强大但语法稍复杂,是防火墙的“基石”工具,适合进阶用户。
步骤1:开放端口¶
以开放22端口(TCP)为例:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
参数说明:
- -A INPUT:将规则追加到INPUT链(处理进入服务器的数据包);
- -p tcp:指定协议为TCP;
- --dport 22:目标端口为22;
- -j ACCEPT:允许该数据包通过。
步骤2:保存规则(避免重启丢失)¶
iptables规则默认在重启后会丢失,需手动保存:
- CentOS/RHEL:
sudo service iptables save
- Ubuntu/Debian:
sudo iptables-save > /etc/iptables/rules.v4
步骤3:验证开放结果¶
查看INPUT链的规则:
sudo iptables -L INPUT --line-numbers
三、如何验证端口是否开放?¶
开放端口后,需确认是否生效,可通过以下方法验证:
- telnet测试(需安装telnet客户端):
telnet localhost 22 # 测试SSH端口22
若显示Connected to localhost.,说明端口开放。
- nc(netcat)测试:
nc -zv localhost 80 # 测试Web端口80
若显示Connection to localhost 80 port [tcp/http] succeeded!,说明端口开放。
- curl测试(Web服务):
curl http://localhost # 若返回Web页面内容,说明80端口开放
四、新手注意事项¶
- 优先用UFW/firewalld:新手建议从UFW(简单)或firewalld(灵活)开始,iptables适合进阶需求。
- 不要开放高危端口:除非必要,SSH(22)端口不要对所有公网开放,建议限制IP或使用密钥登录。
- 规则需永久生效:UFW和firewalld的
--permanent参数可保证重启后规则保留;iptables需手动保存。 - 关闭防火墙风险高:生产环境严禁关闭防火墙,仅测试环境临时关闭(
sudo ufw disable或systemctl stop firewalld)。 - 检查服务是否运行:开放端口后,需确保服务本身已启动(如
systemctl start sshd)。
总结¶
开放Linux服务器端口的核心是通过防火墙工具(UFW/firewalld/iptables)添加规则。新手建议从UFW或firewalld入手,操作简单且足够应对日常需求。开放后务必验证端口状态,确保服务正常运行。