Android系统中iptables的应用(四)FirewallController

来源:互联网 发布:windows tasks sched 编辑:程序博客网 时间:2024/04/30 11:57
个人邮箱:xiaokeweng@gmail.com  欢迎大家直接发邮件给我共同交流学习

    如下涉及到的全部firewall的在用的Netdcmd,只有在设置LockDown Vpn的时候才会使用到,lockdown的VPN即是“始终开启的VPN”,这样本地的全部网络请求都会转到VPN的链路上,是相对于针对个别应用的虚拟专用网络需求的情况。

firewall      enable|disableset_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>
(1) Netd.CommanderListener初始化后:
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();
filter表:
-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
(2) 开启VPN,并设置为“始终开启的VPN”后:
sFirewallCtrl->enableFirewall();sFirewallCtrl->setInterfaceRule([lo], [allow]);sFirewallCtrl->setEgressDestRule(addr, PROTOCOL_x, port, rule);sFirewallCtrl->setEgressSourceRule(addr, PROTOCOL_x, port, rule);sFirewallCtrl->setUidRule(uid, rule); 
filter表新增规则:
-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无关的数据。
(3)关于racoon 中ip-sec的默认端口
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
0 0
原创粉丝点击