windows防火墙命令实践-我电脑我做主

linux有iptables,可以很精确的控制访问。
windows也有自己的防火墙,可以按出入站,类型,端口,程序路径等来控制网络访问。功能是强大,但比较难用。

能解决什么问题

禁止一些不必要联网的程序偷偷的连网。

比如说输入法,主要功能就是做好字母组合与汉字的对应关系,这是个相对固定没有什么变化的功能。本就是单机功能,没有必要联网。
如果联网了,就开始弹广告,开始自动更新,多一些累赘功能。
有些没节操的可能要搜集你的输入数据偷偷上传。
这样,不让它们连网,是最安全。

比如说一些软件,每次启动时都会检查更新,但这个软件当前版本用得很习惯,不想去适应新版本,但次都提示更新很烦。
就是禁止它指定端口出站,就样就获取不了更新信息,自然不会弹窗。

怎么解决

以windows7为例:
控制面板\所有控制面板项\Windows 防火墙 ->高级设置
可以弹出防火墙面版。
选出站规则,右键新建规则,就可以按这个向导一步一步来。
但显然,如果规则很多的话,就很繁琐。

windows 提供了命令行方式进行操作防火墙规则。

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users>netsh advfirewall firewall  ?

下列指令有效:

此上下文中的命令:
? - 显示命令列表。
add - 添加新入站或出站防火墙规则。
delete - 删除所有匹配的防火墙规则。
dump - 显示一个配置脚本。
help - 显示命令列表。
set - 为现有规则的属性设置新值。
show - 显示指定的防火墙规则。

  • 查看当前防火墙所有规则
    netsh advfirewall firewall show rule name=all

  • 添加一条防火墙规则
    netsh advfirewall firewall add rule name=xxxx dir=out action=block program="xx.exe"
    更多用法可以用 netsh advfirewall firewall add查看

比如禁止excel联网的命令可能是这样的:
netsh advfirewall firewall add rule name=block_excel dir=out action=block program="C:/Program Files/Microsoft Office/Office14/EXCEL.EXE"

批处理脚本

比如要禁止某文件夹下所有exe的联网。
可以用下面脚本生成命令,复制并执行。
在要管理员权限下执行
以禁止我用的qq五笔为例

1
2
3
4
5
6
import glob
basepath ='C:\\Program Files (x86)\\Tencent\\QQWubi\\2.2.334.400\\'
strformat = "netsh advfirewall firewall add rule name=qq_block_p%d dir=out action=block program=\"%s\""
filelist = glob.glob(basepath+"*.exe")
for i in range(len(filelist )):
print strformat % (i,filelist[i])

当然别忘了要启用防火墙。

关于windows 防火墙的优先级

参考:https://technet.microsoft.com/en-us/library/f1207683-3d4e-4382-91ac-36b1dde432cb

简单来说就是阻断规则的优先级高于允许规则。

禁止除指定端口外的所有连接,这样的需求实现就比较麻烦

常用的规则

  • 禁止所有程序的出站连接: netsh advfirewall firewall add rule name=block_all_out dir=out action=block
  • 禁止所有程序的指定端口的连接:netsh advfirewall firewall add rule name=block_all_port dir=out action=block protocol=tcp remoteport=1024-2048,2050-65535

禁用QQ的自动更新程序联网

最近QQ老弹电脑管家的推送,很是恶心。
注意路径要用\\不能用/

1
2
3
4
5
6
7
8
9
10
strformat = "netsh advfirewall firewall add rule name=qq_block_p%d dir=out action=block program=\"%s\""
filelist = [
"C:\\Users\\ff\\AppData\\Roaming\\Tencent\\QQCalldt.exe",
"C:\\Users\\ff\\AppData\\Roaming\\Tencent\\QQCallvl.exe",
"C:\\Program Files (x86)\\Common Files\\Tencent\\QQDownload\\135\\Tencentdl.exe",
"C:\\Program Files (x86)\\Common Files\\Tencent\\QQProtect\\Bin\\QQProtect.exe",
"C:\\Program Files (x86)\\Common Files\\Tencent\\QQProtect\\Bin\\QQProtectUpd.exe"
]
for i in range(len(filelist )):
print strformat % (i,filelist[i])