iptables命令

释放双眼,带上耳机,听听看~!

iptables命令主要涉及三张表(常用的是两张表)和五条链。

下图是iptables命令执行流程。
这个流程很重要,等看完iptables命令用法后再来回顾这个流程图就会很好地理解iptables这个命令。

iptables命令

表: filter/nat

链: INPUT/FORWARD/PREROUING/POSTROUTING

iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]

操作命令: (-A -I -D -R -P -F)

查看命令: (-[vnx]L)

-A <链名>

APPEND,追加一条规则放到最后

eg. iptables -t filter -A INPUT -j DROP

-I <链名> [规则号码]

INSERT, 插入一条规则

eg. iptables -I INPUT -j DROP

在filter表的INPUT链插入一条规则(第1条)

eg. iptables -I INPUT 3 -j DROP

在filter表的INPUT链里插入一条规则(第3条)

iptables默认操作的表是filter表

规则号码可以不填,默认是1,确保规则号码<= 已有规则数 + 1

-D <链名> <规则号码|具体规则内容>

DELETE 删除一条规则

eg. iptables -D INPUT 3

按号码删除INPUT链中的第三条规则

eg. iptables -D INPUT -s 192.168.0.1 -j DROP

按内容删除INPUT链中内容为"-s 192.168.0.1 -j DROP"的规则

-R <链名> <规则号码> <具体规则内容>

REPLACE,替换一条规则

eg. iptables -R INPUT 3 -j ACCEPT

确保规则号码<=已有规则数

-P <链名> <动作>

POLICY,设置某个链的默认规则

eg. iptables -P INPUT DROP

设置filter表INPUT链的默认规则是DROP

当数据包没有被规则列表里的任何规则匹配到的时候,按此默认规则处理。动作前面不能加-j,这也是唯一一种匹配动作前面不加-j的情况

-F [链名]

FLUSH, 清楚规则

eg. iptables -F INPUT

清空filter表INPUT链中的所有规则

iptables -t nat -F PREROUTING

清空nat表PREROUTING链中的所有规则

-F仅仅清空链中的规则,并不影响-P设置的默认规则

-P设置DROP后,使用-F一定要小心!!!

如果不写链名,默认清空所有链里的所有规则

-L [链名]

LIST, 列出规则

v: 显示详细信息,包括每条规则的匹配报数量和匹配字节数

x: 在v的基础上,禁止自动换算成(K、M)

n: 只显示IP地址和端口号码,不显示域名和服务器

eg. iptables -L

错略列出filter表所有链及所有规则

eg. iptables -t nat -vnL

用详细的方式列出nat表所有链的所有规则,只显示IP地址和端口号

eg. iptables -t nat -vxnL PREROUTING

用详细方式列出nat表PREROUTING链的所有规则以及详细数字,不自动换算

匹配条件

流入、流出接口(-i -o)

来源、目的地址(-s -d)

协议类型 (-p)

来源、目的端口(–sport –dport)

-i <匹配数据进入的网络接口>

例如: -i eth0

匹配是否从网络接口eth0进来

-o <匹配数据流出的网络接口>

-o eth0

-s <匹配来源地址>

可以是IP、NET、DOMAIN,可以为空

eg. -s 192.168.0.1

匹配来自192.168.0.1的数据包

eg. -s 192.168.1.0/24

匹配来自192.168.1.0/24网络的数据包

-d <匹配目的的地址>

-d 202.106.0.20 匹配去往202.106.0.20的数据包

-d 202.106.0.0/16 匹配去往202.106.0.0/16的数据包

-d www.qq.com 匹配去往域名www.qq.com的数据包

-p <匹配协议类型>

可以是TCP、UDP、ICMP等,也可为空

eg. -p tcp

匹配tcp数据包

eg. -p udp

匹配udp数据包

eg. -p icmp

匹配icmp数据包

–sport <匹配源端口>

eg. –sport 1000

匹配源端口是1000的数据包

eg. –sport 1000:3000

匹配源端口是1000-3000的数据包(包含两端的端口)

eg. –sport :3000

匹配3000以下的端口,含3000

