• 【转载】iptables、tc和ip命令


    2.3 CommandListener中的命令

    CL一共定义了11个命令,这些命令充分反映了Netd在Android系统中网络管理和控制方面的职责。本节首先介绍Linux系统中常用的三个网络管理工具,然后再分类介绍CL中的相关命令。

    2.3.1 iptables、tc和ip命令

    网络管理和控制一直是一项比较复杂和专业的工作,由于Linux系统中原本就有一些强大的网络管理工具,故Netd也毫不犹豫充分利用了它们。目前Netd中最依赖三个网络管控工具,即iptables、tc和ip。

    1. iptables命令[7][8][9]

    iptables是Linux系统中最重要的网络管控工具。它与Kernel中的netfilter模块配合工作,其主要功能是为netfilter设置一些过滤(filter)或网络地址转换(NAT)的规则。当Kernel收到网络数据包后,将会依据iptables设置的规则进行相应的操作。举个最简单的例子,可以利用iptables设置这样一条防火墙规则:丢弃来自IP地址为192.168.1.108的所有数据包。

    (1)iptables原理

    iptables的语法比较复杂,但工作原理较易理解。清楚iptables的前提是理解它的表(Table)、链(Chain)和规则(Rule)。三者关系如图2-10所示。

     

    由图2-10可知:

    iptables内部(其实是Kernel的netfilter模块)维护着四个Table,分别是filter、nat、mangle和raw,它们对应着不同的功能,稍后将详细介绍它们的作用。

    Table中定义了Chain。一个Table可以支持多个Chain,Chain实际上是Rule的集合,每个Table都有默认的Chain。例如filter表默认的Chain有INPUT、OUTPUT、FORWARD。用户可以自定义Chain,也可修改Chain中的Rule。稍后将介绍不同Table中默认Chain方面的知识。

    Rule就是iptables工作的规则。首先,系统将检查要处理的数据包是否满足Rule设置的条件,如果满足则执行Rule中设置的目标(Target),否则继续执行Chain中的下一条Rule。

    由前述内容可知,iptables中的Table和Chain是理解iptables工作的关键。表2-1总结了iptables中默认Table及Chain的相关内容。


     

    由表2-1可知,有些Table的默认Chain具有相同的名字,导致我们理解起来有些困难。为此,读者必须结合图2-11所示的iptables数据包处理流程图来理解前述内容。由图可知,不同Table和Chain在此处理流程中起着不同的作用。

     

    (2)iptables Target和常用参数

    iptables中的Rule有四个默认定义的Target,如下。

    ACCEPT:接收数据包。

    DROP:直接丢弃数据包。没有任何信息会反馈给数据源端。

    RETURN:返回到调用Chain,略过后续的Rule处理。

    QUEUE:数据返回到用户空间去处理。

    提示 iptables的扩展Target还支持REJECT。相比DROP而言,REJECT会发送反馈信息给数据源端,如主机不可达之类(icmp-host-unreachable)的信息。目前只有INPUT、OUTPUT、FORWARD以及被这三个链调用的自定义链支持REJECT。

    iptables有很多参数,此处先介绍一些常用参数。

    -t:指定table。如果不带此参数,则默认为filter表。

    -A,--append chain rule-specification:在指定Chain的末尾添加一条Rule,rule-specification指明该Rule的内容。

    -D,--delete chain rule-specification:删除指定Chain中满足rule-specification的那条Rule。

    -I,--insert chain [rule num] rule-specification:为指定Chain插入一条Rule,位置由rule num指定。如果没有该参数,则默认加到Chain的头部。

    -N:创建一条新Chain。

    -L,--list:显示指定Table的Chain和Rule的信息。

    Rule-specification描述该Rule的匹配条件以及目标动作,它也有一些参数来指明这些信息。

    -i:指定接收数据包的网卡名,如eth0、eth1等。

    -o:指定发出数据包的网卡名。

    -p:指定协议,如tcp、udp等。

    -s,--source address[/mask]:指定数据包的源IP地址。

    -j,--jump target:跳转到指定目标,如ACCEPT、DROP等。

    以前文提到的设置防火墙为例,其对应的iptables设置参数如下。

    iptables -t filter -A INPUT -s 192.168.1.108 -j DROP

    如果仅拦截协议为tcp的数据包,则相应参数如下。

    iptables -t filter -A INPUT -p tcp -s 192.168.1.108 -j DROP

    另外,iptables仅支持IPv4,如果需针对IPv6进行相应设置,则要使用ip6tables工具。

    提示 iptables的用法非常灵活,如果没有长期的使用经验,将很难理解它们的真正作用。

  • 相关阅读:
    在Android中通过导入静态数据库来提高应用第一次的启动速度
    《sqlite权威指南》读书笔记 (一)
    Android APK反编译详解(附图)
    Android如何防止apk程序被反编译
    PopupWindow 学习总结
    Android开源框架Afinal第一篇——揭开圣女的面纱
    教程] 《开源框架-Afinal》之FinalHttp 01一步一脚
    android 下改变默认的checkbox的 选中 和被选中 图片
    Android设置RadioButton在文字的右边
    Android Selector 与 Shape 基本用法
  • 原文地址:https://www.cnblogs.com/hiker-blogs/p/4252730.html
Copyright © 2020-2023  润新知