在操作系统中,防火墙是保障网络安全的重要屏障,通过控制端口访问可以有效阻止恶意流量或限制特定服务的对外暴露,有时需要通过命令行关闭(即阻止)特定端口的访问,本文将详细讲解Windows和Linux系统中,使用命令行关闭防火墙端口的操作方法、参数说明及注意事项。

Windows系统防火墙端口关闭命令行操作
Windows系统(包括Windows 10/11和Windows Server系列)的防火墙管理主要通过netsh工具和PowerShell实现,两者功能相似,但PowerShell提供更现代化的语法和更强大的管理能力。
使用netsh工具关闭端口
netsh(Network Shell)是Windows系统中用于网络配置的命令行工具,可通过advfirewall模块管理防火墙规则。
基本语法
netsh advfirewall firewall add rule name="规则名称" dir=in action=block protocol=TCP/UDP localport=端口号
name:自定义规则名称,便于识别(如“阻止TCP 80端口”)。dir:数据流方向,in表示入站(需关闭的端口多为入站访问),out表示出站。action:动作,block表示阻止,allow表示允许(此处需用block关闭端口)。protocol:协议类型,TCP、UDP或ANY(如未指定,默认为ANY,同时阻止TCP和UDP)。localport:需关闭的端口号,可支持单个端口(如80)、端口范围(如8000-9000)或预定义端口(如HTTP对应80,HTTPS对应443)。
操作步骤
-
添加阻止规则(以阻止TCP 80端口为例):
netsh advfirewall firewall add rule name="阻止TCP 80端口" dir=in action=block protocol=TCP localport=80
执行后,入站访问TCP 80端口的流量将被阻止。
-
添加UDP端口阻止规则(以阻止UDP 53端口为例):
netsh advfirewall firewall add rule name="阻止UDP 53端口" dir=in action=block protocol=UDP localport=53
-
验证规则是否生效:
netsh advfirewall firewall show rule name="规则名称"
netsh advfirewall firewall show rule name="阻止TCP 80端口",若规则存在且action=block,则表示设置成功。 -
删除规则(如需重新开放端口):
netsh advfirewall firewall delete rule name="规则名称"
netsh advfirewall firewall delete rule name="阻止TCP 80端口"。
使用PowerShell关闭端口
PowerShell是Windows系统推荐的命令行管理工具,通过NetFirewallRule模块可更灵活地管理防火墙规则。
基本语法
New-NetFirewallRule -DisplayName "规则名称" -Direction Inbound -Action Block -Protocol TCP -LocalPort 端口号
-DisplayName:规则显示名称(功能与netsh的name类似)。-Direction:数据流方向,Inbound(入站)或Outbound(出站)。-Action:动作,Block(阻止)或Allow(允许)。-Protocol:协议类型(TCP、UDP等)。-LocalPort:需关闭的端口号。
操作步骤
-
添加阻止规则(以阻止TCP 443端口为例):
New-NetFirewallRule -DisplayName "阻止TCP 443端口" -Direction Inbound -Action Block -Protocol TCP -LocalPort 443
-
添加UDP端口阻止规则(以阻止UDP 161端口为例):

