iptables:是一种防火墙软件。是用来设置、维护和检查Linux内核的IP包过滤规则的。其可以定义不同的表,每个表都包含几个内部的链,也能包含用户自定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则则指定应当如何处理与之相匹配的包.防火墙的规则则指定所检查包的特征和目标。如果不匹配,将送往该链中吓一跳规则检查;如果匹配那么下一条规则则有目标值确定。该目标值可以是用户定义的链名或者是某个专用值,如:ACCEPT(接受),DROP(阻止),REJECT(拒绝)

iptables的命令格式:
  iptables [-t TABLE] COMMAND CHAINS(链) [creteria匹配条件] -j ACTION 
      -t TABKE 指定表名 ,有时可以不需要添加表名  其中表有4个:filter、mangle、nat、raw   优先级为:raw > mangle > nat > filter
      COMMAND  所需要的命令规则
      CHAINS  指定链名,其中链有5个:INput、OUTput、FORword、PRERouting、POSRrouting
      cerateria  指定所需要的匹配条件,有时也可以不需要指定
      -j ACTION  指定所需跳转的类型

 其中COMMAND又分以下两类:

  •   规则管理类

   -A  :append 附加,添加
   -I N:插入到第几条,-I后面跟数字,如 -I 3,意思是插入第三条
   -D N: 删除第几条,-D后面跟数字,如 -D 4,意思是删除第四条
   -R N:替换第几条,-R后面跟数字,如 -R 5,意思是将第五条替换掉
  链接管理类:
   -F :flush,清空链
   -N : new,新建链 如:#iptables -N easy,建一条名为esay的这条链
   -X :delete,删除自定义的空链
   -E :rename,重命名
  默认策略
   -P :policy
  清空计数器:
   -Z :zero
   其中每条规则(包括默认策略)都有两个计数器:
      被此规则匹配到的所有数据包的个数
      被此规则匹配到的所有数据包的大小之和

  •   查看类:

     -L :list  显示所有链 如 #iptables -L 列出所有链上的规则
         -L也可以和-n、-v、-x、--line-numbers
     -n :numeric 数字  如 #iptables -t filter -L -n -v
     -v :verbose 详细信息 v越多,就表示列出的信息越详细,-vv,-vvv
     -x :exactly 精确的 
     --line-numbers 将所列出的链以按编号显示处理

匹配条件:
    1.基本(通用)匹配:
    -s SOURTCE:IP :源地址,可以是主机名、网络名和清楚的IP地址  如 -s 192.168.130.130/24
    -d DESTINATION :目标地址  如 -d 192.168.130.1
    -p {tcp|udp|icmp} :指定协议,可指定的有三种协议:tcp,udp,icmp
    -i :数据包的流入接口  与INPUT、FORWARD、PREROUTING有关
    -o :数据包的流出接口  与OUTPUT、FORWARD、POSTROUTING有关
  2.扩展匹配:
    -m :调用iptables的模块,以便扩展iptables的匹配功能
    扩展匹配又分为隐含扩展和显示扩展:
     2.1.隐含扩展:
      -p tcp :指定tcp协议
           --sport PORT :指定源端口   如 ip tcp --sport 23
           --dport PORT :知道目标端口
           --tcp-flags :tcp的标志位
      -p udp :指定udp协议
           --sport PORT 指定源端口
           --dport PORT 指定目标端口
      -p icmp :指定icmp协议
           --icmp-type :指定icmp的类型(8、0、3)  如 ip icmp --icmp-type 8
           8 :echo-request ping请求
           0 :echo-repiy 响应
           3 : 表示ping不通
    2.2.显示扩展:
     -m state --state NEW 状态检测
       有四种状态:NEW新建,ESTABLISHED建立连接,INVALID无效的,RELATED有关联的 如: -m state --state ESTABLISHED 
      -m multiport :多端口指定
      --source-prots :指定源端口,可以指定多端口  如:-m multiport --source-ports22,53,80
      --destina-ports :指定目标端口,可以指定多端口
      --ports :任何端口
      -m iprange   指定ip范围  如:-m iprange --src-range 172.16.100.10-172.16.100.20
      --src-range  源地址
      --dst-range  目标地址
   如:#iptables -A INPUR -m iprange --src-range 172.16.100.10-172.16.100-.20 -p tcp --dport 23 -m srate --state NEW -j ACCEPT
      -m limit 限定数据包的速率:
      --limit rate(速率) 可赋的值有'/second', '/minute', '/hour', or '/day'这样的单位,默认是3/hour。  如:-m limit --limit 2/second  每秒2个
      --limit-burst number  待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1,默认值为5。如:-m limit --limit-burst  
      -m string :字符串匹配
      --algo bm|kmp :比较算法
      --string "字符串" : 如:-m string --algo kmp --string "game" 包含game的
      -m rime :时间限定
      --timestart value    如:-m time --timestart 18:00 -j DORP 到18点的时间开始拒绝
      --days listofdays
-j  :跳转
    ACCEPT  接受
    DROP    拒绝
    REJECT  拒绝(强硬)
    SNAT --to -source IP         源地址转换    如:-j SNAT --to -source 192.168.130.120(目标地址)
    DNAT --to-destination IP[:端口]  目标地址转换 如果请求的端口和目标地址端口不一样则要加上端口
       如源地址端口为80端口,目标地址端口为8080,则 -j DNAT --to-destination 192.168.130.120:8080