iptables 补充本

浅谈iptables
一 什么是iptables
iptables 是工作在内核之上的netfilter框架的前端工具(iptables是netfilter的管理工具这样说也不为过)
Firewall:隔离工具,工作于主机或网络的边缘处,对经由的报文根据预先定义的规则(识别标准)进行检测,对于能够被规则匹配到的报文实行某种预定义的处理机制的一套组件;
 硬件防火墙:在硬件级别实现部分功能的;
 软件防火墙:应用软件逻辑在通用硬件基础上实现;
常说的iptables一共有四张表和五条链   就是人们俗称的四表五链 其实iptables并不是只有四张表只是有一个不常用而已既然不常用鄙人也就不再赘述。
netfilter五链
        prerouting  (入路由前规则) 在对数据包作路由选择之前,应用此链中的规则,如DNA
   input       (入主机前规则) 当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则
forward     (转发前规则)   当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。
output      (出主机前规则) 当防火墙本机向发送数据包(出站时),应用此链中规则。
postrouting (出路由前规则) 在对数据包作路由选择之后,应用此链中的规则,如SNAT
netfilter四表
        filter: 包过滤(用途最多的表netfilter防火功能最直观的表)
NAT:    地址转换表(常用作地址转换,例如:DNAT SNAT等)
mangle: 拆解报文,做出修改,而后重新封装(对报文打标记,或更改TOS TTL等值)
raw:    关闭nat表上启用的连接追踪机制(因为raw表的优先级是最高的通过匹配raw表的规则可以跳过nat表规则从而实现减轻nat链接追踪的负载)

每张表上所对应的功能
filter:input, forward, output
主要用于对数据包进行过滤,根据具体规则决定是否放行该数据包(如DROP/ACCEPT/REJECT/LOG)。filter表对应的内核模块为iptable_filter,包含三个规则链:
INPUT 链:INPUT针对哪些目的地是本地的包
FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只负责转发)的包
OUTPUT链:OUTPUT是用来过滤所有本地生成的包
nat:prerouting, input, output, postrouting
主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包只会经过这个表一次。如果第一个包被允许经做NAT或Masqueraded,那么余下的包会自动被做相同的动作,也就是说,余下的包不会再通过这个表(因为包的大小限制导致数据可能会自动地做相同的操作)。表对应的内核模块为iptable_nat,包含三个链:
PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址
    OUTPUT链:改变本地产生的包的目的地址
    POSTROUTING链:在包就要离开防火墙之前改变其源地址
mangle:prerouting, input, forward, output, postrouting
    主要用于修改数据包的TOS、TTL以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
raw:prerouting, output
主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链 OUTPUT、PREROUTING
iptables的四种状态追踪机制  
    NEW:该包想要开始一个连接(重新连接或连接重定向)
RELATED:该包是属于某个已经建立的新连接。例如:FTP的数据传输连接就是控制连接所RELATED出来的连接。–icmp-type 0(ping应答)就是–icmp-type 8(ping请求)锁RELATED出来的
ESTABLISHED:只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接后续数据包
INVALID:数据包不能被识别属于哪个连接或者没有任何状态比如内存溢出、收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据
添加规则时需要考量的因素:
(1) 实现的功能:用于判定将规则添加至哪个表;
(2) 报文的流经位置:用于判断将规则添加至哪个链;
(3) 报文的流向:判定规则中何为”源“,何为”目标“;
(4) 匹配条件:用于编写正确的匹配规则;
(a) 专用于某种应用的同类规则,匹配范围小的放前面;
(b) 专用于某些应用的不同类规则,匹配到的可能性较多的放前面;同一类别的规则可使用自定义链单独存放;
(c) 用于通用目的的规则放前面;
同类规则 匹配范围小的放前面
不同类别规则 访问量大的放前面
nat表会自动开启连接追踪功能
LOG要放在accept或DROP之前

