iptables [-t 表] -命令 匹配   操作
说明
(1) -t 表
表选项用于指定命令应用于哪个iptables内置表。
(2)命令
命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,如下表所示

命令              说明

    -P  
              --policy  链名>                 定义默认策略
    -L
--list  链名>
查看iptables规则列表
    -A
--append  链名>在规则列表的最后增加1条规则
    -I  
--insert  链名>  
在指定的位置插入1条规则
    -D
--delete  链名>  
从规则列表中删除1条规则
    -R
--replace  链名>  
替换规则列表中的某条规则
    -F
--flush  链名>
删除表中所有规则
    -Z--zero  链名>
将表中数据包计数器和流量计数器归零
    -X--delete-chain  链名>
删除自定义链
    -v  
--verbose  链名>与-L它命令一起使用显示更多更详细的信息

(3) 匹配规则
匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下表所示
匹配                              说明
-i     --in-interface  网络接口名>        指定数据包从哪个网络接口进入,
-o    --out-interface  网络接口名>      指定数据包从哪个网络接口输出
-p    ---proto协议类型                     指定数据包匹配的协议,如TCP、UDP和ICMP等
-s     --source  源地址或子网>           指定数据包匹配的源地址
--sport 源端口号>                           指定数据包匹配的源端口号
--dport 目的端口号>                        指定数据包匹配的目的端口号
-m  --match 匹配的模块                   指定数据包

规则所使用的过滤模块


linux netfilter/Iptables包过滤防火墙

带状态检查的包过滤防火墙:状态:new,established,invalid,related

   new:syn=1 新发起的请求

   established : syn<>1  ack=1 fyn<>1 已建立的连接

   output:一般都是ESTABLISHED

   related:关联到的状态. ftp 的连接

默认规则:

*filter
# 使用 iptables -P INTPUT|OUTPUT|FORWARD  DROP
:INPUT DROP [41:5302]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7/32 -p tcp -m tcp --dport 22 -j ACCEPT
# 在input链上 -s指定源地址:172.16.0.0/16 -d 指定目标地址 172.16.100.7 (本机)  -p 指定协议(tcp) -m 扩展选项(tcp)  允许172.16.0.0/16这个网段用户能够访问本地的sshd服务进行访问
iptables -A INPUT -d 172.16.100.7/32 -p tcp -m tcp --dport 80 -j ACCEPT
# 在input链上 -d 指定目标地址 172.16.100.7 -s 忽略表示所有的,允许所有用户对本地的web服务进行访问
iptables -A INPUT -i lo -j ACCEPT
# 允许本机对自己本地回环地址进行访问
iptables -A OUTPUT -s 172.16.100.7/32 -d 172.16.0.0/16 -p tcp -m tcp --sport 22 -j ACCEPT
# 在output链上 -s指定源地址:172.16.100.7(本机) -d 制动目标地址 172.16.0.0/16  -p 指定协议(tcp) -m 扩展选项(tcp)  允许172.16.0.0/16这个网段用户能够访问本地的sshd服务进行访问
iptables -A OUTPUT -s 172.16.100.7/32 -p tcp -m tcp --sport 80 -j ACCEPT
# 在output链上 -s指定:172.16.100.7(本机) -p 指定协议(tcp) -m 扩展选项  允许所有用户对本地的web服务进行访问 -j :指定允许 或拒绝(ACCEPT DROP)
-A OUTPUT -o lo -j ACCEPT
# 允许本机对自己本地回环地址进行访问
# iptables -P INPUT DROP   # 将默认INPUT链策略改为拒绝,起初是ACCEPT
# iptables -P OUTPUT DROP  # 将默认OUTPUT链策略改为拒绝,起初是ACCEPT
# iptables -L -v -n
Chain INPUT (policy DROP 5 packets, 843 bytes)
 pkts bytes target     prot opt in     out     source               destination 
  247 17320 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.16.251.132      tcp dpt:22 state NEW,ESTABLISHED
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
  146 14752 ACCEPT     tcp  --  *      *       172.16.251.132       0.0.0.0/0           tcp spt:22 state ESTABLISHED
# iptables -A INPUT -d 172.16.251.132 -p udp --dport 53  -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -s 172.16.251.132 -p udp --dport 53 -m state --state  ESTABLISHED -j ACCEPT
# 开放所有用户对本机DNS服务器的请求
# iptables -A INPUT -d 172.16.251.132 -p tcp --dport 53  -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -s 172.16.251.132 -p tcp --dport 53 -m state --state  ESTABLISHED -j ACCEPT
# 因为DNS主从复制的时候使用的就是TCP的53号端口,所以也要开放

规则优化:  

# iptables -A INPUT -d 172.16.100.7/32 -m state --state ESTABLISHED -j ACCEPT
# 所有用户所有的数据包只要是,只要是已连接的请求统统ACCEPT统统放行
# iptables -A INPUT 2 -d 172.16.251.132 -p tcp -m state --state NEW,ESTABLISHED -m multiport --destination-ports 22,53,80 -j ACCEPT
# 使用-m multiport --destination-ports 22,53,80 指定多个目标端口
# iptables  -A OUTPUT -s 172.16.100.7/32 -m state --state ESTABLISHED -j ACCEPT
# 所有只要使用本机流出的数据包并且状态为established 统统放行