iptables由三部分组成,tables
, chains
和rules
。
Tables
其中tables
包含五种类型:Filter
, NAT(network address translation)
, Mangle
, Raw
和Security
。
-
Filter
是默认的tables类型。由名字可以知道主要是用于过滤。 -
NAT
主要是用于网络地址转换,决定是否修改以及如何修改packet
源或目的地址。 -
Mangle
用于修改packet的IP headers。例如可以调整packet的TTL时间,缩短有效网络hops, -
Raw
主要是用于connection tracking
。 -
Security
主要是用于Mandatory Access Control (MAC)
网络规则。
后面两种不常用。
Chains
Chains主要包括五种: PREROUTING
, INPUT
, FORWARD
, OUTPUT
, POSTROUTING
。
需要注意的是:并不是所有的chains对所有tables都适用。如图所示,例如
Filter
表有三种Chains
,INPUT
, FORWARD
和OUTPUT
。Chains的遍历次序
Rules
Rules就是定义一组规则用来操纵网络traffic。
Commands to manipulate network traffic.
例如:为了阻塞某个IP地址
iptables -A INPUT -s x.x.x.x -J DROP
每条rule一般包含两个基本的组成部分,matching component
和target component
。例如上面的例子中-s x.x.x.x
即为matching component
,-J DROP
即为target component
。
-
matching component
主要包含以下几部分,而且可以将其组合成更复杂的rule sets
。- Protocol
- IP Address
- Port Address
- Interfaces
- Headers
-
target component
又包含Terminating Targets
和Non-Terminating Targets
。-
Terminating Targets
- Accept
- Drop
- Queue
- Reject
- Return
- User-Defined
-
Non-Terminating Targets
- Continue the chain
-
iptables -t [table] -OPTIONS [CHAIN] [matching component] [action component]
-
table
可以是上述提到的五种table类型中的一种,默认为filter。 -
CHAIN
根据table的不同,可以适用的CHAIN也不一样。 -
OPTIONS
主要由A(append), D(delete), I(insert), R(replace), F(flush), L(list), P(policy), Z(zero counters), E(rename), N(new user-defined chain), X(delete chain)等等组成。 -
matching component
是条件组合,如果条件为真则执行action component,如果条件为假,则移到下一条规则。
Generic | Implicit | Explicit |
---|---|---|
p - Protocol | TCP | Match Extensions |
s - Source IP | -sport | -m |
d - Dest IP | -dport | conntrack, dscp, ecn, iprange etc. |
i - IN Interface | --tcp-flags | |
o - OUT Interface |
-
Action component
通过-j (for jump)
来指定,主要包括ACCEPT, DROP, REJECT,RETURN。
例子
- 我们可以通过
iptables -nvL
查看默认table的iptables规则,也可以通过-t
参数指定table。如下所示,prot
代表Protocol,opt
代表IP options,in
和out
分别代表input和output interface。source
和destination
分别代表source IP地址和destination IP地址。
(ENV) [root@ceph-2 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 943M packets, 1125G bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 938M packets, 1540G bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
- 配置阻塞访问百度这种垃圾网站,如下所示:
(ENV) [root@ceph-2 ~]# iptables -A INPUT -s baidu.com -j DROP
(ENV) [root@ceph-2 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 8209 packets, 13M bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 220.181.38.148 0.0.0.0/0
0 0 DROP all -- * * 39.156.69.79 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 8297 packets, 25M bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
References
- IPTABLES [PART-1] : "UNDERSTANDING THE CONCEPT"
- IPTABLES [PART-2] : COMMAND SYNTAX WITH LIVE DEMO!
- iptables-tutorial
- how to save/backup existing I-tables rules to a file
- How to do the port forwarding from one ip to another ip in same network?
- iptables: difference between NEW, ESTABLISHED and RELATED packets
- Linux NAT Masquerade 研究(上)
- 初探 IPTABLES 流動之路 - 以 Docker 為範例
网友评论