eg. –sport 1000:

匹配1000以上的数据包

–dport <匹配目的端口>

用法和–sport相同

注意: –sport和–dport必须配合和-p参数使用

匹配条件的例子:

iptables -t filter -A INPUT -s 192.168.0.1 -d www.qq.com -p tcp –dport 80

动作处理方式

ACCEPT

DROP

SNAT

DNAT

MASQUERADE

-j ACCEPT

通过,允许数据包通过本链而不拦截它

例如:

iptables -A INPUT -j ACCEPT

允许所有访问本机IP的数据包通过

-j DROP

丢弃,阻止数据包通过本链而丢弃它

iptables -A FORWARD -s 192.168.80.39 -j DROP

阻止来源地址为192.168.80.39的数据包"通过"本机

-j DNAT –to IP[-IP][:端口-端口]

(nat表的PREROUTING链)

eg. iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.0.1

把从eth0进来要访问TCP/80的数据包目的地址改为192.168.0.1

eg. iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 81 -j DNAT –to 192.168.0.2:80

将访问本地的eth0数据包路中目的端口是81的数据包路由到192.168.0.2的80端口

eg. iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.0.1-192.168.0.10

-j SNAT –to IP[-IP] [:端口-端口]

(nat表的POSTROUTING)

源地址转换,SNAT支持转换为单IP,也支持转换到IP地址池(一组连续的IP地址)

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT –to 1.1.1.1

将内网192.168.0.0/24的源地址修改为 1.1.1.1,用于NAT

-j MASQUERADE

动态源地址转换(动态IP的情况下使用)

eg. iptables -t nat -A POSTROTING -s 192.168.0.0/24 -j MASQUERRADE

将源地址是192.168.0.0/24的数据包进行地址伪装

附件模块

a. 按包状态匹配(state)

b. 按来源MAC匹配(mac)

c. 按包速率匹配(limit)

d. 多端口匹配(multiport)

按包状态匹配

-m state –state <状态>

状态:NEW、RELATED、ESTABLISHED、INVALID

NEW: 有别于tcp的syn

ESTABLISHED:连接态

RELATED: 衍生态

INVALID:不能识别属于哪个链接或没有任何状态

eg. iptables -A INPUT -m state –state RELATED, ESTABLISHED -j ACCEPT

按照mac地址匹配

-m mac –mac-source <MAC>

eg. iptables -A FORWARD -m mac –mac-source 10:89:10:00:ae:90 -j DROP

报文经过路由后,数据包中原有的mac信息被替换,所以在路由后的iptables中中使用mac模块是没有意义的

按照速率匹配数据包

-m limit –limit 匹配速率 [–burst 缓冲数量]

用一定的速率去匹配数据包

eg. iptables -A FORWARD -d 192.168.0.1 -m limit –limit 50/s -j ACCEPT

按照端口一次匹配多个端口

-m multiport <–sports|–dports|–ports> 端口[,端口,…,端口n]

eg. iptables -A INPUT -p tpc -m multiport –dports 21,22,25,80,110 -j ACCEPT

多端口匹配命令也要和-p一起使用,指定协议

使用总则

所有链名必须大写

INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING

所有表名必须小写

filter/nat/mangle

所有动作必须大写

ACCEPT/DROP/SNAT/DNAT/MASQUERADE

所有匹配必须小写

-s/-d/-m <module_name>/-p

表:

filter:过滤的时候使用

nat: 用于做NAT的时候使用

链:

INPUT: 位于filter表,用于匹配目的IP是本机的数据包

FORWARD: 位于filter表,匹配穿过本机的数据包,与nat表关系很密切

PREROUTING: 位于nat表,用于修改目的地址(DNAT)

POSTROUTING:位于nat表,用于修改源地址(SNAT)

iptables在规则链中检查的时候,如果匹配到具体的规则,则执行规则定义的动作,然后就放弃其他的规则检查。如果没有匹配到具体的规则,就会使用默认定义的规则(预设规则)。

规则链是有顺序的!

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

用node.js做cluster,监听异常的邮件提醒服务

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索