iptables

一、机制

部队大院、高档私人住宅区都是在一个被保护起来的范围内,要想进入只能从各个大门进入,在进入的时候还在门口出示证件、或者是指纹识别、或者是保安身份认证等,只有通过了这些检查才能进入到大院、住宅区内部。

Linux系统也是这么一个大院,netfilter就是这个大院的围墙,preroutinginputoutputforwardpostrouting就是南大门、北大门、西大门、东大门、西南门。要想从这几个门进入到内部来,就得过门禁。但是每大门上的门禁制度和方法不一样,raw(刷指纹)mangle(打卡)filter(出示有效证件)nat(保安确认)

于是便有了哪些门禁制度制用在哪些大门上的事情了。

南大门(prerouting,可以通过刷指纹(raw)、mangle(打卡)、保安确认(nat)其中的一种便可以进入。

其他大门上也各有各的门禁制度,这些大门被称为链(chain)、这些门禁制度被称为表(tables).

具体分布如下图:

11.png

需要说明的是,这是centos6.x系列的,7.x系列的input链增加了nat

报文的流向可以分为以下三种情况:                                    

到本机某进程的报文:PREROUTING –> INPUT                                     

由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING                              

由本机的某进程发出报文:OUTPUT –> POSTROUTING

  

二、对链的操作

总结起来就是:增、删、改、查

 

iptables  -t 表名 {-E,-F,-N,-P,-X,-Z} 链名

  -P定义链的默认策略;其target一般可使用ACCEPTDROP

  举例:iptables   -P  INPUT  drop   iptables   -t  nat  -P  INPUT  drop

  -N自定义规则链;仅在默认链通过某规则进行调用方可生效;因此,每个自定义链都有其引用记数;

实例:iptables  –t  表名 –N  链名(自己定义的链的链名)

  -X只能删除自定义的空的引用计数为0的链;

实例:iptables  -t 表名  -X 链(名)

  -F清空指定的链,或删除指定链上的规则;

实例:iptables –t 表名 –F 链名或者是链名 规则编号

  -E重命名自定义的引用计数为0的链;

实例:iptables –t 表名 –E 旧的链名 新的链名

 -Z清空所有链或指定链上的计数器或者是指定链上的指定规则的计算器

实例:iptables –t 表名 –Z [链名或链名 规则编号]

三、对表的操作

处理动作也可以总结为:增、删、改、查

4个参数

iptables  -t 表名 {-A,-D,-I,-R} 链名  其他操作à固定格式 不加-t 表名 默认 –t  filter

 

  -A追加规则到指定的链尾部;

  实例:iptables  -t 表名 –A 链名  规则定义à追加到链尾部

  -I插入规则到指定的链中的指定位置,默认为链首;

  实例:iptables  -t  表名  -I  链名 规则编号 规则定义 à指定插入到链的指定位置

当规则编号不写的时候表示插入成为第一行

  -D删除指定的链上的指定规则;

  实例:iptables  –t  表名  -D 链名  规则定义

  实例:iptables  –t  表名  -D 链名  规则编号

  -R将指定的链上的指定规则替换为新的规则;

  实例:iptables  –t 表名  -R 链名 规则编号  规则定义—>就是规则修改,但是修改太麻烦,于是直接替换   

 

 

PS:一个链和表结合的查看的命令                          

查看

 -Llist, iptables [-t table] -L [chain [rulenum]] [options…]

   -n:数字格式;

   – v:详细格式信息;                                                       -vv, -vvv :v的个数越多显示信息越详细

    –line-numbers:显示链上的规则的编号;

    -xexactly,显示计数器的精确值;不做取整处理

实例:iptables  –t 表名  -vnL     iptables –t 表名 –vnL  链名 规则编号

一般的 –L 要和-n组合使用的

   计数器:

  每条规则以及链的默认策略分别有各自的两个计数器:

    (1) 匹配到的报文的个数:pkts

    (2) 匹配到的所有报文的大小之积:bytes

[root@localhoast ~]# iptables –nvL

Chain INPUT (policy ACCEPT 4538 packets, 454K bytes)第一个是报文个数 第二个是报文的大小

 pkts bytes target     prot opt in     out     source               destination

 

四、对iptables规则的制定操作

固定的格式

iptables  -t 表名  大写字母的命令 链名  匹配标准 -j 目标(规则)

匹配条件的分类:

   基本匹配条件

   扩展匹配条件

   隐式扩展

   显式扩展

基本匹配条件

前面的!表示取反 包括:源、目标ip、网卡名称、协议名称

    -s指定一个源ip的范围   不写-s就表示所有的ip  

    实例:iptable  -t 表名 –A 链名 -s 192.168.2.0/24

   匹配指定主机之外的地址。
   #iptables -A FORWARD -s !192.168.0.19

    -d指定一个目标ip的范围  不写-d表示所有的ip

    -p:检查报文中传输层的协议类型,支持tcp, udp,  udplite, icmp,  icmpv6,esp,  ah, sctp, mh,或者 "all"

   实例:iptables –t表名 –A  链名 -p  协议名

    iptables  -t 表名 -A 链名 -p !协议名à除了这个协议之外的全部的协议

    -i:检查报文进入本机时的接口是否符合本处指定的接口;INPUT, FORWARD  and  PREROUTING

实例:iptables –t 表名 –A 链名 –i  网卡名称

    -o:检查报文即将离开本机时经由的接口是否符合本处指定的接口;FORWARD, OUTPUT and POSTROUTING

实例:iptables –t 表名 –A 链名 –o  网卡名称                

    -m:显式指明要使用的扩展模块;

    -j:跳转目标;

扩展匹配条件

 调用netfilter额外模块实现特殊检查机制,(使用到相关功能,要使用iptables命令的-m选项来指定调用哪个模块)

   隐式扩展:

      -p tcp [-m tcp]

      –sport PORT[-PORT]

      –dport

      –tcp-flag 要检查标志位列表(用逗号分隔)  必须为1的标志位列表(逗号分隔)

      -p icmp [-m icmp]

     –icmp-type

       0: echo-reply, ping响应

       8: echo-request, ping请求

iptables -t filter -A INPUT -p icmp –icmp-type 8 -j DROP                        

iptables -t filter -A INPUT -p tcp –tcp-flags syn,ack,rst,fin syn -j DROP               

iptables -t filter -A INPUT -p tcp –dport 80 –tcp-flags all none -j DROP

     显式扩展:

       -m 扩展模块名称

      模块:iptablesnetfilter各拥有一部分代码

       multiport: 多端口匹配,可用于匹配非连续或连续端口;最多指定15个端口;

        –source-ports, –sports port[,port,port:port]

        –destination-ports, –dports

        –ports

iptables -I INPUT -d 192.168.19.128 -p tcp -m multiport –dports 22,80 -j ACCEPT           

iptables -I OUTPUT -s 192.168.19.128 -p tcp -m multiport –ports 22,80 -j ACCEPT

  iprange: 匹配指定范围内的地址,匹配一段连续的地址而非整个网络时有用;

    [!] –src-ragne IP[-IP]

    [!] –dst-range

iptables -A INPUT -d 192.168.19.128 -p tcp –dport 23 -m iprange –src-range 192.168.19.129-192.168.19.135 -j ACCEPT                  

iptables -A OUTPUT -s 192.168.19.128 -p tcp –sport 23 -m iprange –dst-range 192.168.19.129-192.168.19.135 -j ACCEPT

   string: 字符串匹配,能够检测报文应用层中的字符串

     –algo {kmp|bm}

     –string "STRING"

     –hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;

  iptables -I OUTPUT -m string –algo bm –string "sex" -j DROP

    time: 基于时间做访问控制

     –datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

     –datestop

     –timestart hh:mm[:ss]

     –timestop hh:mm[:ss]

     –weekdays day[,day]

iptables -I INPUT -d 192.168.19.128 -p tcp –dport 80 -m time –timestart 08:20 –timestop 18:00 –weekdays Mon,Tue,Thu,Fri -j REJECT

    connlimit: 连接数限制,对每IP所能够发起并发连接数做限制;

      [!] –connlimit-above 

iptables -A INPUT -d 172.16.100.7 -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP

    limit: 速率限制

     –limit n[/second|/minute|/hour|/day]

     –limit-burst n

iptables -A INPUT -d 192.168.19.128 -p icmp –icmp-type 8 -m limit –limit 20/minute –limit-burst 5 -j ACCEPT

    state: 状态检查

     –state 连接追踪中的状态:

      NEW: 新建立一个会话

      ESTABLISHED:已建立的连接

      RELATED: 有关联关系的连接

      INVALID: 无法识别的连接

iptables -t filter -A OUTPUT -p tcp –sport 22 -m state –state NEW -j DROP 

   放行被动模式下的FTP服务:

    1、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

    模块:nf_conntrack_ftp

modprobe nf_conntrack_ftp                                    

lsmod | grep nf_conntrack_ftp                            

nf_conntrack_ftp       12913  0                             

nf_conntrack                            

79758  3 nf_conntrack_ftp,nf_conntrack_ipv6,xt_state

    2、放行请求报文:

   1)放行NEW状态对21端口请求的报文;

    iptables -A INPUT -p tcp –dport 21 -m –state NEW -j ACCEPT

    (2) 放行ESTABLISHED以及RELATED状态的报文

    iptables -A INPUT -m –state ESTABLISHED,RELATED -j ACCEPT

    3、放行响应报文:

    (1) 放行ESTABLISHED以及RELATED状态的报文

    iptables -A OUTPUT -m –state ESTABLISHED,RELATED -j ACCEPT

   由于系统对调整连接追踪功能所能容纳的连接有最大数目,视具体清空调整最大连接数目,或者不启用此功能

    cat /proc/sys/net/nf_conntrack_max

    65536

   其中当前追踪的所有连接在/proc/net/nf_conntrack

    /proc/net/nf_conntrack

  不同协议或连接类型追踪时的属性,/proc/sys/net/netfilter目录:

   TARGET -j target

  ACCEPT, REJECT, DROP, SNAT, DNAT, MASQERADE, RETURN, LOG, REDIRECT, MARK

    SNAT

    –to-source SIP

    DNAT

   –to-destination

