学派吧-iptables基本概念和原理 -linux教程

概述

iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables)。

在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本原理就是在内核网络层数据包流经的不同位置放置一些钩子(hook),利用这些嵌入网络层的hook来对数据抓取、控制或修改,iptables其实只是默认的netfilter控制管理工具,所以使用ps或者top看不到有一个“防火墙”的进程存在,防火墙是不能被卸载也不能关闭的,大家熟知的"service iptables stop"或者“/etc/init.d/iptables stop”命令只不过是清空所有策略和表,并把默认策略改为ACCEPT(允许)而已。

iptables有以下几个重点概念::

table(表)iptables内置4个table,不同的table代表不同的功能,每个table可以包含许多chain,不同类型的table对所能包含的chain和策略中的target的使用做了限定,一些target不能在一些table中使用。用户不能自定义table;

chain(链):chain可用包括一系列的策略,通过配置不同的chain可以对不同作用的策略进行分类,iptables内置5个chain对应netfilter的5个hook,用户也可以自定义chain;

command(命令):command是对表或链的操作动作,比如添加、删除、修改等等;

rule-specification(策略):包括下面的匹配规则和目标;

match(匹配规则):定义本条策略适用于那些数据包,匹配规则可以包括协议、源/目的地址、端口等等;

target(目标):对匹配上规则的数据包采取的操作,target可以是一个动作或者自定义chain,常见的动作有丢弃(DROP)、允许(ACCEPT)、NAT等等,当target是自定义chain时,数据包进入自定义chain继续匹配;

policy(默认策略):内置chain的默认动作,每个chain只能有一个policy,如果数据包匹配某条chain匹配完最后一条策略依然没有匹配上,那么就采用policy的默认动作。policy不匹配规则,而且target只能是丢弃(DROP)或允许(ACCEPT),自定义chain不能定义policy。

iptables的4个表分别是:

filter(过滤):数据包过滤/拦截,可以包含INPUT、FORWARD、OUTPUT这3个内置chain。

nat(地址转换):IP地址或端口号转换,可以包含PREROUTING、OUTPUT、POSTROUTING 3个内置chain,nat table在会话建立时会记录转换的对应关系,同一会话的回包和后续报文会自动地址转换,这是因为nat使用了ip_conntrack模块。

mangle(包管理):用来修改IP报文,可以包含PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING 5个内置chain。

raw:此表的优先级高于ip_conntrack模块和其它的table,主要用于将有会话状态的连接(比如tcp)的数据包排除在会话外。可以包含POSTROUTING、OUTPUT两个内置chain。

看到这里肯定会有这样的疑问,为什么table只能包含一些而不是全部的chain呢?我想这个构架是按需设计而不是按功能设计的,尽管table不是包含所有的chain,但是每种功能的table都包含了实现这种功能所需的chain,即使包含更多的chain也是累赘或者无用的,而且实际上用起来也的确如此,够用了。

还有就是不同table生效优先顺序问题,先后优先级是这样的:

raw > mangle > nat > filter

所以,如果有filter禁止ping目的地址2.2.2.2,而nat又有策略将目的地址1.1.1.1转换成2.2.2.2,那么ping 1.1.1.1是ping不通的。

不过一般情况下filter是不会和nat的策略打起架来,比如INPUT chain能做filter,却不能做nat,PREROUTING能做nat却不能做filter,而且PREROUTING只能做目的地址转换,不会对源地址过滤的需求造成麻烦,所以通常是不会相互干扰的。

iptables内置的5个chain:PREROUTING、INPUT、OUPUT、FORWARD、POSTROUGING,这5个chain分别与netfilter中数据转发路径上的5个不同的位置挂钩,以匹配筛选不同类型的数据流,如下图所示:

学派吧-iptables基本概念和原理 -linux教程

其中:

PREROUTING链:应用于所有进入机器的ip包,包括目的地址是本机和目的地址非本机的包。

INPUT链:应用于所有目的是本机的包,也就是目的IP是本机接口地址,所有发给本地socket的数据都经过它。

OUPUT链:应用于所有由本机产生的包,所有应用程序发出的数据都经过它。

FORWARD链:应用于所有经过路由决策被转发的包,也就是目的地址不是本机的数据包。

POSTROUGING链:应用于所有发出机器的IP包,包括本机发出的和从本机转发的数据包。

策略匹配按照重上到下的顺序进行,当测试到某策略匹配时执行target并跳出,不再向下匹配,当测试到最后一条策略仍不匹配时,则采用policy指定的动作,如下图:

