服务脚本: /etc/rc.d/init.d/iptables
 脚本配置文件:/etc/sysconfig/iptables-config

service iptables {status|start|stop|restart|save}
 
规则的保存位置:/etc/sysconfig/iptables
首先要创建/etc/sysconfig/iptables然后再启动
若想保存规则 使用命令service iptables save

语法格式:

iptables [-t TABLE] COMMAND CHAIN [CRETIRIA] -j ACTION

-t 
      raw
      mangle
      nat
      filter:

-t TABLE也可以省略,默认为filter
如果有多个表时,执行顺序依次为raw,mangle,nat,filter

COMMAND:对链,或者对链中的规则进行管理操作
链中规则:
 -A  追加一条规则
 -I #  插入一条规则 后加数字表示插入为第几条
 -R # 替换第几条
 -D #   删除第几条规则 
链:
 -N: 新建一个自定义链
 -X: 删除一个自定义的空链
 -E:重命名一条自定义链
 -F: 清空指定链,如果不指定链,则清空整个表中的所有链
 -P: 设定链的默认策略
 -Z: 置零 (每条规则,包括默认策略都有两个计数器:一个是被本规则匹配到的所有数据包的个数;另一个是被本规则匹配到的所有数据包的大小之和);
 
查看:
 -L: 查看
  -v
  -vv
  -vvv
  --line-numbers
  -x:计数器的精确值(不做单位换算)
  -n: 显示数字地址(不对地址和端口做反解)

匹配条件:
通用匹配
 -s  指定源IP或者源网络
 -d 指定目标IP或者目标网络
  网络地址和目标地址前均可用“!”取反
 -p {icmp|tcp|udp}指明协议类型
 -i IN_INTERFACE  数据包的流入接口
 -o OUT_INTERFACE 数据包流出的接口
 
扩展匹配
 隐式扩展
  -p tcp  
   --sport PORT[-PORT2] 源端口
   --dport PORT[-PORT2] 目标端口
   --tcp-flags SYN,ACK,RST,FIN SYN 
      ,前表示要检查的标志位 ,其后为 必须为1的位
   --syn      --tcp-flags SYN,ACK,RST,FIN SYN 的简写
  -p udp
   --sport
   --dport
  -p icmp
   --icmp-type
    0: echo-reply 响应报文
    8: echo-request 请求报文
 显式扩展:
  netfilter扩展模块引入的扩展,用于扩展匹配条件,通常需要额外专用选项来定义
  -m state: 用于实现连接的状态检测
   --state
    NEW(新发起连接), ESTABLISHED(已建立连接)
    RELATED, INVALID(非法的、无法识别的、无效的连接)

  -m multiport 同时指定多个端口号,中间用逗号隔开
   --source-ports
   --destination-ports
   --ports

以下用法示例,本机IP:192.168.0.6,外部IP:192.168.0.7

[root@localhost ~]# iptables -L -n 查看已制定规则
[root@localhost ~]# iptables -L -n -t nat 查看nat表
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.0.7 -p icmp --icmp-type 8 -j DROP #INPUT DROP 必须大写 拒绝192.168.0.7请求ICMP报文
[root@localhost ~]# iptables -L -n --line-numbers 显示行号
[root@localhost ~]# iptables -D INPUT 2 删除INPUT链的第二条规则
[root@localhost ~]# iptables -A INPUT -s 192.168.0.7 -d 192.168.0.6 -p icmp --icmp-type 0 -j DROP #关闭对方的ping回应报文
iptables -A INPUT -s ! 172.16.0.0 -d 172.16.100.1 -p tcp --dport 80 -j DROP  拒绝除172.16.0.0网段的所有主机访问WEB服务
[root@localhost ~]# iptables -F INPUT 清除规则
[root@localhost ~]# iptables -A INPUT -s 0.0.0.0/0 -d 192.168.0.6 -p tcp --dport 22 -j ACCEPT #写所有地址时一定要写掩码
[root@localhost ~]# iptables -A OUTPUT -s 192.168.0.6 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP 把默认策略改为拒绝
[root@localhost ~]# iptables -P OUTPUT DROP

[root@localhost ~]# iptables -A INPUT -s 192.168.0.7 -d 192.168.0.6 -p icmp --icmp-type 8 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.0.6 -d 192.168.0.7 -p icmp --icmp-type 0 -j ACCEPT 让别的主机能ping进来

[root@localhost ~]# iptables -A OUTPUT -s 192.168.0.6 -p icmp --icmp-type 8 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -d 192.168.0.6 -p icmp --icmp-type 0 -j ACCEPT 本机能PING通外边主机

[root@localhost ~]# iptables -A INPUT -d 192.168.0.6 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 允许新建立的和已建立的连接进来
[root@localhost ~]# iptables -A OUTPUT -s 192.168.0.6 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 允许已建立的连接出去
[root@localhost ~]# iptables -A INPUT -d 192.168.0.6 -m state --state NEW,ESTABLISHED -j ACCEPT 不区分协议和端口号
[root@localhost ~]# iptables -A OUTPUT -s 192.168.0.6 -m state --state ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -d 192.168.0.6 -p tcp -m multiport --destination-ports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT 多个端口合到一块