在进行网络权限配置之前,必须先确认当前操作系统的发行版以及防火墙服务的运行状态。不同的Linux发行版默认使用的防火墙管理工具不同,CentOS 7及以上版本默认使用firewalld,而Ubuntu及Debian系统通常使用ufw或iptables。
执行以下命令查看系统版本信息:
cat /etc/os-release
接着,检查系统中是否已安装防火墙管理工具。如果是CentOS系统,执行:
rpm -qa | grep firewalld
如果未安装,请使用yum进行安装:
yum install firewalld -y
对于Ubuntu系统,检查并安装ufw:
sudo apt update
sudo apt install ufw -y
无论使用哪种工具,操作前务必确认当前的SSH连接端口(默认为22)已经在允许列表中,否则配置错误可能导致连接断开且无法远程管理服务器。
firewalld基于区域(Zone)的概念来管理流量,默认区域通常是public。以下操作均在Root权限下执行。
首先启动firewalld服务并设置为开机自启:
systemctl start firewalld
systemctl enable firewalld
检查服务状态,确保显示为active (running):
systemctl status firewalld
假设我们需要开放Web服务常用的80端口(HTTP)和443端口(HTTPS)。使用--permanent参数表示规则永久生效,重启后依然有效,执行后需要使用--reload重载配置。
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
验证端口是否添加成功:
firewall-cmd --list-ports
如果某个服务不再需要对外提供服务,应及时移除端口权限。例如移除3306端口(MySQL):
firewall-cmd --permanent --remove-port=3306/tcp
firewall-cmd --reload
生产环境中,通常只允许特定的管理IP访问SSH端口(22),拒绝其他所有IP连接。这需要使用“富规则”(Rich Rule)来实现。
移除public区域对22端口的默认放行(如果之前存在):
firewall-cmd --permanent --zone=public --remove-service=ssh
添加只允许特定IP(例如192.168.1.100)访问22端口的规则:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
如果是一个网段,例如192.168.1.0/24,则修改source address:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
最后重载配置使规则生效:
firewall-cmd --reload
查看当前生效的富规则:
firewall-cmd --list-rich-rules
如果检测到恶意IP攻击,可以直接封禁该IP的所有入站流量:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" reject'
firewall-cmd --reload
UFW(Uncomplicated Firewall)是Ubuntu默认的防火墙管理工具,旨在简化iptables的配置。
在启用之前,确保先允许SSH连接,防止被锁在门外:
sudo ufw allow ssh
sudo ufw allow 22/tcp
然后启用UFW:
sudo ufw enable
系统会提示将会中断现有的SSH连接,输入y并回车确认。查看UFW状态:

sudo ufw status verbose
开放HTTP和HTTPS端口:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
UFW允许在规则中指定源IP。例如,只允许192.168.1.100访问3306端口:
sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp
拒绝特定IP访问所有端口:
sudo ufw deny from 10.0.0.50
首先查看带编号的规则列表:
sudo ufw status numbered
输出结果中会显示序号,例如[ 1] 22/tcp。若要删除第1条规则,执行:
sudo ufw delete 1
无论是firewalld还是ufw,底层最终都是通过iptables(或nftables)规则生效。在某些精简系统或需要极高定制化的场景下,直接操作iptables是必要的。
使用-L列出规则,-n以数字形式显示IP和端口,-v显示详细信息(包数量、字节数),--line-numbers显示行号:
iptables -L -n -v --line-numbers
在配置新环境前,通常会清空默认规则。注意:这可能会导致网络中断,建议在控制台操作。
iptables -F
iptables -X
iptables -Z
设置默认的入站策略为DROP(拒绝),出站和转发为ACCEPT(允许):
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
必须允许本地回环(Lo)通信,否则许多本地服务会失效。同时,允许已经建立的连接(即服务器对外发出的请求的回包)通过:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
开放80和443端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
直接使用iptables命令添加的规则在重启后会失效。不同系统保存方式不同。
对于CentOS 7,使用service保存:
service iptables save
对于Ubuntu/Debian,需要安装iptables-persistent:
sudo apt install iptables-persistent
sudo netfilter-persistent save
配置完成后,必须进行验证以确保规则按预期工作。
使用ss或netstat命令检查服务是否正在监听配置的端口:
ss -tulnp | grep :80
如果该命令没有返回结果,说明服务未启动,此时检查防火墙规则是无效的。
在服务器内部使用curl测试本地Web服务是否正常:
curl -I http://127.0.0.1
在另一台机器上,使用telnet或nc(netcat)测试目标端口是否可达。
使用telnet测试80端口:
telnet <服务器IP> 80
如果连接失败(显示Connection refused或Connection timed out),而服务确实在运行,则通常是防火墙规则配置错误或云服务器安全组未放行。
如果连接被拒绝,可以查看系统日志定位原因。对于firewalld,可以查看内核日志:
dmesg | grep -i 'firewall'
或者查看/var/log/messages(CentOS)或/var/log/syslog(Ubuntu)中关于拒绝连接的记录。在iptables中,可以添加日志规则来记录被丢弃的包:
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
通过以上步骤,可以完成从安装、配置到验证的Linux网络权限管理全流程,确保服务器在提供必要服务的同时,最大程度地阻断非授权访问。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图