通过IPSec,不使用第三方软件,只需要经过几步设置,我们就能够得到一个功能强大的防火墙。他能精确控制某个IP对本机某个端口的访问。对于某些要实现简易阻止IP功能安全软件,比如IIS防火墙,没必要自己开发一防火墙驱动(根据本人经验开发防火墙驱动难度很大,而且稳定性很难保障),完全可以通过配置本地的IPSec来实现。

配置一个IPSec策略需要经过如下几步:
1)创建策略。
2)创建过滤器。
3)创建过滤动作。
4)创建规则(封装策略)。
5)启用和关闭策略。


从上面可以看出配置步骤还是比较繁琐的。我们可以在Windows图形界面工具中配置也可以使用Windows提供的”netsh ipsec”命令。对于开发人员来说,要想在自己的程序中使用IPSec,肯定更关心的是命令行下的配置方式。下面我通过一个实例说明整个配置过程。最后给出一个我封装的IPSec的C++类,通过该类可以很简单的完成配置工作。大家可以根据自己的需要修改这个类。


下面创建一个规则,拒绝本机与202.117.112.10(西电科大web服务器)之间的所有通信。

1、创建策略:

命令:

netsh ipsec static add policy name=redice的安全策略description= redice的安全策略

图形界面下查看命令结果:

netsh ipsec命令行下配置IP筛选器(IPSec)_ipsec

2、创建过滤器:

命令:

netsh ipsec static add filter filterlist=本机与202.117.112.10的所有通信 srcaddr=me srcport=0 dstaddr=202.117.112.10 dstport=0 protocol=anymirrored=yes srcmask=255.255.255.255 dstmask=255.255.255.255

注:
filterlist 过滤器名称
srcaddr,dstaddr 源/目的IP地址 (me表示本机IP,any表示任意IP)
srcport,dstport 源/目的端口 (0表示任意端口)
protocol 协议 (ANY | ICMP | TCP | UDP | RAW | <integer>)
mirrored=yes 双向

图形界面下查看命令结果:

netsh ipsec命令行下配置IP筛选器(IPSec)_netsh_02

3、创建过滤动作:

命令:

netsh ipsec static add filteraction name=阻止 action=block

注:这个命令就是创建堵塞数据包动作,并命名为阻止
图形界面下查看命令结果:

netsh ipsec命令行下配置IP筛选器(IPSec)_ipsec_03

4、创建规则(封装策略):
命令:

netsh ipsec static add rule name=阻止本机与202.117.112.10的所有通信 policy= redice的安全策略 filterlist=本机与202.117.112.10的所有通信 filteraction=阻止 desc=阻止本机与202.117.112.10的所有通信

图形界面下查看命令结果:

netsh ipsec命令行下配置IP筛选器(IPSec)_ipsec_04

5、启用和关闭策略:

命令:

netsh ipsec static set policy name= redice的安全策略assign=y


注:如果要关闭这条策略,那么将"assign"的值改为"n"即可。

图形界面下查看命令结果:

netsh ipsec命令行下配置IP筛选器(IPSec)_ipsec_05

测试,访问http://202.117.112.10 (西安电子科技大学主页)

netsh ipsec命令行下配置IP筛选器(IPSec)_配置IP筛选器_06


关于IPSec类:IPSec类及示例程序下载 (无版权欢迎二次开发使用,欢迎反馈意见 redice@163.com)

File: Click to Download

示例程序的说明:


IPSec.exe
Usage: ipsec.exe [-b] [-c] [-f filepath] [-?] ip

Options:
-? 显示本帮助信息.
-b ip 阻止该IP与本机的一切通信(默认为-b).
-c ip 恢复该IP与本机的一切通信.
-f filepath IP列表从指定配置文件中读取.


在上面的IPSec类中,添加过滤器使用的是将多条"netsh ipsec static add filter ..."命令使用"&"连接起来,然后使用CreateProcess调用该命令实现的。这样做事比较耗费时间的。经过我测试,每次执行45条添加命令,添加2000个ip大约要花费300s的时间。这太漫长了。后来,发现了netsh命令的"-f"参数,它后面可以附加一个scriptfile(批处理)。于是我修改了IPSec类,让其先将所有的添加命令("ipsec static add filter....")写入到一个批处理文件中,然后使用CreateProcess调用"cmd.exe /c 批处理文件"。发现添加10000个ip竟然只用了3.983s。
附上修改后的IPSec类:
File: Click to Download