New-NetFirewallRule -DisplayName "阻止UDP 161端口" -Direction Inbound -Action Block -Protocol UDP -LocalPort 161
-
验证规则:
Get-NetFirewallRule -DisplayName "规则名称" | Format-List *
Get-NetFirewallRule -DisplayName "阻止TCP 443端口" | Format-List *,查看Action是否为Block。 -
删除规则:
Remove-NetFirewallRule -DisplayName "规则名称"
Remove-NetFirewallRule -DisplayName "阻止TCP 443端口"。
Windows防火墙端口命令对比表
| 操作 | netsh命令示例 |
PowerShell命令示例 |
|---|---|---|
| 添加TCP阻止规则 | netsh advfirewall firewall add rule name="阻止80端口" dir=in action=block protocol=TCP localport=80 |
New-NetFirewallRule -DisplayName "阻止80端口" -Direction Inbound -Action Block -Protocol TCP -LocalPort 80 |
| 添加UDP阻止规则 | netsh advfirewall firewall add rule name="阻止53端口" dir=in action=block protocol=UDP localport=53 |
New-NetFirewallRule -DisplayName "阻止53端口" -Direction Inbound -Action Block -Protocol UDP -LocalPort 53 |
| 查看规则 | netsh advfirewall firewall show rule name="阻止80端口" |
Get-NetFirewallRule -DisplayName "阻止80端口" |
| 删除规则 | netsh advfirewall firewall delete rule name="阻止80端口" |
Remove-NetFirewallRule -DisplayName "阻止80端口" |
Linux系统防火墙端口关闭命令行操作
Linux系统常见的防火墙工具包括iptables(传统工具,多数发行版默认安装)和firewalld(CentOS/RHEL 7+、Ubuntu 16.04+等新版本推荐),两者管理方式不同,需根据系统选择。
使用iptables关闭端口
iptables是基于内核的防火墙工具,通过filter表(默认)的INPUT链控制入站流量。
基本语法
iptables -A INPUT -p 协议 --dport 端口号 -j DROP
-A INPUT:向INPUT链(入站规则)追加规则。-p 协议:协议类型,tcp、udp或all(默认)。--dport:目标端口号(destination port)。-j DROP:动作,DROP(丢弃数据包,无响应)或REJECT(拒绝并返回错误信息,更友好但可能暴露端口存在)。
操作步骤
-
添加阻止规则(以阻止TCP 22端口为例):
iptables -A INPUT -p tcp --dport 22 -j DROP
-
添加UDP端口阻止规则(以阻止UDP 123端口为例):
iptables -A INPUT -p udp --dport 123 -j DROP
-
验证规则:
iptables -L -n -v
-L列出规则,-n以数字形式显示IP和端口(避免域名解析延迟),-v显示详细信息,可在输出中找到添加的DROP规则。 -
删除规则(需明确规则序号或内容):
iptables -D INPUT -p tcp --dport 22 -j DROP
-D表示删除规则,需与添加时的规则参数完全一致。
-
保存规则(防止重启失效):
- CentOS 6/7:
service iptables save - Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4
- CentOS 6/7:
使用firewalld关闭端口
firewalld支持区域(zone)和动态管理(无需重启服务),通过firewall-cmd命令操作。
基本语法
firewall-cmd --permanent --add-port=端口号/协议 --zone=区域
--permanent:永久生效(需重启firewalld或重新加载),不加则为临时生效(重启后失效)。--add-port:需添加的端口,格式为端口号/协议(如80/tcp)。--zone:区域(如public公共区域、internal内部区域),默认为public。
操作步骤
-
添加永久阻止规则(以阻止TCP 3306端口为例):
firewall-cmd --permanent --add-port=3306/tcp --zone=public
执行后需重新加载防火墙或重启服务:
firewall-cmd --reload -
添加临时阻止规则(重启后失效):
firewall-cmd --add-port=3306/tcp --zone=public
-
验证规则:
firewall-cmd --list-ports --zone=public
或查看所有规则:
firewall-cmd --list-all --zone=public -
删除规则:
firewall-cmd --permanent --remove-port=3306/tcp --zone=public
同样需执行
firewall-cmd --reload生效。
Linux防火墙端口命令对比表
| 操作 | iptables命令示例 |
firewalld命令示例 |
|---|---|---|
| 添加TCP阻止规则 | iptables -A INPUT -p tcp --dport 22 -j DROP |
firewall-cmd --permanent --add-port=22/tcp --zone=public && firewall-cmd --reload |
| 添加UDP阻止规则 | iptables -A INPUT -p udp --dport 123 -j DROP |
firewall-cmd --permanent --add-port=123/udp --zone=public && firewall-cmd --reload |
| 查看规则 | iptables -L -n -v |
firewall-cmd --list-all --zone=public |
| 删除规则 | iptables -D INPUT -p tcp --dport 22 -j DROP |
firewall-cmd --permanent --remove-port=22/tcp --zone=public && firewall-cmd --reload |
注意事项
- 权限要求:Windows需以管理员身份运行命令行/PowerShell;Linux需使用
root用户或sudo执行命令。 - 临时vs永久规则:Windows的
netsh和PowerShell默认添加永久规则;Linux的iptables需手动保存,firewalld需加--permanent并重新加载。 - 重启影响:部分系统修改防火墙规则后需重启服务(如Linux的
iptables)或重新加载(如firewalld),否则可能不生效。 - 规则优先级:防火墙规则按顺序匹配,建议将阻止规则添加到规则列表顶部(Windows可通过
netsh的position参数调整,Linux的iptables可通过-I插入到指定位置)。 - 服务依赖:关闭端口可能导致依赖该端口的服务无法访问(如关闭80端口后Web服务无法访问),操作前需确认影响。
相关问答FAQs
问题1:为什么执行防火墙端口关闭命令后,端口仍可访问?
解答:可能原因包括:① 未以管理员/root权限执行命令;② 规则为临时规则且未重启服务(如Linux的firewalld未加--permanent或未重新加载);③ 防火墙服务未启动(Windows可通过services.msc检查“Windows Firewall”服务,Linux通过systemctl status firewalld/iptables检查);④ 规则被其他优先级更高的规则覆盖(如“允许所有”规则在阻止规则之前);⑤ 协议或端口号输入错误(如误将TCP写成UDP),建议检查上述情况并重新验证规则。
问题2:如何确认端口是否已被防火墙成功关闭?
解答:可通过以下方法验证:
- 使用
telnet或nc测试:在本地或另一台机器执行telnet IP地址 端口号,若显示“连接超时”或“无法打开连接”,则表示端口被阻止;若成功连接,则规则未生效。 - 查看防火墙规则:Windows用
netsh advfirewall firewall show rule或PowerShell的Get-NetFirewallRule;Linux用iptables -L -n -v或firewalld --list-all,确认规则存在且动作为阻止。 - 使用
netstat或ss检查端口监听状态:执行netstat -tuln | grep 端口号或ss -tuln | grep 端口号,若端口仍显示LISTEN,需检查是否为服务自身监听(防火墙仅阻止外部访问,不影响本地进程)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19045.html