美文网首页
iptables 使用

iptables 使用

作者: zhuchunyan_aiji | 来源:发表于2020-09-07 20:21 被阅读0次

    https://www.zsythink.net/archives/1199
    https://www.zsythink.net/archives/1517
    http://www.zsythink.net/archives/1604

    基础知识

    到本机某进程的报文:PREROUTING --> INPUT
    由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
    由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

    iptables为我们提供了如下"表"
    filter表:负责过滤功能,防火墙;内核模块:iptables_filter
    nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
    mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
    raw表:关闭nat表上启用的连接追踪机制;iptable_raw
    也就是说,我们自定义的所有规则,都是这四种分类中的规则,或者说,所有规则都存在于这4张"表"中

    每个"链"中的规则都存在于哪些"表"中。
    PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
    INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
    FORWARD 的规则可以存在于:mangle表,filter表。
    OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
    POSTROUTING 的规则可以存在于:mangle表,nat表。

    但是,我们在实际的使用过程中,往往是通过"表"作为操作入口,对规则进行定义的,之所以按照上述过程介绍iptables,是因为从"关卡"的角度更容易从入门的角度理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各"表"与"链"的关系罗列出来,

    表(功能)<--> 链(钩子):
    raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
    mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
    nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
    filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

    处理动作

    处理动作在iptables中被称为target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。
    此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:
    ACCEPT:允许数据包通过。
    DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
    REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
    SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
    MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
    DNAT:目标地址转换。
    REDIRECT:在本机做端口映射。
    LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

    基本操作

    1. 查看

    -t 指定表

    iptables -nvL
    iptables -t filter -L 等价于:iptables -L 默认查看filter
    iptables -t raw -L
    iptables -t mangle -L
    iptables -t nat -L

    指定链路

    iptables -t filter -L INPUT

    可显示规则的编号

    iptables --line -nvL INPUT

    2. 新增

    -I: 插入最前面
    -A: 在后面添加
    与匹配策略顺序有关,从上到下

    命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作

    示例:
    iptables -t filter -A INPUT -s 192.168.1.146 -j DROP
    iptables -t filter -I INPUT -s 10.40.66.185 -j ACCEPT
    iptables -t filter -I INPUT -s 10.40.66.205 -j DROP
    

    命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作

    示例:
    iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT
    

    命令语法:iptables -t 表名 -P 链名 动作

    示例:iptables -t filter -P FORWARD ACCEPT
    

    3. 删除规则

    按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。
    命令语法:iptables -t 表名 -D 链名 规则序号

    示例:
       iptables -t filter -D INPUT 3
    

    上述示例表示删除filter表中INPUT链中序号为3的规则。
    按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则。

    命令语法:
    iptables -t 表名 -D 链名 匹配条件 -j 动作
    示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
    

    4. 清空规则

    删除指定表的指定链中的所有规则,-F选项表示清空对应链中的规则,执行时需三思。

    命令语法:iptables -t 表名 -F 链名
    示例:iptables -t filter -F INPUT
    

    5. 修改规则

    注意点:如果使用-R选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源IP,目标IP等。
    修改指定表中指定链的指定规则,-R选项表示修改对应链中的规则,使用-R选项时要同时指定对应的链以及规则对应的序号,并且规则中原本的匹配条件不可省略。

    命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
    示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT
    

    上述示例表示修改filter表中INPUT链的第3条规则,将这条规则的动作修改为ACCEPT, -s 192.168.1.146为这条规则中原本的匹配条件,如果省略此匹配条件,修改后的规则中的源地址可能会变为0.0.0.0/0。

    其他修改规则的方法:先通过编号删除规则,再在原编号位置添加一条规则。

    6. 保存规则

    在centos7中,使用firewall替代了原来的iptables service
    我们只要通过yum源安装iptables与iptables-services即可(iptables一般会被默认安装,但是iptables-services在centos7中一般不会被默认安装),在centos7中安装完iptables-services后,即可像centos6中一样,通过service iptables save命令保存规则了,规则同样保存在/etc/sysconfig/iptables文件中。

    #配置好yum源以后安装iptables-service
    # yum install -y iptables-services
    #停止firewalld
    # systemctl stop firewalld
    #禁止firewalld自动启动
    # systemctl disable firewalld
    #启动iptables
    # systemctl start iptables
    #将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务
    # systemctl enable iptables
    
    

    上述配置过程只需一次,以后即可在centos7中愉快的使用service iptables save命令保存iptables规则了。

    其他通用保存方法

    使用如下方法保存规则

    iptables-save > /etc/sysconfig/iptables
    

    可以使用如下命令从指定的文件载入规则,注意:重载规则时,文件中的规则将会覆盖现有规则。

    iptables-restore < /etc/sysconfig/iptables
    

    7. iptables的黑白名单机制

    允许指定ip段访问指定端口,其余ip不可以访问此端口

    实例:172.16.65开头的ip可以访问此机器的2181 端口,其余不可以访问
    iptables -I INPUT -s 172.16.65.0/24 -p tcp --dport 2181 -j ACCEPT
    iptables -A INPUT -p tcp --dport 2181 -j DROP
    
    黑名单:阻止10.1.1.1 访问3010端口,其他都可以访问
    iptables -I  INPUT -s 10.1.1.1 -p tcp --dport 3010 -j DROP
    
    

    我们就来做一个简单的白名单吧,也就是说,只放行被规则匹配到的报文,其他报文一律拒绝

    相关文章

      网友评论

          本文标题:iptables 使用

          本文链接:https://www.haomeiwen.com/subject/neufsktx.html