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

个人邮箱:xiaokeweng@gmail.com  欢迎大家直接发邮件给我共同交流学习

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

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>
(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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值