iptables命令详解之大战iptables八百回合

简介

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

总则

iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]
在这里插入图片描述

表和链

表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
在这里插入图片描述

规则表
  1. filter表

三个链:INPUT、FORWARD、OUTPUT三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.

  1. Nat表

三个链:PREROUTING、POSTROUTING、OUTPUT——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat

  1. Mangle表

五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它),使用tc配合iptables对上行流量和下行流量限速就要用到这个表了

  1. Raw表

两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw

规则链

在这里插入图片描述

  1. PREROUTING:数据包进入路由表之前
  2. INPUT:通过路由表后目的地为本机
  3. FORWARDING:通过路由表后,目的地不为本机
  4. OUTPUT:由本机产生,向外转发
  5. POSTROUTIONG:发送到网卡接口之前

操作命令

  • -A 在指定链的末尾添加(append)一条新的规则

-A <链名>
iptables -t filter -A INPUT -j DROP
在 filter 表的 INPUT 链里追加一条规则(作为最后一条规则)
匹配所有访问本机 IP 的数据包,匹配到的丢弃

  • -D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除

-D <链名> <规则号码 | 具体规则内容>
iptables -D INPUT 3(按号码匹配)
删除 filter 表 INPUT 链中的第三条规则(不管它的内容是什么)

iptables -D INPUT -s 192.168.0.1 -j DROP(按内容匹配)
删除 filter 表 INPUT 链中内容为“-s 192.168.0.1 -j DROP”的规则
(不管其位置在哪里)

  • -I 在指定链中插入(insert)一条新的规则,默认在第一行添加

-I <链名> [规则号码]
iptables -I INPUT -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条)

iptables -I INPUT 3 -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 3 条)

  • -R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换

-R <链名> <规则号码> <具体规则内容>
iptables -R INPUT 3 -j ACCEPT
将原来编号为 3 的规则内容替换为“-j ACCEPT”

  • -L 列出(list)指定链中所有的规则进行查看

-L [链名]
iptables -nvL --line-number查看所有iptables的规则并且显示序列号

iptables -L
粗略列出 filter 表所有链及所有规则

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

  • -E 重命名用户定义的链,不改变链本身

iptables -E old-chain new-chain

  • -F 清空(flush)

-F [链名]
iptables -F INPUT
清空 filter 表 INPUT 链中的所有规则

iptables -t nat -F PREROUTING
清空 nat 表 PREROUTING 链中的所有规则
注意:
1、-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则
2、-P 设置了 DROP 后,使用 -F 一定要小心!!!
3、如果不写链名,默认清空某表里所有链里的所有规则

  • -n 使用数字形式(numeric)显示输出结果
  • -v 查看规则表详细信息(verbose)的信息
  • -V 查看版本(version)
  • -h 获取帮助(help)

匹配条件

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

-i <匹配数据进入的网络接口>
-i eth0
匹配是否从网络接口 eth0 进来

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

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

-s <匹配来源地址>
可以是 IP、NET、DOMAIN,也可空(任何地址)
-s 192.168.0.1 匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包

-d <匹配目的地址>
可以是 IP、NET、DOMAIN,也可以空
-d 202.106.0.20 匹配去往 202.106.0.20 的数据包
-d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
-d www.abc.com 匹配去往域名 www.abc.com 的数据包

  • 协议类型 (-p)

-p <匹配协议类型>
可以是 TCP、UDP、ICMP 等,也可以直接填写协议对应的编号,还可以是空
-p tcp
-p udp

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

–sport <匹配源端口>
可以是个别端口,可以是端口范围
–sport 1000 匹配源端口是 1000 的数据包
–sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
–sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
–sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

–dport <匹配目的端口>
匹配规则同–sport
注意:–sport 和 --dport 必须配合 -p 参数使用

  • 匹配规则具体举例

1、端口匹配
-p udp --dport 53
匹配网络中目的地址是 53 的 UDP 协议数据包

2、地址匹配
-s 10.1.0.0/24 -d 172.17.0.0/16
匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包

3、端口和地址联合匹配
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80
匹配来自 192.168.0.1,去往 www.abc.com 的 80 端口的 TCP 协议数据包

动作

  • ACCEPT

-j ACCEPT
通过,允许数据包通过本链而不拦截它
iptables -A INPUT -j ACCEPT
允许所有访问本机 IP 的数据包通过

  • DROP

-j DROP
丢弃,阻止数据包通过本链而丢弃它
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止来源地址为 192.168.80.39 的数据包通过本机

  • SNAT

SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了,所以叫做SNAT,基于源地址的地址转换。

-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

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
同上,只不过修改成一个地址池里的 IP

  • DNAT

DNAT是destination networkaddress translation的缩写,即目标网络地址转换,典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。

-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链)
目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
(一组连续的 IP 地址)

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
把从 ppp0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

  • MASQUERADE

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

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
将源地址是 192.168.0.0/24 的数据包进行地址伪装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值