本文目录导读:

自定义防火墙规则需要一定的网络知识基础,但核心思路是明确的:明确允许什么,拒绝什么,并按照顺序匹配。
默认情况下,防火墙通常是拒绝所有入站(Inbound)连接,允许所有出站(Outbound)连接,自定义规则就是在这个基础上进行“加白”或“加黑”。
下面我会根据你使用的不同环境,分别介绍思路和具体操作方法。
第一步:核心概念与思路(无论什么防火墙都适用)
在动手之前,先明确以下几个关键要素,一条规则就是它们的组合:
- 方向(Direction):
- 入站(Inbound/Input):数据从外部网络进入你的电脑或服务器,一般默认全禁,只放行需要的服务(如网页、远程桌面)。
- 出站(Outbound/Output):数据从你的电脑发送到外部网络,一般默认全放行,只用规则阻止你不希望的程序联网(如禁止某个软件自动升级、发送数据)。
- 源地址(Source):数据从哪来的,可以是一个IP地址、一个IP网段(如
168.1.0/24)或“任何地址(Any)”。 - 目标地址(Destination):数据要去哪,同理,可以是单个IP、网段或“任何地址”。
- 协议与端口(Protocol & Port):这是最常用的过滤条件。
- TCP/UDP:最常见的协议。
- 端口:如HTTP是80端口,HTTPS是443端口,SSH是22端口,RDP是3389端口。
- 动作(Action):匹配到这条规则后怎么办。
- 允许(Allow/ACCEPT):放行。
- 拒绝(Deny/REJECT):明确拒绝,并回复对方“被拒”。
- 丢弃(Drop):直接将数据包丢弃,不回复任何信息(更安全,对方以为你机器不在线)。
- 应用程序/服务:一些高级防火墙(如Windows Defender、Mac的防火墙)还可以基于具体的应用程序来制定规则。
制定规则的黄金法则:
先写最具体的规则,后写默认规则。 规则从上到下匹配,一旦匹配就停止。
第二步:不同环境下的具体操作方法
场景 A:个人电脑(Windows / macOS)
Windows(使用 Windows Defender 防火墙 带高级安全)
这是大多数普通用户自定义的首选。
-
目标示例:只允许微信联网,禁止所有其他程序联网(出站规则)。
- 打开:控制面板 -> Windows Defender 防火墙 -> 高级设置。
- 点击左侧的 “出站规则”。
- 点击右侧 “新建规则...”。
- 规则类型选择 “程序” -> 下一步。
- “此程序路径”:浏览并选择
WeChat.exe的安装路径 -> 下一步。 - 操作:选择 “阻止连接” (因为我们要禁止所有其他程序,这里就要阻止微信?等一下,逻辑是:默认是放行的,那么我们要阻止微信,就选阻止,但我们的目标是只允许微信,那么正确的做法是:先新建一个允许微信的规则,然后修改默认规则或删除默认放行规则。更简单的做法是:拒绝所有,然后允许微信。)
- 推荐方法:直接新建一个出站规则,操作选择 “阻止所有连接”,应用于 “所有程序”,然后再新建一个规则,操作选择 “允许连接”,仅应用于
WeChat.exe,将这个规则放在最上面(可以通过上下箭头调整优先级)。
- 推荐方法:直接新建一个出站规则,操作选择 “阻止所有连接”,应用于 “所有程序”,然后再新建一个规则,操作选择 “允许连接”,仅应用于
- 应用:勾选“域”、“专用”、“公用” -> 下一步。
- 名称:输入规则名(如“只允许微信出站”),点击完成。
-
常用入站规则:
- 允许远程桌面(RDP,端口3389):新建入站规则 -> 端口 -> TCP -> 特定本地端口
3389-> 允许连接 -> 应用。 - 允许Ping(ICMP):新建入站规则 -> 自定义 -> 协议类型选择 ICMPv4 -> 点击“自定义” -> 类型和代码选择 “回显请求” -> 允许连接。
- 允许远程桌面(RDP,端口3389):新建入站规则 -> 端口 -> TCP -> 特定本地端口
macOS(使用自带防火墙 / pfctl)
- 操作路径:系统设置 -> 网络 -> 防火墙 -> 选项。
- 功能:macOS防火墙相对简单,主要基于应用程序进行允许或阻止,没有图形化的端口/协议规则。
- 进阶:需要使用终端命令
pfctl(包过滤器,Packet Filter),编辑/etc/pf.conf文件,这比较专业,建议初学者优先使用界面。
场景 B:企业/家庭路由器防火墙
大多数家用路由器(TP-LINK、腾达、小米等)会提供“IP/MAC地址过滤”和“端口过滤”的简单功能,企业级路由器(如Cisco、华为、H3C、Ubiquiti)则支持更复杂的规则。
- 操作位置:路由器管理后台 -> 安全设置(Security)-> 防火墙(Firewall) 或 访问控制(Access Control)。
- 常用规则示例:
- 禁止某台电脑访问外网:创建规则,源IP地址是那台电脑的内网IP,动作选择“拒绝”,方向选“出站”。
- 只允许某些电脑访问特定网站:源IP填特定电脑,目标IP填网站的服务器IP,端口填80/443,动作“允许”。
- 防止内网IP伪造(防止ARP攻击):有些路由器有“IP与MAC绑定”功能,这能防止别人抢IP。
场景 C:云服务器 / Linux 服务器(iptables / ufw / firewalld)
这是最灵活、也最需要小心的场景。
新手推荐:ufw(Uncomplicated Firewall,未配置复杂的防火墙,Ubuntu/Debian)
# 1. 启用UFW,并设置默认规则(拒绝所有入站,允许所有出站) sudo ufw default deny incoming sudo ufw default allow outgoing # 2. 添加允许入站的规则(只开你需要的端口!) sudo ufw allow 22/tcp # 允许SSH(非常重要,否则你会断开服务器连接!) sudo ufw allow 80/tcp # 允许HTTP(Web服务) sudo ufw allow 443/tcp # 允许HTTPS # 3. 更有针对性的规则 sudo ufw allow from 192.168.1.100 to any port 22 # 只允许内网IP 192.168.1.100 SSH登录 sudo ufw deny from 10.0.0.0/8 # 拒绝来自10.0.0.0/8整个网段的所有连接 # 4. 启用防火墙(注意:先确保SSH规则已添加,否则你会被踢出去!) sudo ufw enable # 5. 查看状态 sudo ufw status verbose
高手进阶:iptables / nftables
iptables 是Linux内核防火墙的传统管理工具,规则是链式的。
- 核心概念:表(Tables,如filter/nat)-> 链(Chains,如INPUT/OUTPUT/FORWARD)-> 规则(Rules)。
- 示例(阻止某个IP访问你服务器):
sudo iptables -A INPUT -s 123.123.123.123 -j DROP
(
-A INPUT添加一条规则到INPUT链,-s源地址,-j DROP动作是丢弃) - 示例(只允许192.168.1.0/24网段访问SSH):
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j DROP
自定义防火墙规则的本质
无论你使用何种工具,自定义规则的核心就是“允许的服务最小化”:
- 默认拒绝所有入站:你的电脑/服务器不需要对外提供服务的端口,全部关闭,只开放你明确知道需要的端口(如80、443、22)。
- 有选择地放行出站:除非你有特别的安全要求(如禁止某软件联网),否则出站默认全放行。
- 白名单优先:先允许已知的、必要的(比如你公司的VPN IP、特定网站的IP),再拒绝或丢弃所有其他。
- 记录日志(Log):在规则中开启日志功能,可以帮你排查被阻止的流量,从而发现问题。
最后的重要提醒:
- 修改防火墙规则前,建议先做好备份或快照,特别是远程连接云服务器时,一个错误的入站规则(比如误删了SSH的允许规则)会直接导致你无法连接到服务器,只能通过控制台的VNC/IPMI来恢复。
- 规则顺序很重要:防火墙是按顺序从上到下匹配的,宽泛的规则(如“允许所有”)放在前面,会导致后面的特定拒绝规则失效。
- 保持简洁:规则越少越清晰,越容易维护,不必要的复杂规则网络和安全性能会下降,也容易出错。
标签: 防火墙规则