防火墙是网络安全体系中的重要组成部分,主要用于监控和控制进出网络的数据流,依据预设的安全规则决定是否允许数据包通过,在不同操作系统中,防火墙的实现方式和管理命令有所不同,以下将以Linux系统中的iptables和firewalld为例,详细介绍防火墙的基本命令及其使用方法,同时涵盖Windows系统防火墙的基础操作,帮助用户全面掌握防火墙的配置与管理。

Linux系统防火墙基本命令
iptables命令(基于Netfilter框架)
iptables是Linux内核中经典的防火墙工具,通过表(table)和链(chain)来管理规则,默认包含filter、nat和mangle三个表,其中filter表最常用,用于过滤数据包。
-
查看规则
- 查看filter表中所有规则(默认):
sudo iptables -L -n -v
参数说明:
-L
列出规则,-n
以数字形式显示地址和端口(避免DNS解析),-v
显示详细信息(如数据包数量、字节数)。 - 查看指定链的规则(如INPUT链):
sudo iptables -L INPUT -n
- 查看filter表中所有规则(默认):
-
添加规则
(图片来源网络,侵删)- 允许特定IP访问(如192.168.1.100):
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
参数说明:
-A
在链末尾添加规则,-s
指定源IP,-j
采取的动作(ACCEPT允许、DROP丢弃、REJECT拒绝并返回错误信息)。 - 允许访问特定端口(如80端口):
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-p
指定协议(tcp/udp/icmp),--dport
指定目标端口。
- 允许特定IP访问(如192.168.1.100):
-
删除规则
- 删除最后一条规则:
sudo iptables -D INPUT -s 192.168.1.100 -j ACCEPT
-D
删除规则,需与添加规则时的参数完全一致。(图片来源网络,侵删) - 通过规则编号删除(先查看规则编号):
sudo iptables --line-numbers -L INPUT sudo iptables -D INPUT 3 # 删除INPUT链的第3条规则
- 删除最后一条规则:
-
修改默认策略
默认策略为ACCEPT(允许所有),修改为DROP(禁止所有)需谨慎:sudo iptables -P INPUT DROP # 修改INPUT链默认策略为DROP
-
保存规则
不同Linux发行版保存方式不同:- Ubuntu/Debian:
sudo iptables-save > /etc/iptables/rules.v4
- CentOS/RHEL:
sudo service iptables save
- Ubuntu/Debian:
firewalld命令(CentOS 7+/RHEL 7+默认防火墙)
firewalld采用区域(zone)概念,根据网络连接信任程度将流量划分到不同区域(如public、trusted、home),每个区域有独立的规则集。
-
启动与启用服务
sudo systemctl start firewalld # 启动服务 sudo systemctl enable firewalld # 开机自启
-
查看区域与规则
- 查看当前活跃区域:
sudo firewall-cmd --get-active-zones
- 查看指定区域的规则(如public区域):
sudo firewall-cmd --zone=public --list-all
- 查看当前活跃区域:
-
添加规则
- 允许端口(如添加8080端口到public区域):
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
--permanent
表示永久生效(需重启服务或重新加载),不加则临时生效。 - 允许特定IP(如192.168.1.50访问):
sudo firewall-cmd --zone=public --add-source=192.168.1.50 --permanent
- 允许端口(如添加8080端口到public区域):
-
重新加载与删除规则
- 重新加载规则使永久配置生效:
sudo firewall-cmd --reload
- 删除规则(如删除8080端口):
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
- 重新加载规则使永久配置生效:
-
端口转发与MASQUERADE(NAT)
- 启用IP转发:
sudo sysctl -w net.ipv4.ip_forward=1
- 设置MASQUERADE(适用于内网共享外网IP):
sudo firewall-cmd --zone=public --add-masquerade --permanent
- 启用IP转发:
Windows系统防火墙基本命令
Windows防火墙可通过命令行工具netsh
进行管理,适用于批量操作或脚本自动化。
-
启用/禁用防火墙
- 启用防火墙(所有配置文件):
netsh advfirewall set allprofiles state on
- 禁用防火墙:
netsh advfirewall set allprofiles state off
- 启用防火墙(所有配置文件):
-
添加入站规则
允许特定程序(如C:\Program Files\app.exe):netsh advfirewall firewall add rule name="Allow MyApp" dir=in action=allow program="C:\Program Files\app.exe"
允许特定端口(如TCP 3389):
netsh advfirewall firewall add rule name="Allow RDP" dir=in action=allow protocol=TCP localport=3389
-
删除规则
按规则名称删除:netsh advfirewall firewall delete rule name="Allow MyApp"
防火墙规则管理表格(Linux firewalld示例)
操作 | 命令示例 | 说明 |
---|---|---|
添加端口规则 | sudo firewall-cmd --zone=public --add-port=80/tcp --permanent |
永久开放80端口 |
查看规则 | sudo firewall-cmd --zone=public --list-ports |
列出public区域已开放端口 |
删除端口规则 | sudo firewall-cmd --zone=public --remove-port=443/tcp --permanent |
永久关闭443端口 |
添加服务规则 | sudo firewall-cmd --zone=public --add-service=http --permanent |
开放http服务(对应80端口) |
查看已开放服务 | sudo firewall-cmd --zone=public --list-services |
列出public区域已开放服务 |
相关问答FAQs
Q1: 防火墙规则添加后不生效怎么办?
A1: 首先检查规则是否添加到正确的链或区域(如iptables需确认添加到INPUT链,firewalld需确认区域匹配),对于iptables,确保规则顺序正确(按从上到下匹配);对于firewalld,添加--permanent
规则后需执行--reload
重新加载,检查默认策略是否为DROP,若为DROP需明确允许相关流量,同时排查网络接口是否正确绑定规则。
Q2: 如何允许防火墙阻止的特定程序联网?
A2: 以Linux firewalld为例,可通过添加服务规则或程序路径实现:
- 若程序属于已知服务(如SSH、HTTP),直接开放对应服务:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
- 若为自定义程序,需开放其使用的端口(如程序使用12345端口):
sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent
对于Windows系统,使用
netsh
添加程序规则(见上文),或在防火墙控制面板中“允许应用通过防火墙”手动添加程序路径,注意:开放端口或程序时需遵循最小权限原则,避免过度开放导致安全风险。