iptables -t nat -A POSTROUTING -p tcp –dport 23210 -j SNAT –to-source 192.168.19.129       

iptables -t nat -A PREROUTING -p tcp –dport 23220 -j DNAT –to-destination 192.168.19.129     

iptables -A INPUT -d 192.168.19.128 -p tcp –dport 80 -j LOG –log-prefix "from iptables: 

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

(0)
hanlln1hanlln1
上一篇 2017-01-13
下一篇 2017-01-13

相关推荐

  • lvs-dr

            通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;     VIP通常配置在lo:0…

    2017-06-29
  • linux入门及基本命令

    Linux的入门及基本命令     一.   磁盘分区 1.       分区类型 主分区:1-4,一个硬盘最多四个,最少可以没有,前提有别的硬盘存在,启动系统或存数据,不要再分小区,只有个活动状态。 2.    &nb…

    Linux干货 2017-07-15
  • 正则表达式的概念和用法

    概念 正则表达式是对字符串操作的一种逻辑表达方式,很多情况下我们需要在茫众多的文件中找到我们需要的文件时,就需要用到正则表达式了 正则表达式就如同一个过滤器,能够筛选出希望得到的字符串。它可以检索、替换符合我们自己规定格式的所有文本。 正则表达式分两类: 基本正则表达式 扩展正则表达式 正则表达式的用法和选项 在Linux中,正则表达式通常会配合文本过滤工具…

    2017-06-10
  • 路由以及实验

    路由 路由(routing)是指分组从源到目的地时,决定端到路径的网络范围的进程。路由工作在OSI模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。路由器可以支持多种协议,但绝大多数使用的是TCP/IP协议。路由器通常连接两个或者多个由IP子网或者点到点协议表示的逻辑端口,至少拥有1个物理端口。路由器根据收到数据包中的网络层地址以及路…

    Linux干货 2017-05-11
  • DNS服务器类型及查询过程

    什么是DNS   DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。 DNS域名称   域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,…

    Linux干货 2017-02-08
  • SSH会话劫持实现端口转发

    在进行渗透测试时,我们有时候会碰到搭建的测试环境、产品服务器、DMZ或者其他类似的机器群的情况,这时我们完全可以把它们看作跳板。这些系统被设计成对外交互的接口,这时候我们考虑对其他域里的用户进行SSH会话劫持是个不错的选择。 那么如果你拥有了某一个跳板的控制权限,想要通过另一个域的用户对远程域进行访问会怎么办呢?当然,这时候你是没有密码、密钥的,你不能抛弃二…

    系统运维 2015-03-23