作者:刘树伟

日期:2020-12-24

 

Windows防火墙可以阻止所有IP访问本机,如果想让某个IP访问本机,就把它加到“例外”规则中,“例外”规则就相当于白名单,但防火墙没有黑名单,不能指定阻止某个IP的访问。

 

如果想阻止某个IP访问本机,可以使用“本地IP安全策略”。运行“secpol.msc”可以打开“本地安全设置”,里面有“IP 安全策略,在 本地计算机”设置项,通过它,就可以达到阻止指定IP访问本机的目的。

java写入防火墙黑名单 windows防火墙ip黑名单_IPSec

 

如果想这么做,首先要在“IP 安全策略,在 本地计算机”中创建一条“IP 安全策略”,然后在新建的“IP 安全策略”中,创建一条“IP 筛选器列表”,在新建的“IP 筛选器列表”中,创建一条或多条“IP 筛选器”,“IP 筛选器”就指定了远程IP的IP地址、要访问本机的端口、访问协议等。并为每条新建的“IP 筛选器”创建一个“筛选器操作”,“筛选器操作”指定了是阻止、放行还是协商三个动作之一。

 

这样,当指定的远程IP要访问本机某个端口时,就会遍历“IP 安全策略,在 本地计算机”中的策略列表,遍历到你新建的策略后,再遍历其中的“IP 筛选器列表”,遍历到你新建的“IP 筛选器列表”后,再遍历其中的“筛选器”。依据筛选器和筛选器操作指定的规则来对待某次网络访问(例如是放行还是阻止)。

 

IP安全策略支持从Win2000开始的所有Windows系统。

 

限制:

在Server2003上,不支持IPV6,高版本支持;

在所有系统上,不支持过滤IP范围,但可以通过子网掩码指定过滤某个子网;

在所有系统上,不支持过滤端口范围,如果有这个需求,只能把一个个端口加到“筛选器列表”中。

 

在Server2003上,通过nets命令行工具的ipsec参数,可以代替UI来操作IP安全策略:

建立一个IP 安全策略(空的),名字为scottliu

 在[IP 安全策略,在 本地计算机]的右侧列表中,新增scottliu项。

 netsh ipsec static add policy name=scottliu

 

 删除一个IP 安全策略

 上面刚建立的scottliu策略就会被删除

 netsh ipsec static delete policy name=scottliu

 

 建立一个筛选器列表(空的),名字为denyip

 在[IP 安全策略,在 本地计算机 | 右侧的操作窗口中 | 更多操作 | 管理IP筛选器列表和筛选器操作 | 管理IP筛选器列表]的“IP筛选器列表”中,新增denyip项。

 netsh ipsec static add filterlist name=denyip

 

 建立一个筛选器,并加到刚建立的筛选器列表denyip中

 在[IP 安全策略,在 本地计算机 | 右侧的操作窗口中 | 更多操作 | 管理IP筛选器列表和筛选器操作 | 管理IP筛选器列表]的“IP筛选器列表”中,双击denyip项,在IP筛选器列表中,新增一条记录。

 netsh ipsec static add filter filterlist=denyip srcaddr=192.168.40.2 dstaddr=Me dstport=3389 protocol=TCP

 

 删除刚创建的筛选器

 // netsh ipsec static delete filter filterlist=denyip srcaddr=192.168.40.2 dstaddr=Me dstport=3389 protocol=TCP

 

 建立一个筛选器操作(即阻止还是放行),名字叫denyact

 在[IP 安全策略,在 本地计算机 | 右侧的操作窗口中 | 更多操作 | 管理IP筛选器列表和筛选器操作 | 管理筛选器操作]的“筛选器操作”列表中,新增denyact项。

 netsh ipsec static add filteraction name=denyact action=block

 

 把上面建的组成一条规则加入规则到安全策略scottliu,规则名为kill3389

 在[IP 安全策略,在 本地计算机 | 右侧的scottliu策略上右键选属性 | 规则 | IP安全规则 | IP筛选器列表]中,多了一项denyip并自动勾选。

 netsh ipsec static add rule name=kill3389 policy=scottliu filterlist=denyip filteraction=denyact

 

 激活scottliu这个策略

 相当于在scottliu这个策略上右键,选“分配”。

 netsh ipsec static set policy name=scottliu assign=y

 

 删除所有安全策略

 netsh ipsec static del all

 

源代码中的IPSecCreatePolicyData应该是创建策略。

真正创建的地方,应该是PersistPolicyObject

MarshallPolicyBuffer这个是组合ipsecData键的二进制数据。

policy-r.c是主要实现文件。

 

从Vista开始,微软新增加了WFP API来代替“IP 安全策略”来阻止指定IP访问本机,并且功能更强大,上面说的那些限制,WFP都没有。