学派吧-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

相关推荐

  • inode索引节点用满报错mkdir: cannot create directory `xxx’: No space left on device

    小编今天维护一台服务器、数据库无法启动、也无法建立文件目录等操作。都提示No space left on device 后来仔细查看洗了 是因为inode满了。那就赶紧想办法清理下了。 命令:df -i 其中/dev/mapper/vg_have-lv_root 884208 884208 0 100% /索引节点 (inode)满了 已经找出问题所在,那么…

    2019年4月18日
    3.2K00
  • 学派吧-NGINX反向代理下TOMCAT集群的介绍-linux教程

    下面小编就为大家带来一篇LINUX中NGINX反向代理下的TOMCAT集群(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 Nginx具有反向代理(注意和正向代理的区别)和负载均衡等特点。 这次Nginx安装在 192.168.1.108 这台linux 机器上。安装Nginx 先要装openssl库,gcc,PCRE,…

    服务器运维 2018年12月12日
    2.7K00
  • linux ~/.是什么如何使用教程详解

    linux ~/.是什么目录? linux ~/是一般情况下表示当前目录。但是当开终端的时候,都是在用户名目录下面的,所以这个就是用户名目录里面的东西。而.fcitx,加了一个点都是隐藏文件。按CTRL+H可以显示隐藏文件。 linux中 ~ 表示的是什么目录? ~ 表示代码主目录,也就是当前登录用户的用户目录。 比如:我登录用户是chen cd ~ ~ 代…

    服务器运维 2019年3月13日
    2.7K00
  • 宝塔apache无法启动:httpd: Syntax error on line 501 of

    今天宝塔突然apache启动不了.网站打不开。提示: 报错:Apache配置规则错误:[url=]httpd: Syntax error on line 501 of /www/server/apache/conf/httpd.conf: Syntax error on line 1 of /www/server/panel/vhost/apache/btw…

    2018年10月8日
    9.4K00
  • 如何处理能 ping 通但端口不通时端口可用性探测-linux教程

    本篇文章给大家带来的内容是关于如何处理能 ping 通但端口不通时端口可用性探测,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 能 ping 通但端口不通时端口可用性探测说明 端口可用性探测工具介绍 不同的操作系统,端口可用性探测所使用的工具也有所不同。 Linux 环境下端口可用性探测工具介绍 traceroute 是几乎所有 Linux…

    服务器运维 2018年11月21日
    3.0K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

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

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