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

[经验分享] iptables/netfilter详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-27 10:46:29 | 显示全部楼层 |阅读模式
iptables/netfilter详解


一、前言

1.防火墙(Firewall)是隔离工具;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(识别条件)进行检测,
        对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件。
   
2.防火墙分类:
        硬件防火墙:在硬件级别能部分防火墙,另一部分功能基于软件实现;
        软件防火墙:应用软件处理逻辑运行通用硬件实现的防火墙;
        主机防火墙:服务范围为当前主机;
        网络防火墙:服务范围为局域网;
        
3.iptables/netfilter 包过滤型防火墙:

        软件实现的主机或网络防火墙

二、iptables 的历史以及工作原理

1.1 iptables的发展: ip fw --> ip chains --> ip tables
    iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。
    但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。
    当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
    他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。
    而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter(网络过滤器)

1.2 内核空间中选择了5个位置:
    1.内核空间中:从一个网络接口进来,到另一个网络接口去的
    2.数据包从内核流入用户空间的
    3.数据包从用户空间流出的
    4.进入/离开本机的外网接口
    5.进入/离开本机的内网接口
   
2. iptables的工作机制

2.1 iptables/netfilter软件:

    是实现主机或网络包过滤防火墙,其中iptables是位于用户空间的命令行程序,用于生成规则送往内核中的netfilter之上。
netfilter位于内核中tcp/ip协议栈上的一个防火墙框架framework;5个钩子函数。

2.2 netfilter:(hook function --> 钩子函数)

    1.prerouting    (路由前)
    2.input         (数据包流入口)
    3.forward        (转发关卡)
    4.output         (数据包出口)
    5.postrouting    (路由后)
   
2.3 iptables:(chain--> 链) 5

    1.PREROUTING    (路由前)
    2.INPUT            (数据包入口)
    3.FORWARD        (数据包转发)
    4.OUTPUT        (数据包出口)
    5.POSTROUTING    (路由后)
        
3.iptables防火墙策略   
        
3.1 tables:功能--> 表 4

    1.filter:过滤,防火墙。
    2.nat:network address translation(网络地址转发),用于修改报文的源地址或目标地址,甚至是端口。
    3.mangle:拆解报文,做出修改,并重新封装起来。
    4.raw:关闭nat表上启用的连接追踪机制。
   
优先级次序(由高而低):
                4.raw --> 3.mangle --> 2.nat --> 1.filter
   
3.2 功能<-->钩子<==>表<-->链 对应关系:

    4.raw:PREROUTING-->路由后,OUTPUT-->流出
    3.mangle:PREROUTING-->路由前,INPUT-->数据包入口,FORWARD-->转发,OUTPUT-->出口,POSTROUTING-->路由后
    2.nat:PREROUTING-->路由前,INPUT--数据包入口,OUTPUT-->出口,POSTRUTING-->路由后
    1.filter:INPUT-->数据包入口,FORWARD-->转发,OUTPUT--出口
            
3.3 报文流向:

    1.到本机某进程的报文:PREROUTING --> INPUT
    2.由本转发的报文:PREROUTING --> FORWARD --> POSTROUTING
    3.由本机某进程发出的:OUTPUT --> POSTROUTING   
        
3.4 规则的组成的部分:

    1.匹配条件
    2.网络层首部属性值 IP 首部数据包
    3.传输层首部属性值 TCP 首部数据包
    4.附加的条件
    5.处理动作
               
3.5 TCP/IP协议栈:

    1.数据链接层:物理到物理设备之间的通信;(MAC,Media Access Control)
    2.网络层:源主机到目标主机之间的通信 IP
    3.传输层:进程到进程之间的通信 TCP UDP
      
注意:
    1.CentOS 5/6:iptables命令编写规则;
    2.CentOS 7:firewalld;  使用需要关闭firewalld:systemctl disable firewalld.service
    3.规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的.
   
            
4. iptables规则写法

4.1 规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,就由规则后面指明的处理动作进行处理;
    匹配条件:
            基本匹配条件:简单检查IP、TCP、UDP等报文的某属性进行匹配的机制;                    
            扩展匹配条件:需要借助于扩展模块进行的匹配条件指定即为扩展匹配;
    处理动作:
            基本动作:ACCEPT,DROP, ...
            扩展动作:需要借助扩展模块进行的动作;
               
4.2 添加规则之时需要考量的问题:

    1.报文的流经路径,判断添加规则至哪个链上。
    2.确定要实现的功能,判断添加规则至哪个表上。
    3.要指定的匹配条件,以用于匹配目标报文。
           
三、iptables命令详解

3.1 iptables命令的使用格式:
   
    iptables [-t table] {-A|-C|-D} chain rule-specification
        
    ip6tables [-t table] {-A|-C|-D} chain rule-specification

    iptables [-t table] -I chain [rulenum] rule-specification

    iptables [-t table] -R chain rulenum rule-specification

    iptables [-t table] -D chain rulenum

    iptables [-t table] -S [chain [rulenum]]

    iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

    iptables [-t table] -N chain

    iptables [-t table] -X [chain]

    iptables [-t table] -P chain target

    iptables [-t table] -E old-chain-name new-chain-name

        rule-specification规则 = [matches...] [target]

        match匹配 = -m matchname [per-match-options]

        target目标 = -j targetname [per-target-options]
        
3.2 规则的编写格式:

    iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
                    
1) -t table:
   
    默认为filter;其它可用的有raw, mangle, nat;
   
2) COMMAND:
    chain链:
    -P:policy ['p

运维网声明 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-250178-1-1.html 上篇帖子: CentOS yum 替换掉 Redhat yum 下篇帖子: centos7使用imagemagick的convert命令压缩图片脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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