作者:刘树伟
日期:2020-12-24
Windows防火墙可以阻止所有IP访问本机,如果想让某个IP访问本机,就把它加到“例外”规则中,“例外”规则就相当于白名单,但防火墙没有黑名单,不能指定阻止某个IP的访问。
如果想阻止某个IP访问本机,可以使用“本地IP安全策略”。运行“secpol.msc”可以打开“本地安全设置”,里面有“IP 安全策略,在 本地计算机”设置项,通过它,就可以达到阻止指定IP访问本机的目的。
如果想这么做,首先要在“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都没有。