【Android配置防火墙使其开机生效】

思路就是将防火墙规则写进一个脚本,在每次开机的时候执行,很简单。具体步骤如下

1.使用iptables命令控制你的防火墙规则,并写进一个脚本

2.将脚本集成到系统

3.写一个开机服务,调用iptables配置的脚本

本文以RK3588为例

因为Android底层是linux内核,所以可以写一个shell脚本配置防火墙规则

写一个脚本init.iptables.sh

#! /vendor/bin/sh

# init.iptables.sh

# 先清空所有的规则,避免干扰
/system/bin/iptables -F
/system/bin/iptables -X
/system/bin/iptables -Z
/system/bin/iptables -t nat -F
/system/bin/iptables -t nat -X
/system/bin/iptables -t nat -Z
/system/bin/iptables -t mangle -F
/system/bin/iptables -t mangle -X
/system/bin/iptables -t mangle -Z
/system/bin/iptables -P INPUT DROP
/system/bin/iptables -P OUTPUT DROP
/system/bin/iptables -P FORWARD DROP

# 配置你想要的规则
# 这里允许192.168.10.122的tcp 6666端口流量的输入和输出
/system/bin/iptables -A INPUT -p tcp --dport  6666 -s 192.168.10.122 -j ACCEPT
/system/bin/iptables -A OUTPUT -p tcp --dport 6666 -d 192.168.10.122 -j ACCEPT

将脚本放进RK的客制化路径
device/rockchip/common/rootdir/init.iptables.sh

集成到系统里面

在编译文件里加入我们新写的脚本,这里编译后会放到vendor/bin/目录下。存放的路径根据自己的需求,一般可以在TARGET_COPY_OUT_VENDOR或者TARGET_COPY_OUT_SYSTEM

--- a/rootdir/rootdir.mk
+++ b/rootdir/rootdir.mk
@@ -24,6 +24,7 @@ PRODUCT_COPY_FILES += \
     $(ROCKCHIP_ROOT_DIR_PATH)/init.rk30board.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.$(TARGET_BOARD_HARDWARE).rc \
     $(ROCKCHIP_ROOT_DIR_PATH)/init.rk30board.usb.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.$(TARGET_BOARD_HARDWARE).usb.rc \
     $(ROCKCHIP_ROOT_DIR_PATH)/init.recovery.rk30board.rc:recovery/root/init.recovery.$(TARGET_BOARD_HARDWARE).rc \
+    $(ROCKCHIP_ROOT_DIR_PATH)/init.iptables.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.iptables.sh \
 
 ifneq (,$(filter vehicle car,$(TARGET_BOARD_PLATFORM_PRODUCT)))
 PRODUCT_COPY_FILES += \

编译后会放到vendor/bin路径下

在init.rc添加开机启动服务,执行脚本

--- a/rootdir/init.rockchip.rc
+++ b/rootdir/init.rockchip.rc
@@ -17,6 +17,9 @@ on post-fs
     # set RLIMIT_MEMLOCK to 64MB
     setrlimit 8 67108864 67108864
 
 # 在开机完成的时候配置iptables
+on property:sys.boot_completed=1
+    start config_iptables
+
 service charger /system/bin/charger
     class charger
     seclabel u:r:healthd:s0
@@ -138,3 +141,11 @@ service gpsd  /system/bin/glgps -c /system/etc/gps/gpsconfig.xml
 #service getbootmode /system/bin/getbootmode.sh
 #    disabled
 #    oneshot
+
+service config_iptables /vendor/bin/init.iptables.sh
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
+    seclabel u:r:vendor_init:s0  # SElinux标签,不添加脚本不会被执行

编译前最好将脚本权限改成可执行,这里我将脚本权限设置成775

这里还可以用iptables-restore,需要将服务改一下

+service config_iptables /system/bin/iptables-restore < xxx.rules
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
+    seclabel u:r:system_init:s0  # SElinux标签,不添加脚本不会被执行

xxx.rules最好放在system/bin下,并且规则最好不要手写,语法规则不方便人的阅读,将需要配置的防火墙规则用iptables命令设置好后,用iptables-save生成。
想了解具体的用法可以用iptables-restore --help查看
实现在
/system/netd/server/IptablesRestoreController.cpp

Linux系统是通过文件标志来区分文件类型,而不是通过文件尾缀,所以xxx.rules的名字是随便起的

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值