概要
iptables [-t table] -[AD] chain rule-specification [options]
iptables [-t table] -I chain [rulenum] rule-specification [options]
iptables [-t table] -R chain rulenum rule-specification [options]
iptables [-t table] -D chain rulenum [options]
iptables [-t table] -[LFZ] [chain] [options]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target [options]
iptables [-t table] -E old-chain-name new-chain-name
翻译说明:
table:表
chain:链
rule:规则
option:选项
target:目标
ACCEPT:接受
DROP:丢弃
QUEUE:排队
RETURN:返回
ACCEPT接受意思是让这个包通过,DROP丢弃的意思是丢弃这个包,QUEUE排队意思是将这个包传给用户空间。(一个用户空间进程由不同的特定队列处理程序来决定怎样来接受这样的包。2.4.x和2.6.x到2.6.13版的内核包含了"ip_queue"这个处理程序。2.6.14及以后版本的内核包含了"nfnetlink_queue"队列处理程序。这种情况下的目标为QUEUE的包会被发送到队列号位'0'的队列。请看后文中NFQUUE目标的描述)RETURN返回意味着停止遍历这个链,从前一个(调用的)链继续下一条规则。如果到了一个内建链的末尾,或者匹配了一个目标为RETURN的内建链规则,那么就有这个链指定的目标来决定这个包的命运。
表:
当前一共有4个独立的表(任何一个现存的表都依赖于内核的配置选项和加载的模块)
-t, --table table
这个选项指明了该条命令应该作用于哪一个包匹配表。如果内核被配置为自动加载模块,那么内核就会自动尝试加载恰当的未加载模块。
下面列出了所有的表:
filter过滤器:
这个是默认表(如果没有使用-t 选项)。它包含了内建链INPUT输入(用于目的为本地socket的包),FORWARD转发(用于经过经过本地转发的包),和OUTPUT输出(用于本地产生的包)。
nat:
这个表用于会创建一个新连接的包。它包括了3个内建链:PREROUTING路由前(用于改变刚刚收到还未route寻径的包),OUTPUT(用于改变本地产生的还未route寻径包),POSTROUTING(用于改变马上就要发送的包)
mangle:
这个表用于一些特殊的包的内容。直到内核2.4.17,它有了两个内建链:PREROUTING(用于改变寻径routing前收到的包)和OUTPUT(用于改变寻径前本地产生的包)。从内核2.4.18起,另外3个内建链也被支持:INPUT(用于收到给本机的包),FORWARD(用于改变经过本机转发的包)和POSTROUTING(用于改变马上就要发出的包)。
raw:
This table is used mainly for configuring exemptions from connection tracking in combination with the NOTRACK target.————这句话看了几遍,大概意思自己是明白了,但是想了半天不知道怎样翻译才准确,大家自己看看英文吧。
它以更高的优先级注册在netfilter钩子上,因此会在ip_conntrack或者其它IP table前面调用。它提供了内建链:寻径前PREROUTING(用于到达任何网卡的包),OUTPUT输出(用于本地产生的包)。
选项
iptables支持的选项被分为几个不同的组
命令
这些选项指明了要采取的动作。出下面进行特别说明的,在命令行指定其中的一个动作。对于长格式的命令和选项,你只需要输入足够iptalbes可以区分出来是什么命令的字母就可以了。
-A,--apend chain rule-specification
追加一条或多条规则到选定的链中。当源名字和(或)目的名字可以被解析为多个地址时,那么被加入的这条规则适用于所有可能的地址;
-D, --delete chain rule-specification
-D, --delete chain rulenum
从所选的链中删除一条或者多条规则。这里一共有两个版本的命令格式:可以通过一个在链中的序号来指定这个规则(第1条规则序号为1)或者匹配的规则。
-I,--insert chain [rulenum] rule-specification
以指定序号,插入一条或者多条规则到选择的链中。因此,如果序号为1,那么这些规则会被插入到这个链的头部。这也是没有指定规则序号的默认行为.
-R,--replace chain rulenum rule-specificaiton
取代选中链中的一条规则。如果源名字和目的名字可以被解析为多个地址,则命令失败。规则从1开始计数。
-L,--list [chain]
列出选中链中的所有规则。如果没有链选中,那么所有就会列出所有链的规则。跟其他的iptables命令一样,它会应用于一个指定的表中(默认情况下,是filter表),因此要列出所有NAT表的规则,需要使用命令 iptables -t nat -n -L
-F,--flush [chain]
冲刷选中的链(如果没有指明链,就会应用到所有的链)。这个命令等于一条条的删除所有的规则。
-Z,--zero [chain]
将所有链中的包和字节计数器清零。可以指定-L,--list选项来在清零之前,显示这些计数器。
-N,--new-chain chain
创建一个给定名字的用户自定义链。要求不能有这个名字的目标。
-X,--delete-chain [chain]
删除指定的用户自定义链。这要求必须没有任何对这个链的引用。如果有引用的话,你需要先删除或者取代这些规则。这个链必须是空的。例如,不能包含任何的规则。如果没有给定任何参数,它会尝试删除每一个表中的非内建链。
-P,--policy chain target
为链设定目标策略。可以跳转到TARGETS节学习合法的目标。只有内建链(非用户自定义)可以有策略,和既不是内建也不是用户的链可以成为策略目标。
-h,
帮助
参数
下面的参数组成了规则的细节(被用于add,delete,insert,replace和append命令)
-p,--protocol [!]protocol
需要检查的规则或者包的协议。可以指定tcp,udp,icmp,或者all。它也可以是一个数字,用于表示这些协议中的一个。允许的协议名字来自于/etc/protocols。协议签的参数“!”用于对测试取反。数字0等于all。协议all可以匹配任何协议,并且是没有指明这个参数时的默认行为。
-s,--source [!]address[/mask]
指定源地址。地址可以是一个网络名字,一个主机名(请注意指定任何名字,会导致进行一个远程的DNS解析,这不是一个好主意。),一个网络IP地址(带有/mask),或者一个直接的IP地址。这个掩码可以是一个网络掩码,也可以是一个数字来指明掩码左边的“1”的个数。因此一个24的掩码就是255.255.255.0。在地址前面的“!”用于对地址取反。标志--src是这个选项的一个别名。
-d, --destination [!] address[/mask]
指定目的地址。细节与-s类似。
-j,--jump target
指明了规则的目标。例如,当包匹配规则时,要采取什么动作。这个目标可以是一个用户自定义的链(一个这个规则不在其中的链),一个特殊的内奸目标来立即决定包的命运,或者一个扩展。如果这个选项在规则中被省略(并且没有使用-g),那么匹配了的这个规则对这个包没有任何的影响,但是会增加这个规则的计数器。
-g,--goto chain
用于指明包需要进行一个用户自定义链的处理。当时使用--jump转到某个链中时,return不会继续后面的链中处理,而是返回至调用--jump的链中。而--goto与之不同。
-i,--in-interface [!]name
指定收到包的网卡(只能应用于进入到INPUT,FORWARD和PREROUTING链的包)。当在网卡名字前使用“!”时,取相反的意思。如果网卡名字以“+”结尾,那么任何一个以这个名字开头的网卡都会被匹配。如果这个选项被省略,那么任何网卡名字都可以匹配。
-o,--out-interface [!]name
指明发包的网卡名字(用于进入FORWARD,OUTPUT,和POSTROUTING链的包)。“!”的意思与前文相同。
[!] -f, --fragment
这意味这个规则只应用于第二个和后面的分片包。因为分片时是没有方法来的得到一个包的源或者目的端口(或者ICMP类型),这样的包就不会匹配以端口指定的规则。"!"的意思与前文相同。
-c, --set-counters PKTS BYTES
这个选项使管理员可以初始化一个规则的包和字节的计数器(在INSERT,APPEND,REPLACE操作)
其他选项
可以指定下面的附加选项
-v, --verbose
详细输出。这个选项使list命令显示网卡的名字,规则的选项,和TOS masks。包和字节计数器也会以后缀“K”,“M”,或者“G”的形式显示出来。对于追加,插入,删除和取代,详细选项使这些被操作的规则打印出来。
-n, --numeric
数字格式输出。IP地址和端口号以数字形式打印。默认情况下,程序会显示主机名,网络名字,或者服务的名字。
-x, --exact
扩展数字。显示准确的包和字节计数器的准确的值,来代替“K”,“M”,或者“G”。这个选项与“-L”命令相关。
--line-numbers
当列出规则时,在每个规则前加上行号,对应于规则在链中的位置。
--modprobe=command
当加入或者插入规则到一个链接中,使用command来加载必要的模块(目标,匹配扩展等)
附录:
[root@localhost ~]# iptables --help iptables v1.4.21 Usage: iptables -[ACD] chain rule-specification [options] iptables -I chain [rulenum] rule-specification [options] iptables -R chain rulenum rule-specification [options] iptables -D chain rulenum [options] iptables -[LS] [chain [rulenum]] [options] iptables -[FZ] [chain] [options] iptables -[NX] chain iptables -E old-chain-name new-chain-name iptables -P chain target [options] iptables -h (print this help information) Commands: Either long or short options are allowed. --append -A chain Append to chain --check -C chain Check for the existence of a rule --delete -D chain Delete matching rule from chain --delete -D chain rulenum Delete rule rulenum (1 = first) from chain --insert -I chain [rulenum] Insert in chain as rulenum (default 1=first) --replace -R chain rulenum Replace rule rulenum (1 = first) in chain --list -L [chain [rulenum]] List the rules in a chain or all chains --list-rules -S [chain [rulenum]] Print the rules in a chain or all chains --flush -F [chain] Delete all rules in chain or all chains --zero -Z [chain [rulenum]] Zero counters in chain or all chains --new -N chain Create a new user-defined chain --delete-chain -X [chain] Delete a user-defined chain --policy -P chain target Change policy on chain to target --rename-chain -E old-chain new-chain Change chain name, (moving any references) Options: --ipv4 -4 Nothing (line is ignored by ip6tables-restore) --ipv6 -6 Error (line is ignored by iptables-restore) [!] --protocol -p proto protocol: by number or name, eg. `tcp' [!] --source -s address[/mask][...] source specification [!] --destination -d address[/mask][...] destination specification [!] --in-interface -i input name[+] network interface name ([+] for wildcard) --jump -j target target for rule (may load target extension) --goto -g chain jump to chain with no return --match -m match extended match (may load extension) --numeric -n numeric output of addresses and ports [!] --out-interface -o output name[+] network interface name ([+] for wildcard) --table -t table table to manipulate (default: `filter') --verbose -v verbose mode --wait -w [seconds] maximum wait to acquire xtables lock before give up --wait-interval -W [usecs] wait time to try to acquire xtables lock default is 1 second --line-numbers print line numbers when listing --exact -x expand numbers (display exact values) [!] --fragment -f match second or further fragments only --modprobe=<command> try to insert modules using this command --set-counters PKTS BYTES set the counter during insert/append [!] --version -V print package version.