设为首页 收藏本站
查看: 794|回复: 0

[经验分享] Linux iptables初级运用

[复制链接]

尚未签到

发表于 2018-5-17 08:12:40 | 显示全部楼层 |阅读模式
  Linux iptables初级运用
      背景:
      在学习到防火墙相关知识后,对防火墙及iptables有了更清楚的认识,将对防火墙和iptables工具的理解记录下来备以后参考。
      iptables基本认识:
  在Linux内核中选取了五个位置来放五个hook function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function是向用户开放的,所以用户可以通过命令工具iptables向其写入规则来控制访问。
      iptables是命令行工具,工作在用户空间,用来编写防火墙规则,写好的规则被送往netfilter,告诉内核如何去处理信息包。在Centos7版本也有iptables工具,不过默认使用的是firewalld,这两则最好就开启一个,否则有可能会冲突。
      iptables由四个表和五个链以及一些规则组成:
          四个表:filter、nat、mangle、raw
            filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
            nat表:network address translation 地址转换规则表
            mangle:修改数据标记位规则表
            raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
            优先级由高到低的顺序为:raw-->mangle-->nat-->filter

          五个内置链chain:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
          表和链对应关系:
               raw表:PEROUTING链 OUTPUT链
              mangle表:PEROUTING链 POSTROUTING链 INPUT链 OUTPUT链 FORWORD链
              nat表:PEROUTING链 POSTROUTING链 OUTPUT链 INPUT链

              filter表:INPUT链 FORWORD链 OUTPUT链
       在系统中有三种报文流
          1、流入本机:PREROUTING --> INPUT -->用户空间进程
          2、流出本机:用户空间进程--> OUTPUT --> POSTROUTING
          3、转发:PREROUTING --> FORWARD --> POSTROUTING
      DSC0000.png

      内核中数据包的传输过程:
        当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去 ;如果数据包就是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出 ;如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
      iptables规则:
          规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处 理动作作出处理;

          内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG...

          自定义处理动作:自定义chain,利用分类管理复杂情形
          规则要添加在链上才能生效,添加在自定义上是不会自动生效的
          iptables规则添加时考量点 :
              要实现哪种功能:判断添加在哪张表上;
            报文流经的路径:判断添加在哪个链上;
            报文的流向:判断源和目的;
            匹配规则:业务需要;
        链上规则的次序,即为检查的次序,因此隐含一定的法则
            同类规则(访问同一应用),匹配范围小的放上面;

              不同类规则(访问不同应用),匹配到报文频率较大的放上面;

              将那些可由一条规则描述的多个规则合并为一个;
              设置默认策略;
      iptables命令基本格式:

          基本格式:
        iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-targetoptions]

           简洁版:iptables -t filter(表) -A INPUT(链) -s 源IP -j 动作(常用:REJECT,ACCEPT,DROP)

          -t table:raw, mangle, nat, [filter]默认
        SUBCOMMAND
            1、链管理:
              -N:new, 自定义一条新的规则链
            -X:delete,删除自定义的空的规则链
            -P:Policy,设置默认策略;对filter表中的链而言,默认策有:ACCEPT:接受,DROP:丢弃
            -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
              2、查看:
            -L:list, 列出指定鏈上的所有规则,本选项须置后
            -n:numberic,以数字格式显示地址和端口号
            -v:verbose,详细信息,-vv更详细
            -x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
            --line-numbers:显示规则的序号
            常用组合:
                  --vnL
                --vvnxL --line-numbers
            -S selected,以iptables-save 命令格式显示链上规则
            3、规则管理:
            -A:append,追加
            -I:insert, 插入,要指明插入至的规则编号,默认为第一条
            -D:delete,删除
                (1) 指明规则序号
                (2) 指明规则本身
            -R:replace,替换指定链上的指定规则编号
            -F:flush,清空指定的规则链
            -Z:zero,置零,iptables的每条规则都有两个计数器:
                (1) 匹配到的报文的个数
                (2) 匹配到的所有报文的大小之和
    匹配条件:

          1、基本匹配条件:无需加载模块,由iptables/netfilter自行提供
            [!] -s, --source address[/mask][,...]:源IP地址或范围
            [!] -d, --destination address[/mask][,...]:目标IP地址或范围
            [!] -p, --protocol protocol:指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or “all“ 参看:/etc/protocols
            [!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流环节,只应用于INPUT、FORWARD、PREROUTING链
            [!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
          PS:[]表示可有可无,!表示非
          例子:iptables -A INPUT -s 172.18.76.100 -j REJECT
          向filter表的INPUT链添加规则,拒绝172.18.76.100这个IP的访问
          如果你想要指定协议,如icmp
          iptables -A INPUT -p icmp -s 172.18.76.100 -j REJECT

           DSC0001.png
          2 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效,查看帮助man iptables-extensions
            隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
              tcp协议的扩展选项
                [!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围
                [!] --destination-port,--dport port[:port]:匹配报文目标端口,可为范围
                [!] --tcp-flags mask comp

                      mask 需检查的标志位列表,用,分隔如:SYN,ACK,FIN,RST

                      comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用','分隔

              例子1:iptables -A INPUT -p tcp -s 172.18.76.100 --dport 22 -j REJECT

              
DSC0002.png

  

          例子2:iptables -A INPUT -p tcp --tcp-flags SYN SYN -j REJECT                拒绝新的连接,旧的连接正常使用,对第一次握手的SYN标记位做规则。
          3 处理动作:
            -j targetname [per-target-options]
            简单:
                ACCEPT,DROP
            扩展:
                REJECT:--reject-with:icmp-port-unreachable默认
                RETURN:返回调用链
                REDIRECT:端口重定向
                  LOG:记录日志,dmesg
                MARK:做防火墙标记
                DNAT:目标地址转换
                SNAT:源地址转换
                MASQUERADE:地址伪装

        iptables规则优化:
            1 安全放行所有入站和出站的状态为ESTABLISHED状态连接
            2 谨慎放行入站的新请求
            3 有特殊目的限制访问功能,要在放行规则之前加以拒绝
            4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
            5 不同类的规则(访问不同应用),匹配范围大的放在前面
            6 应该将那些可由一条规则能够描述的多个规则合并为一条
            7 设置默认策略,建议白名单(只放行特定连接)
                1) iptables -P,不建议
                2)建议在规则的最后定义规则做为默认策略

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-461138-1-1.html 上篇帖子: 使用putty连接linux 下篇帖子: Linux的目录ls命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表