前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IPTABLES的基本概念小结 转

IPTABLES的基本概念小结 转

作者头像
wuweixiang
发布2018-12-17 10:43:31
5030
发布2018-12-17 10:43:31
举报
文章被收录于专栏:吴伟祥

iptables简介

iptables实际上就是一种包过滤型防火墙。iptables是Linux系统下最常见的防火墙命令,但实际上它只是一个命令行工具,真正的内核防火墙是位于操作系统内核空间的netfilter通过iptables命令制定规则并执行,即可使得netfilter在内核层对数据包作出相应的处理

四表五链

iptables中的存放链的容器,而存放规则的容器。在数据包进入系统的时候,防火墙会对其报文作规则匹配,并执行相应的动作

四表:

  • filter表:用于过滤数据包
  • nat表:网络地址转换功能(IP+端口)
  • mangle表:拆封且修改数据报文并重新封装
  • raw表:关闭nat表上启用的链接追踪机制,为了提高效率使用的,raw本身的含义是指“原生的”、“未经过加工的”,符合raw表所对应规则的数据包将会跳过一些检查,这样就可以提高效率

        优先级为 : raw > mangle > nat > filter

五链:

  • PREROUTING链:用于目标地址转换(DNAT)   数据包进入路由之前
  • INPUT链:用于处理进入本机的数据包
  • OUTPUT链:用于处理由本机出去的数据包
  • FORWARD链:用于处理转发数据包
  • POSTROUTING链:用于源地址转换(SNAT) 发送到网卡之前

Ⅰ.【链】

链是规则的容器。在链上有一系列的规则处理动作。报文进入主机的整个链路如下图。

① 进入主机的报文(通常为请求报文),进入路由选择前,进行判断其目标是否为本机IP,如果是则进入INPUT链执行该链上设定的规则,将请求送至应用层处理;若不是本机IP,则会执行FORWARD链上的规则,将请求报文转发到目标主机,并通过POSTROUTING链送出。

② 本机发起的报文(通常为响应报文),则会执行OUTPUT链上的规则,再由POSTROUTING链送出。

由此可见,任何报文进出都必须PREROUTING和POSTROUTING两条链的。

Ⅱ. 【表】

表是链的容器。前面有说到,规则分为很多种,比如说过滤端口、修改报文、转发数据包等等。具有相同功能的规则的集合就叫做表。iptables默认有4张表,分别是负责过滤的filter表(默认缺省操作即针对该表)、负载转换网络地址的nat表、负责修改报文的mangle表以及负责数据跟踪处理的raw表。那表和链是什么关系呢?表的功能不同,决定了链上的规则所能处于的表也是不同的。也就是说,不同的链所能具有表对应的功能是不同的;反过来说,不同的表上能存在的链是固定的。其对应关系如下图所示:

表是有优先级的,其优先顺序如上图所示,从左往右,优先级由高到低。

Ⅲ. 【规则】

前面一直在说规则。规则是由匹配条件和指定动作组成的集合。设定好匹配条件和指定处理动作以后,报文进入链路,会根据匹配条件去匹配报文,匹配成功以后就会按设定的动作去处理,比如接受包、拒绝包、转发包等。

  • 匹配条件

iptables可以根据报文的源地址、目的地址、传输协议、服务类型等信息进行匹配。这些条件通常用命令参数来设定。常见的命令参数如下表:

参数

说明

-P

设置默认策略

-F

清空规则链

-L

查看规则链

-I num

num缺省为0,即在规则链的顶部加入新规则;num可设定加入的位置

-A

在规则链的末尾加入新规则

-D num

删除指定位置的规则

-s

匹配报文来源地址

-d

匹配报文目标地址

-i

匹配指定网卡流入的数据

-o

匹配指定网卡流出的数据

-p

匹配协议,可选项TCP、UDP、ICMP

-m

使用扩展模块来匹配报文

—dport

匹配目标端口号

—sport

匹配来源端口号

  • 指定动作

动作

说明

ACCEPT

允许数据包通过

DROP

直接丢弃数据包,不给出响应

REJECT

拒绝数据包通过,给出拒绝响应

REDIRECT

本机端口重定向、映射、透明代理

SNAT

源地址转换

DNAT

目标地址转换

MASQUERADE

IP伪装(NAT),用于ADSL

LOG

日志记录

举例说明

下面举例说明iptables的用法。

① 举例:仅允许远程主机访问本机的80端口,本机地址10.0.0.254

代码语言:javascript
复制
iptables -F
iptables -A INPUT -p tcp -d 10.0.0.254 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -j DROP

② 举例:将本地的80端口的请求转发到8080端口,本机地址10.0.0.254

代码语言:javascript
复制
# 方式1:redirect
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 

# 方式2:DNAT
iptables -t nat -A PREROUTING -p tcp -d 10.0.0.254 --dport 80 -j DNAT --to-destination 10.0.0.254:8080

这里列了两种方式,第一种redirect方式实际上是端口重定向,只对本机IP有效,效率比DNAT高。第二种则是DNAT转发模式,它既可以转发到本机IP,也可以转发到外部其他主机。

③ 举例:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.137.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。

代码语言:javascript
复制
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

小结

  1. 使用-t参数来指定对哪个表进行操作,缺省状态下默认是对filter表。
  2. 要重视规则的顺序,默认是由上到下进行匹配,前面若匹配成功并执行相应的动作以后,后面再有规则可以匹配到之前的报文,也无法执行相应的动作。这里举例说明下:

举例:仅允许远端IP为192.168.0.1的主机访问本机的22端口。

先来看常见的错误写法:

代码语言:javascript
复制
iptables -P INPUT ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp -s 192.168.0.1 --dport 22 -j ACCEPT

上例中的规则想要实现仅允许远端192.168.0.1的IP访问本机的22端口。本机INPUT规则链预设为ACCEPT允许所有包流入,第一条规则匹配到对本机的22端口的所有请求报文并执行丢弃动作,第二条规则匹配到来源于192.168.0.1对本机22端口的访问,这时候允许执行动作是没有任何效果的;因为第一条规则直接拒绝了所有的包。所以这种写法有误。正确的写法应该是:

代码语言:javascript
复制
iptables -P INPUT ACCEPT

iptables -A INPUT -p tcp -s 192.168.0.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

或者:

代码语言:javascript
复制
iptables -P INPUT DROP

iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp -s 192.168.0.1 --dport 22 -j ACCEPT

iptables的基本概念以及常见参数先总结到这里。关于iptables更多常用的命令,之后再抽时间总结整理吧。

The End.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • iptables简介
  • 四表五链
  • 举例说明
  • 小结
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档