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

本文详细介绍了如何配置“始终开启的VPN”,包括Netd.CommanderListener初始化后的iptables配置及开启VPN后filter表和mangle表的具体规则。此外,还解释了与L2TP_IPSEC_PSK类型的VPN相关的端口及其作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人邮箱: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
iptables 是 Linux 系统中的一个强大的防火墙工具,它可以用于过滤、重定向和修改网络数据包。它是一个基于内核的软件,可以对数据包进行过滤和修改,从而实现网络连接的控制和管理。在 Linux 系统中,iptables 是最常用的防火墙软件之一,它可以在多个层面上进行过滤和管理网络连接。以下是 iptables 在 Linux 系统中的一些应用: 1. 防火墙:iptables 可以配置防火墙规则,保护系统免受来自外部网络的攻击。它可以限制不同网络之间的数据流量,并允许或阻止特定的端口和协议。 2. NAT:iptables 可以实现网络地址转换(NAT),它可以将私有 IP 地址转换为公共 IP 地址以实现 Internet 访问。通过 NAT,可以将多个设备连接到 Internet,而不需要每个设备都拥有公共 IP 地址。 3. 端口转发:iptables 可以将进入系统的数据包重定向到其他系统或端口。这是在服务器环境中非常有用的,因为它可以将外部流量重定向到内部服务器。 4. 流量限制:iptables 可以限制流量,这对于限制恶意用户或应用程序的带宽使用非常有用。它可以限制连接的数量、速率和带宽,从而保证网络的稳定性和可靠性。 总之,iptables 是 Linux 系统中非常有用的一个工具,可以用于保护网络安全、管理网络连接和实现网络地址转换等功能。它的功能非常强大,但也需要用户具备一定的技术水平和经验,才能正确配置和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值