学派吧-iptables基本概念和原理 -linux教程

除了内置chain外,还可以自定义chain,自定义chain并不能利用netfilter的hook来捕捉数据包,但是可用于策略的分类,比如有3类不同的用户访问主机上的不同服务,如果所有策略都放在INPUT chain中策略会多而难以维护,这个时候就可以定义3个自定义chain,分别配置不同的策略,同时在INPUT chain中添加策略对来访者分类并将目标指向3个自定义chain。

自定义chain大显神威的地方在于动态生成策略,例如VPN服务器上,需要对不同分组的用户区别对待管理,但是用户IP是随机分配的,不能根据IP来区分用户组,这时候可以预先定义好各组chain,利用VPN服务端软件的一些钩子,当用户登陆时自动添加策略引导到自定义chain上来匹配。如果这时候没有自定义chain,那么策略的数量将是(用户数×所属组策略数),每增加一个用户,都要把所属组的全部策略添加一遍,这样大量的时间花费在策略匹配上,性能下降很快。

命令

命令用来操作表和链,可以做这些操作:

  • 清空一个table中包含的所有chain

  • 创建、重命名或删除一个自定义chain,清空一个内置chain或者给内置chain设置policy(默认策略)

  • 在某个chain中追加、删除、修改一条策略

  • 显示策略

由于本文只讲概念和原理,所以暂时不提命令,命令的详细使用方法会在“iptables实用教程(二)”里说明。

以上就是iptables基本概念和原理 的详细内容,更多请关注学派吧其它相关文章!

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/server/2771.html

(0)
打赏 微信扫一扫 微信扫一扫
云大使的头像云大使
上一篇 2018年12月19日 下午9:49
下一篇 2018年12月19日 下午9:49

相关推荐

  • Linux/centos无法打包-报错Read-only file system的解决方法-学派吧

    问题描述: 1:Linux系统变成只读了,复制文件提示:Read-only file system,如图所示: 2:centos系统无法打包、无法建立文件夹、无法启动宝塔等多重情况。都有可能是这个原因。 解决方法: 使用fsck手动修复,具体操作如下 注:如果硬盘故障则需要更换硬盘。 重启系统后使用root进入单用户模式,运行 fsck.ext3 -y /d…

    2019年5月1日
    3.8K00
  • apache防盗链和隐藏版本信息-Linux运维-学派吧

    有需要服务器方面的需求和咨询,可以联系博主 QQ 7271895 文章目录[隐藏] 一、防盗链 二、隐藏版本信息 实验要求: 三台虚拟机分别是:linux和两台windows虚拟机,linux虚拟机为服务器,Windows7-1为客户端,Windows7-2为盗链端。 实验步骤: 一、防盗链 1.把httpd、apr、apr-util安装包解压缩到/opt目…

    2018年9月30日
    2.0K00
  • nginx和apache添加brotli算法压缩网站-Linux运维-学派吧

    有需要服务器方面的需求和咨询,可以联系博主 QQ 7271895 文章目录[隐藏] 什么是brotli? 安装依赖文件[仅限centos] 编译安装brotli库 apache/nginx添加编译参数 apache/nginx修改配置文件 出错解决办法 什么是brotli? brotli是Google开发的最新压缩算法,有效减少网站传输数据具体内容请查看WI…

    服务器运维 2018年9月30日
    2.6K00
  • Linux删除目录下的文件的10种方法小结

    小编给大家收藏整理的Linux删除目录下的文件的10种方法,文中还给大家提到了Linux 删除文件夹和文件的命令,具体内容详情大家参考下本文 rm -f * #最经典的方法,删除当前目录下的所有类型的文件 find . -type f -delete或find . -type f -exec rm -f {} \; #用find命令查找普通文件并删除or用f…

    服务器运维 2018年7月9日
    2.2K00
  • 腾讯阿里云登录宝塔面板提示”请使用正确的入口登录”或 404

    相关问题: 原因: 使用云服务器连接宝塔面板时,提示”请使用正确的入口登录面板”或”404 NOT FOUND”,是由于安全入口校验失败。 当前宝塔已开启安全入口登录,新装机器都会随机生成 8 位字符的安全入口名称。若您忘记安全入口,可以使用以下方式解决: 解决方案: 安全提示 关闭安全入口将使您的面板登录地址…

    2026年1月5日
    45100

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部
---------官方优惠叠加渠道折扣:通过我们购买腾讯云/阿里云,价格更低,服务更优。更有专业配置指导与服务。微信同步:18838889666----