iptables命令

iptables命令
  iptables命令用来管理IPv4和IPv6的包过滤和NAT。iptables命令最普遍的用途是配置Linux的防火墙规则。但除此以外,还可以用来设置NAT。
  与iptables命令相关的命令为:iptables-save、iptables-restore、iptables-xml和xtables-multi。
  IPv4对应的命令是iptables,而IPv6对应的命令是ip6tables。
  iptables命令的基本格式是:

iptables [option] [-t table] [操作]{-A|-C|-D} [-L] chain rule-specification

  iptables命令最常用的参数是-L,如果不指定链,则显示所有的链的规则:

[root@www.fmttr.com ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source             destination        
ACCEPT     all -- anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp -- anywhere             anywhere            
ACCEPT     all -- anywhere             anywhere            
ACCEPT     tcp -- anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all -- anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source             destination        
REJECT     all -- anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source             destination

  -L后添加指定的链,可以只显示指定链中的规则:

[root@www.fmttr.com ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source             destination        
ACCEPT     all -- anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp -- anywhere             anywhere            
ACCEPT     all -- anywhere             anywhere            
ACCEPT     tcp -- anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all -- anywhere             anywhere             reject-with icmp-host-prohibited

  默认不会显示规则号,可以使用选项--line-number显示规则号:

[root@www.fmttr.com ~]# iptables --line-number -L
Chain INPUT (policy ACCEPT)
num target     prot opt source             destination        
1    ACCEPT     all -- anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp -- anywhere             anywhere            
3    ACCEPT     all -- anywhere             anywhere            
4    ACCEPT     tcp -- anywhere             anywhere             state NEW tcp dpt:ssh
5    REJECT     all -- anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target     prot opt source             destination        
1    REJECT     all -- anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target     prot opt source             destination

  使用-S查看规则比-L更加清新

[root@www.fmttr.com ~]# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

  以上都是查看规则的命令,下面介绍修改规则的命令。主要的修改包括:添加(-A)、检查(-C)和清空(-F/Z)。
  下面是几个添加规则的例子:

iptables -A INPUT -s 10.1.1.0/24 -j DROP  # 丢弃从子网10.1.10.0/24发来的所有包
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT  # 允许从端口22接收的包,端口22对应于ssh服务,也就是允许通过ssh连接
iptables -A OUTPUT -s 10.1.1.0/24 -j DROP  # 丢弃从子网10.1.10.0/24发来的所有包

  可以使用-D删除规则:

iptables -D INPUT -s 10.1.1.0/24 -j DROP # 删除指定的规则

  可以使用-F清空链中的所有规则:

iptables -F OUTPUT

  iptables可以操作的表包括四张,分别是:raw、mangle、nat和filter。可以操作的链包括五个,分别是:INPUT、PREROUTING、FORWARD、POSTROUTING和OUTPUT。