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)
上一篇 2017-05-15 21:54
下一篇 2017-05-15 22:19

相关推荐

  • shell脚本编程基础(1)

    一.位置变量相关知识     1.位置变量定义:在脚本代码中调用通过命令行传递给脚本的的参数     2.位置变量种类:              &…

    Linux干货 2016-08-15
  • N26-第九周作业-邢岩

    马哥门徒-N26-邢岩 相信自己、勤奋努力、不断总结!shell脚本练习需要重复、重复、再重复!那么,我就继续来写、写、写。 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #******************************…

    Linux干货 2017-04-03
  • linux多网口绑定

    LINUX多网卡绑定同一IP(BOND): 常用的有三种 mode=0:轮转策略,有自动备援,但需要”Switch”支援及设定。 mode=1:活动-备份模式,其中一条线若断线,其他线路将会自动备援。 mode=3:广播模式,有自动备援,不必”Switch”支援及设定 mode0模式:需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options …

    2017-07-03
  • 笔记三、如何在VMWare Workstation中安装CentOS 7

    一、准备工作     1.1 安装VMWare WorkStatrion     1.2 准备好CentOS 7 镜像包     http://www.centoscn.com/CentosSoft/iso/    CenOS7下载地址 二…

    2017-02-23
  • 文件权限

    普通文件 r: 可以读取文件的内容 w: 可以修改文件的内容 x: 可以执行该文件 执行脚本(不要随便给文件加x权限) 目录文件 r: 用户可以列出目录下有哪些文件(不能查看文件的详细信息) w: 只有w无意义。 x: 用户可以进入该目录(如果知道文件名,且有相对应的文件权限 ,可以执行对应的操作) 权限一般配合使用,不同权限配合有不同效果 rx: 用户可以…

    2017-07-30
  • 文件管理命令及通配符练习

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例 按增删改查的思路来 增: touch filename:这个命令本身不是用来新建文件的,它是用来修改文件的时间属性,不过默认情况时当filename不存在时,它会默认建立一个空文件 mkdir: 常用参数 -p:相当于递归创建目录 -v:显示出创建过程中的信息 cp : 常用参数 -r:…

    Linux干货 2016-11-06