iptables数据包的流向
    client–>INTERNET–>server{raw(PREROUTING)–>mangle(PREROUTING)–>nat(PREROUTING)–>[主机路由]–↓到这里要分两种情况
    1.经过本机路由后目的地址是本机的–>{mangle(INPUT)–>filter(INPUT)–>本地主机进程–>[路由选择(到达本机的OUTPUT链或跳过OUTPUT链直接到达POSTROUTING链)]}
        直接到达本机的OUTPUT链的比较常见   直接到达本机的POSTROUTING链的比较少(例如:lvs的实现都是从INPUT链进行修改然后直接路由到POSTROUTING链)
        到达的是本机OUTPUT的–>{raw(OUTPUT)–>mangle(OUTPUT)–>filter(OUTPUT)–>[路由选择(查看本机的路由表找到出口)]–>mangle(POSTROUTING)–>nat(POSTROUTING)}–>(WAN/LAN)
    2.经过本机路由后目的地址是其他主机的–{mangle(FORWARD)–>nat(FORWARD)–>filter{FORWARD}–>[路由选择(查看本机的路由表找到出口)]–>mangle(POSTROUTING)–>nat(POSTROUTING)}–>(WAN/LAN)
    
iptables中4个表的优先级由高到低的顺序为:raw–>mangle–>nat–>filter
1.raw表
    raw表只工作在netfilter框架中的PREROUTING和OUTPUT链上
    在PREROUTING链上工作着raw表mangle表和nat表
    在PREROUTING链上raw表的优先级是最好的所以先匹配raw表之后才会匹配其他表的规则
    raw的使用场景  用户使用了raw表 在某个链上 raw表处理完后 将跳过nat表和ip_conntrack处理 即不再做地址转换和数据包的状态链接跟踪处理了
    例如高访问量的web网站服务器的nat地址追踪表示无法满足这么巨大的访问量可以在PREROUTING链上设置规则如果目的端口是80端口可以直接跳过nat地址追踪(前提后端的服务器使用的是公网地址)
    iptables -t raw -A PREROUTING -d 1.1.1.1 -p tcp –dport 80 -j NOTRACK  这条规则匹配的是  如果目的端口是80的且目的主机是1.1.1.1到跳过链接地址追踪
    iptables -t raw -A PREROUTING -s 1.1.1.1 -p tcp –sport 80 -j NOTRACK                   如果源地址是1.1.1.1且源端口是80的主机跳过链接地址追踪
    iptables -t filter -A FORWARD -m state –state UNTRACKED -j ACCEPT                      对于在PREROUTIGN链上没有追踪的链接直接转发
2.mangle表
    iptables -A PREROUTING -t mangle -p tcp –dport telnet -j TOS –set-tos TOS_value
mangle表工作在netfilter的5个链上
1 Minimize-Delay 16 (0x10),要求找一条路径使延时最小,一些标准服务如telnet、SSH、FTP- control 就需要这个选项。
2 Maximize-Throughput 8 (0x08),要求找一条路径能使吞吐量最大,标准服务FTP-data能用到这个。
3 Maximize-Reliability 4 (0x04),要求找一条路径能使可靠性最高,使用它的有BOOTP和TFTP。
4 Minimize-Cost 2 (0x02),要求找一条路径能使费用最低,一般情况下使用这个选项的是一些视频音 频 流协议,如RTSP(Real Time Stream Control Protocol)。
5 Normal-Service 0 (0x00),一般服务,没有什么特殊要求。这个值也是大部分包的缺省值。
mangle表可以直接修改数据包的TOS和TTL
mangle表对链接或数据包打标记
     -j connmark
    选项 功能
    –set-mark value[/mask] 给链接跟踪记录打标记。
    –save-mark [–mask mask] 将数据包上的标记值记录到链接跟踪记录上
    –restore-mark [–mask mask] 重新设置数据包的nfmark值。
    -j mark
    选项 功能
    –set-mark value 设置数据包的nfmark值。
    –and-mark value 数据包的nfmark值和value进行按位与运算。
    –or-mark value 数据包的nfmark值和value进行按或与运算。
mangle表修改ttl值
    iptables -A OUTPUT -m ttl –ttl 60
3.nat表 iptables -t nat 的任何操作都会触发链接追踪功能
    gateway不建议打开自动追踪功能,如打开,要把内核空间调大
    /proc/net/nf_conntrack:记录了已追踪到的链接
    /proc/sys/net/nf_conntrack_max定义了能追踪的最大连接数
    /proc/sys/net/netfilter/ :该目录下有各种超时时间的的限定文件
    对目的地址进行转换
    -j DNAT –to-destination [ipaddr[-ipaddr]][:port[-port]]
    对源地址进行转换
    -j SNAT –to-source [ipaddr[-ipaddr]]
    MASQUERADE
    SNAT场景中应用于POSTROUTING链上的规则实现源地址转换 但外网地址不固定时 使用此target

4.filter表
    -j DROP 对匹配到的数据包执行丢弃操作
    -j REJECT 对匹配到的数据包执行拒绝操作
    -j ACCEPT 对匹配到的数据包执行通过操作
    filter网上能找到的太多   这里就不再赘述了  这个表也是最常用的表

原创文章,作者:wode,如若转载,请注明出处:http://www.178linux.com/75873

(0)
wodewode
上一篇 2017-05-15
下一篇 2017-05-15

相关推荐

  • DNS and Bind

    DNS and Bind      DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作。为什么需要将主机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名。而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完…

    Linux干货 2017-06-01
  • OpenSSL 的使用

    OpenSSL 是一个开源项目,其组成主要包括一下三个组件:     openssl:多用途的命令行工具     libcrypto:加密算法库     libssl:加密模块应用库,实现了ssl及tls openssl可以实现:秘钥证书管…

    Linux干货 2017-06-07
  • 文件的权限管理

    提问:可执行文件的标准格式是什么?     Linux下面,目标文件、共享对象文件、可执行文件都是使用ELF文件格式来存储的。程序经过编译之后会输出目标文件,然后经过链接可以产生可执行文件或者共享对象文件。Linux下面使用的ELF文件和Windows操作系统使用的PE文件都是从Unix系统的COFF文件格式演化来的。…

    Linux干货 2016-11-23
  • 用户、组、权限和修改

    用户、组和权限     普通用户 1–65535     系统用户  系统已经已经存在专门用来对系统服务或者系统资源进行管理的               1…

    Linux干货 2017-04-04
  • btrfs初步应用

    前言 一种技术要知其然,还要知其所以然。 Btrfs文件系统 Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在Linux操作系统,采用GPL授权。Oracle于2007年对外宣布这项计划,并发布源代码,在2014年8月发布稳定版目标是替换Linux目前的ex…

    Linux干货 2016-05-22
  • 加密算法、https、dns(主从、视图)

    第九周 2018/1/29

    2018-01-29