使用iptables过滤传入的Strongswan VPN数据包

我在Debian Squeeze机器上使用了Strongswan VPN服务器。 传入的VPN客户端获得192.168.99.0/24子网的IP。

由于我使用这个VPN主要是在使用非encryption的WLAN时进行encryption,所以我正在使用iptables做一个源NAT到互联网。 (因为服务器有一个静态的ipv4地址,所以我优先selectNAT。

目前我正在使用下面的iptables命令

# used for StrongSWAN iptables -t nat -I POSTROUTING -s 192.168.99.0/24 -o eth0 -j SNAT --to-source <public IP adress of server> 

我的问题是:使用此规则时,从此192.168.99.0/24子网传入的每个stream量现在都将被接受并进行NAT。 我想更具体一点,只有通过此VPN隧道进入服务器的stream量才被此规则接受。

在使用两个networking设备的传统路由器设置中,我将检查传入设备是否可以实现这一点。 Strongswan中是否有相当的东西(例如虚拟networking设备)?

如何过滤通过隧道到达服务器的数据包,以便只有这些数据包被NAT?

你应该看看iptables的策略模块,iptables根据它们与IPsec策略的关系来匹配数据包(有关详细信息,请参阅man 8 iptablesman 8 iptables-extensions )。

模块如何最好地应用真的取决于防火墙的其他部分是如何configuration的以及您的具体要求是什么。 例如,将INPUTFORWARD链的默认(防火墙)策略设置为DROP (通过SSH进行注意,因为这可能会将您locking在机器外面),然后使用strongSwan默认的updown脚本( leftfirewall=yes )为您执行与IPsec隧道相关的所有操作。 该脚本将自动添加适当的input和转发规则(使用策略模块),以允许通过IPsec隧道来往隧道子网的stream量(实际上,对于公路战士来说,只允许分配IP,甚至不允许整个子网) 。

如果你不想这样做,你可以手动添加一些规则。 通过以下选项,您可以匹配通过任何IPsec连接到达的数据包(使用--dir in|out指定方向):

 -m policy --dir in --pol ipsec 

因此,如果您只想丢弃来自所述子网的未经IPsec到达的源IP,则可以添加以下规则:

 iptables -A INPUT -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP iptables -A FORWARD -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP