iptables命令学习笔记

NAME

iptables - IPV4数据包过滤与NAT管理工具

SYNOPSIS

iptables [-t table] -[AD] chain rule-specificat [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

DESCRIPTION

iptables命令用来设置、管理、查看Linux内核中的IP包过滤规则表。可以定义几个不同的包,每个表包含一定数量的内置chain,也可以包含用户自定义chain。

每条chain包含多条rule,rule中包含与packet的匹配规则,以及如何处理匹配的包。后者称为target,可以是jump到同一个table中的另一条用户自定义的chain。

TARGETS

Target有几个系统内置的特殊值:ACCEPT、DROP、QUEUE、RETURN。

ACCEPT表示让packet通过,继续配置chain中的下一条rule。DROP表示丢弃,QUEUE表示将packet内核空间直接发送到到用户空间。RETURN表示从当前chain返回,从调用当前chain的下一条rule开始继续处理。如果包通过了内置chian的所有rule,或者是在内置chain的某条rule中RETURN,则由这条内置chian中设置的默认规则决定如何处理这个packet。

TABLES

系统一般有三个独立的table,系统呈现那些表可由内核配置确实。

Tag Description
-t, --table table
 

指定命令操作的table名。

Tag Description
filter:
 

默认table,其中的chain主要用于数据包的过滤。包含系统内置的三条chain,INPUT(数据包的目标是本机)、FORWARD(转发数据包)、OUTPUT(由本机发送出去的数据包)。

nat:
 

主要用于实现NAT功能。当系统发现创建连接、断开连接的包时,此表将发挥作用。通过监控连接的状态,根据设置的规则,修改数据包以实现NAT功能。

包含三条内置的chain。PREROUTING修改进入本机的包,OUTPUT修改由本机发送出去的包,POSTROUTING用于修改离开本机的数据包,可能是FORWARD类型的包,也可能是OUTPUT类型的包。

mangle:
  此表用于为实现特殊目的对包的修改。在最新的内核版本中,包含五种类型的chain:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
raw:
 

优先级最高的表,主要通过使用Target NOTRACK,避免默认设置下对链接状态的跟踪以提高性。包含PREROUTING、OUTPUT两条内置链,前者处理入包,后者处理出包。

OPTIONS

iptables从支持的选项可以划分成几个不同的组。

COMMANDS

下边的这些选项用于指明iptables命令需要执行的动作。除非特别说明,一条iptables命令中只能包含下述动作中的一个。

Tag Description
-A, --append chain rule-specification
 

向chain追加一条或者多条rule。如果rule中的source或者destination代表多个地址时,一条rule会自动展开,每为一个可能的地址都追加一条rule。

-D, --delete chain rule-specification 
-D, --delete chain rulenum
 

删除chain中的一条或者多条rule。后边的rule可以通过rule在chain中的编号指定,也可以指定rule的特征值,由系统匹配。

-I, --insert chain [rulenumrule-specification
 

在chain的指定位置插入一条或者多条rule。如果rulenum没有指定,则将新rule插入到chain的最前头。

-R, --replace chain rulenum rule-specification
 

替换rule。新的rule定义必需明确,它的SOURCE或者destination不可以展开,否则命令会报错。

-L, --list [chain]
 

列出chain内容,如果没有指定具体的chain,则列出table中的所有chain。

例如,列出nat表中的所有chain:

 iptables -t nat -n -L

iptables默认会试图将IP地址解析成主机名之类,-n选项的意思是取消DNS的lookups过程,直接显示数字。

另一个常用用的显示命令:

 iptables -L -v

用于显示详细内容,包含rule的统计信息。

-F, --flush [chain]
 

刷新chain,相当于逐个删除chain中的rule。

-Z, --zero [chain]
 

Zero the packet and byte counters in all chains. It is legal to specify the -L, --list (list) option as well, to see the counters immediately before they are cleared. (See above.)

将rule的统计信息归零,可与-L选项同时使用。

-N, --new-chain chain
  创建用户自定义chain。
-X, --delete-chain [chain]
 

删除用户自定义chain。有前提条,首先没有其它chain引用当前要删除的chain,如果有则先解除引用。第二,当前chain中不能包含任何rule,如果有需要先删除。

-P, --policy chain target
 

为chain设置默认target,当chain不知道如何处理某个包时,默认target就会生效。但是默认target不可以是内置的chain,也不可以是用户自定义的chain,只能是系统内置的那几个动作,如ACCEPT、DROP等。

-E, --rename-chain old-chain new-chain
  重名列chain。
-h 帮助。

以下参数指定chain中rule的具体内容。

Tag Description
-p, --protocol [!] protocol
 

设定包有关protocol的匹配规则。可以是tcp、udp、icmap或者全部。可以是protocol的名称,也可以是数字。名称与数字之间的对应关系可以在/etc/protocals文件中查找。"!"表示取反,数字0表示全部协议,是默认值。

-s, --source [!] address[/mask]
 

数据包源地址匹配规则。可以是一个IP地址,一个网段、主机名,也可以是网络名。注意如果是主机名的话,iptable会通过DNS解析。如果是网段或者网络名,则source会被展开成多个IP地址。

-d, --destination [!] address[/mask]
  数据包目标地址,与数据包源地址规则相同。
-j, --jump target
 

如果数据包匹配的话,此选项用于指出如何处理。可以是系统内置的动作,也可以是用户自定义的chain。如果此选项没有指定,则匹配的rule不对数据包做任何处理,但rule的统计信息会更新,如匹配的数据包的个数,字节数等。

-g, --goto chain
 

此选项表示将匹配的数据包转移到用户自定义chain。jump选项中指定的chain如果发生return,则返回到调用者中继续,此选项则不会。

-i, --in-interface [!] name
  interface名称,表示数据包进入本机的设备。可以取反,可以只指定设备名称中的前几个字符,后边追加+号,实现通配。
-o, --out-interface [!] name
  数据包离开本机的设备,规则与-i选项相同。
[!] -f, --fragment
 

如果数据包很大将会被分片。此选项指出匹配除第一个分片以外的其它分片。如果前边加上“!”号,则只匹配第一个分片。

-c, --set-counters PKTS BYTES
 

初始化rule关于数据包、字节数统计结果。

OTHER OPTIONS

其它可以使用的额外选项:

Tag Description
-v, --verbose
 

当调用显示命令时,加上这个选项可显示更加详细的结果。

-n, --numeric
 

iptables默认会试图将IP地址通过DNS映射成主机名、网络名、服务名等,加上此选项则直接显地址,避免解析过程。

-x, --exact
  显示更加精确的统计信息。比如关于字节的统计,会显示多少个字节,而不是M什么的系统自动选报的单位。
--line-numbers
  显示chain中的rule时添加上行号,这个行号就是rule在chain中的位置。
--modprobe=command
 

当向某个chain添加rule时,可能需要载入特定的模块来支持,此选项用来指定模块名称。

MATCH EXTENSIONS

iptables能够扩展包的匹配、处理模块,有两种载入这些模块的方法。一个是隐式载入,比如指定了-p选项,后边加上了协议名称,则如果相应的匹配模块还没有载入会自动载入。另一种显式的,通过-m、--match选项后边直接加匹配模块的名称。

不同模块,支持的可用选项不同。可通过-h选项外加模块名称,查看其支持的选项,或者查看官方文档。

以下是基本模块,应该是系统默认就使用的,可通过包名前加"!"禁止掉。

account

对指定的network/netmask进行流量计数、统计。

addrtype

本模块根据地址类型匹配数据包,如单播、广播等地址类型。

ah

此模块用于匹配IPsec包中认证头的SPIs。

childlevel

试验型模块。匹配一个包是否属于某个connection或者这个connection的子connection。

comment

给rule添加注释,注释长度有限制。

condition

用于匹配特定文件名中的值是 ’0’ 或者 ’1’.

connbytes

与某个connetcion(单向、双向)已经传输的数据包、字节等统计信息匹配,包括总数,平均等。

主要用来发现那些时间长,传输数据量大的连接,进而可将这些连接禁止或者调整到低优先级。

connlimit

设置单个IP或者地址块对某个服务器IP可同时发起的connection的个数。

connmark

匹配connection包中的netfilter mark字段。

connrate

基于connection的传输速率匹配包,注意connbytes模块是基于历史统计数据,与这个不同。

conntrack

更加详细的连接状态跟踪。

dstlimit

基于目的地址或者目的端口号,限制其传输速率。

esp

匹配IPsec包的ESP头中的SPIs。

fuzzy

hashlimit

iprange

匹配某个范围内的IP地址。

ipv4options

匹配IP数据包中Header内的各种字段。

length

匹配数据包长度。

mac

mark

mport

匹配源、目的端口号,端口号可以是集合。

multiport

匹配源、目的端口号,端口号可以是范围。

physdev

匹配网桥设置的出、入端口号。

pkttype

This module matches the link-layer packet type.

匹配链路层包类型。

policy

state

连接状态跟踪,没有conntrack详细。

tcp

当设置-p tcp时,此模块载入,它是用来匹配tcp数据包头的。

TARGET EXTENSIONS

以上是对匹配规则的扩展,下边是对target的扩展。

BALANCE

This allows you to DNAT connections in a round-robin way over a given range of destination addresses.

DNAT中,大多个目的地址之间实现round-robin轮转。

Tag Description
--to-destination ipaddr-ipaddr
  Address range to round-robin over.


DNAT

实现DNAT的模块,对出包进行转换。此扩展target只能在nat表中使用,并且只能出现在PREROUTING与OUTPUT链中。或者用户自定义链中,并且这种用户自定义链只能由PREROUTING与OUTPUT链引用。

Tag Description
--to-destination ipaddr[-ipaddr][:port-port]
  which can specify a single new destination IP address, an inclusive range of IP addresses, and optionally, a port range (which is only valid if the rule also specifies -p tcp or -p udp). If no port range is specified, then the destination port will never be modified.

In Kernels up to 2.6.10 you can add several --to-destination options. For those kernels, if you specify more than one destination address, either via an address range or multiple --to-destination options, a simple round-robin (one after another in cycle) load balancing takes place between these addresses. Later Kernels (>= 2.6.11-rc1) don’t have the ability to NAT to multiple ranges anymore.

 

MASQUERADE

只能在nat表中的POSTROUTING链中使用。如果需要变换的内部地址是静态不变的,则应用使用SNAT。如果需要转换的内部地址是动态的,则使用当前模块。因为设备上的地址是会变化的,本质上实现设备与地址的转换。

Tag Description
--to-ports port[-port]
  This specifies a range of source ports to use, overriding the default SNAT source port-selection heuristics (see above). This is only valid if the rule also specifies -p tcp or -p udp.


REJECT

对DROP动作的扩展,除了丢弃匹配的包,还向发送者回送一个包以便通知对方。

Tag Description
--reject-with type
  The type given can be
 icmp-net-unreachable 
 icmp-host-unreachable 
 icmp-port-unreachable 
 icmp-proto-unreachable 
 icmp-net-prohibited 
 icmp-host-prohibited or 
 icmp-admin-prohibited (*) 
which return the appropriate ICMP error message (port-unreachable is the default). The option tcp-reset can be used on rules which only match the TCP protocol: this causes a TCP RST packet to be sent back. This is mainly useful for blocking ident (113/tcp) probes which frequently occur when sending mail to broken mail hosts (which won’t accept your mail otherwise).
(*) Using icmp-admin-prohibited with kernels that do not support it will result in a plain DROP instead of REJECT
   


SNAT

实现SNAT,只能在nat表中的PSTROUTING链中使用。

Tag Description
--to-source ipaddr[-ipaddr][:port-port]
  which can specify a single new source IP address, an inclusive range of IP addresses, and optionally, a port range (which is only valid if the rule also specifies -p tcp or -p udp). If no port range is specified, then source ports below 512 will be mapped to other ports below 512: those between 512 and 1023 inclusive will be mapped to ports below 1024, and other ports will be mapped to 1024 or above. Where possible, no port alteration will occur.

In Kernels up to 2.6.10, you can add several --to-source options. For those kernels, if you specify more than one source address, either via an address range or multiple --to-source options, a simple round-robin (one after another in cycle) takes place between these addresses. Later Kernels (>= 2.6.11-rc1) don’t have the ability to NAT to multiple ranges anymore.

你可能感兴趣的:(Linux网络虚拟化)