个人邮箱:xiaokeweng@gmail.com 欢迎大家直接发邮件给我共同交流学习
如下涉及到的全部firewall的在用的Netdcmd,只有在设置LockDown Vpn的时候才会使用到,lockdown的VPN即是“始终开启的VPN”,这样本地的全部网络请求都会转到VPN的链路上,是相对于针对个别应用的虚拟专用网络需求的情况。
如下涉及到的全部firewall的在用的Netdcmd,只有在设置LockDown Vpn的时候才会使用到,lockdown的VPN即是“始终开启的VPN”,这样本地的全部网络请求都会转到VPN的链路上,是相对于针对个别应用的虚拟专用网络需求的情况。
(1) Netd.CommanderListener初始化后:
firewall enable|disable set_interface_rule<interface><allow|deny> set_egress_source_rule<add><allow|deny> set_egress_dst_rule<addr><port><allow|deny> set_uid_rule<uid><allow|deny>
(2) 开启VPN,并设置为“始终开启的VPN”后:filter表:createChildChains(V4V6, "filter", "INPUT", FILTER_INPUT); createChildChains(V4V6, "filter", "FORWARD", FILTER_FORWARD); createChildChains(V4V6, "filter", "OUTPUT", FILTER_OUTPUT); createChildChains(V4V6, "mangle", "POSTROUTING", MANGLE_POSTROUTING); sFirewallCtrl->setupIptablesHooks();
-N fw_INPUT
-N fw_OUTPUT
-N fw_FORWARD
-A INPUT -j fw_INPUT
-A OUTPUT -j fw_OUTPUT
-A FORWARD -j fw_FORWARD
mangle表:
-N fw_mangle_POSTROUTING
-A POSTROUTING -j fw_mangle_POSTROUTING
(3)关于racoon 中ip-sec的默认端口filter表新增规则:sFirewallCtrl->enableFirewall(); sFirewallCtrl->setInterfaceRule([lo], [allow]); sFirewallCtrl->setEgressDestRule(addr, PROTOCOL_x, port, rule); sFirewallCtrl->setEgressSourceRule(addr, PROTOCOL_x, port, rule); sFirewallCtrl->setUidRule(uid, rule);
-A fw_FORWARD -j REJECT --reject-with icmp-port-unreachable
-A fw_INPUT -m owner --uid-owner 1000 -j RETURN
-A fw_INPUT -m owner --uid-owner 0 -j RETURN
-A fw_INPUT -d 10.122.160.81/32 -j RETURN
-A fw_INPUT -i ppp0 -j RETURN
-A fw_INPUT -s 210.61.122.57/32 -p udp -m udp --sport 1701 -j RETURN
-A fw_INPUT -s 210.61.122.57/32 -p tcp -m tcp --sport 1701 -j RETURN
-A fw_INPUT -s 210.61.122.57/32 -p udp -m udp --sport 4500 -j RETURN
-A fw_INPUT -s 210.61.122.57/32 -p tcp -m tcp --sport 4500 -j RETURN
-A fw_INPUT -s 210.61.122.57/32 -p udp -m udp --sport 500 -j RETURN
-A fw_INPUT -s 210.61.122.57/32 -p tcp -m tcp --sport 500 -j RETURN
-A fw_INPUT -i lo -j RETURN
-A fw_INPUT -j DROP
-A fw_OUTPUT -m owner --uid-owner 1000 -j RETURN
-A fw_OUTPUT -m owner --uid-owner 0 -j RETURN
-A fw_OUTPUT -s 10.122.160.81/32 -j RETURN
-A fw_OUTPUT -o ppp0 -j RETURN
-A fw_OUTPUT -d 210.61.122.57/32 -p udp -m udp --dport 1701 -j RETURN
-A fw_OUTPUT -d 210.61.122.57/32 -p tcp -m tcp --dport 1701 -j RETURN
-A fw_OUTPUT -d 210.61.122.57/32 -p udp -m udp --dport 4500 -j RETURN
-A fw_OUTPUT -d 210.61.122.57/32 -p tcp -m tcp --dport 4500 -j RETURN
-A fw_OUTPUT -d 210.61.122.57/32 -p udp -m udp --dport 500 -j RETURN
-A fw_OUTPUT -d 210.61.122.57/32 -p tcp -m tcp --dport 500 -j RETURN
-A fw_OUTPUT -o lo -j RETURN
mangle表新增规则:
-A fw_mangle_POSTROUTING -m owner --uid-owner 1000 -j RETURN
-A fw_mangle_POSTROUTING -m owner --uid-owner 0 -j RETURN
-A fw_mangle_POSTROUTING -s 10.122.160.81/32 -j RETURN
-A fw_mangle_POSTROUTING -o ppp0 -j RETURN
-A fw_mangle_POSTROUTING -d 210.61.122.57/32 -p udp -m udp --dport 1701 -j RETURN
-A fw_mangle_POSTROUTING -d 210.61.122.57/32 -p tcp -m tcp --dport 1701 -j RETURN
-A fw_mangle_POSTROUTING -d 210.61.122.57/32 -p udp -m udp --dport 4500 -j RETURN
-A fw_mangle_POSTROUTING -d 210.61.122.57/32 -p tcp -m tcp --dport 4500 -j RETURN
-A fw_mangle_POSTROUTING -d 210.61.122.57/32 -p udp -m udp --dport 500 -j RETURN
-A fw_mangle_POSTROUTING -d 210.61.122.57/32 -p tcp -m tcp --dport 500 -j RETURN
-A fw_mangle_POSTROUTING -o lo -j RETURN
-A fw_mangle_POSTROUTING -j DROP
以上新增的规则看起很多,其实并不复杂,比较好理解,本例中,建立起来的L2TP_IPSEC_PSK类型的VPN,server地址是 210.61.122.57/32,通信的iface是ppp0 , ppp0的addr:10.122.160.81/31, 其中规则中vpn相关的port:
[500 ] : ip-sec的默认ISAKMP密钥交换监听端口,可参考racoon的man手册。
[4500] : ip-sec的默认NAT-Traversal通信端口,可参考racoon的man手册。
[1701] : L2TP类型VPN在framework下mtpd与racon cmd的时候制定的port。
所以以上的全部rule就是保证VPN相关的控制流&数据流能顺利通过规则,在被DROP掉之前RETURN,同时阻断VPN无关的数据。
racoon — IKE (ISAKMP/Oakley) key management daemon
racoon speaks the IKE (ISAKMP/Oakley) key management protocol, to establish security associations with other hosts. The SPD (Security Policy Database) in the kernel usually triggers racoon. racoon usually sends all informational messages, warnings and error messages to syslogd(8) with the facility LOG_DAEMON and the priority LOG_INFO. Debugging messages are sent with the priority LOG_DEBUG. You should configure syslog.conf(5) appropriately to see these messages.
-P isakmp-natt-port
Use isakmp-natt-port for NAT-Traversal port-floating. The default is 4500.
-p isakmp-port
Listen to the ISAKMP key exchange on port isakmp-port instead of the default port number, 500