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

相关推荐

  • Linux之文件管理命令

      Linux文件管理类命令 Linux一切皆文件,所以熟悉文件管理命令对我们来说至关重要 文件查看命令 cat命令:文本文件查看工具 命令用法:         cat [OPTION]… [FILE]… 常用选项:  &nbsp…

    Linux干货 2016-11-04
  • 文本处理三兄弟(grep,sed,awk)

    linux文本处理三剑客: grep:文本过滤工具 grep  egrep=grep -e  fgrep sed:流编辑器  处理多个行  awk:文本编辑工具,格式化工具 grep [OPTIONS] PATTERN [FILE…] : 文本处理搜索工具,根据用户指定的“模式”对目标文本进行匹配检查;打印匹…

    Linux干货 2017-04-01
  • Hadoop集群配置(最全面总结)

    通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves\ 官方地址:(http://hadoop.apache.org/common/docs/r0.19.2/cn/cluster_setup.ht…

    Linux干货 2015-04-13
  • LVS+keepalived高可用web集群搭建的疑惑

    参考文章是这一份:http://ox0spy.github.io/debian/2014/06/26/setup-lvs-and-keepalived-on-debian/ 一:操作系统与ip               ip地址形式:19…

    Linux干货 2016-02-14
  • Linux系统上命令的使用格式与十二个常用命令详解

    Linux系统上命令的使用格式 命令的语法通用格式: ~]# COMMAND OPTIONS ARGUMENTS 例如: ls -ld /var COMMAND(命令): ls ls命令用来显示目标列表 OPTIONS(选项): -ld -ld 是 -l -d 的简写 -l 以详细格式列表 -d 仅列目录 ARGUMENTS(参数): /var 命令对这个/…

    2018-02-26
  • 字符串切片和yum的用法和rpm的编译安装

    1、冒泡法对数组内数据排序 2、源码安装http2.2.29     1.配置/etc/yum.repos.d/base.repo              2.安装group组:Development too…

    Linux干货 2016-08-30