访问控制工具 —— iptables
发布于 2015-05-31 00:56

转载声明:著作权归作者所有,该内容欢迎转载,但转载时务必保留以下网址和作者信息。尊重原创,感谢有你!

作者:Chongyi 原文地址:https://www.insp.top/content/net-access-control-iptables

我是一个十分怕麻烦的人。很不幸,学习 linux 真的有时候很麻烦,因为这个系统真的非常不友好,包括这个系统下面的一系列软件和工具,简直不人道。不要试图以高高在上的姿态告诉我命令行是一种人性化的操作模式,这就是放屁。好了,抱怨到此为止。至于为什么要抱怨,原因恰好是今天的主角 —— iptables

我不喜欢 linux 系统的很多工具主要是复杂的命令记忆。iptables 正是如此。不过,也正是这样复杂的工具,提供了无比精细的控制能力。本文作为我个人学习这个工具的笔记,希望能够给同样在学这个的朋友提供一些小小的帮助。

iptables,一个运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的流动与转送。

通常iptables都需要内核层级的模块来配合运作,Xtables是主要在内核层级里面iptables API运作功能的模块。因相关动作上的需要,iptables的操作需要用到超级用户的权限。

—— 摘自维基百科

简单了解 iptables

我们可以将 iptables 定义为 linux 系统下的防火墙,虽然这样并不严格,你马上就会知道为什么。

我们应该称其为访问控制工具。该工具根据设定的访问规则来进行网络数据流量的控制行为。规则很容易理解,当存在许多规则时我们会将其按照优先级排列,依次匹配。同时,网络流量流向和相关操作,根据情况不同,会存在多类规则(如常见的是否批准流量流入或者流出、流量转发等等),每个分类下都会有一溜溜的规则存在(当然你也可以不设定规则)。

Iptables 工作在用户(模式)空间下,因此这样看来,iptables 不能算作防火墙,要知道防火墙是处于整个系统中网络边缘的位置。实际上,iptables 只是定义规则的工具,具体的流量过滤或转发都是交由内核(模式)空间中的程序(位置)进行处理。包含几个位置呢?五个,分别是:

1.内核空间中:从一个网络接口进来,到另一个网络接口去的 2.数据包从内核流入用户空间的 3.数据包从用户空间流出的 4.进入/离开本机的外网接口 5.进入/离开本机的内网接口

注:本文中大多数内容摘自 iptables详解 http://blog.chinaunix.net/uid-26495963-id-3279216.html,建议阅读原文。本文是用于个人的笔记记录。

因此,iptables 的规则也主要针对这几个位置进行制定。五个位置在 iptables 分别有其独立的规则链:

1.PREROUTING (路由前) 2.INPUT (数据包流入口) 3.FORWARD (转发管卡) 4.OUTPUT(数据包出口) 5.POSTROUTING(路由后)

这是 NetFilter 规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。

NetFilter 才是实际的防火墙,程序定义了五个工作位置(或者钩子函数,Hook Function),iptables 用于建立规则,按照规则与具体的钩子绑定,当数据经过则会触发,NetFilter 通过判断然后决定数据走向(其实就是过滤)。

*** 文章整理中 ***

灵感 INSPIRER