简介:
图1
Centos做为服务器级操作系统,防火墙是不可缺少的。防火墙的主要功能为控制进出网络包,防火墙就如小区门卫的工作职责,检查出入小区居民的身份,如果不符合小区门卫管理条例的路人,将被拒绝在小区外面。看来防火墙到作用还是非常大的。平常大家用的windows机器上也有防火墙,只不过普通用户是不会关注这个防火墙的,默认情况下windows是不会开启防火墙,因为对于普通用户很难理解防火墙的工作原理,以及如何使用。但做为专业的程序员还是必须要理解的。
原因:
这篇文章我不想照着Centos官方文档翻译出来如何使用iptables,而是先告诉大家我是如何通过对网络编程到理解,以及对Linux的理解来看待Centos的iptables的使用。通过对这些基本概念的理解,就不会再对Iptables规则感到是如此的复杂。
理解:
图2
网络通信的过程为,信息源,媒介,路由,接收端。Centos在这里可以扮演信息源,接收端,路由这三个角色。对应iptables里的:
INPUT:网络包的目标ip地址为本地计算机
FORWARD:网络包路过本地计算机
OUTPUT:从本地计算机发出的网络包
为啥官方文档要用chain这个单词,因为在每一个消息包映射到相应的策略的时候,都要从第一条往下走,如果没有遇到匹配的策略,数据包就会被丢弃。因此每种策略也被叫做chain。通过一个数据包修带的数据信息,iptables可以从协议,ip地址,端口号。以及网络网络状态来对网络包进行处理了。下面简单说下iptables命令。
$iptables -L -v
这个很容易理解,就是列出iptables 所有规则, -v 就是详细信息
$iptables -P INPUT ACCEPT
-P对应的是(policy)策略的意思,对应所有进入的数据包接受,为啥要执行这个命令?因为很多时候都是远程ssh登录主机的,如果没有这条,后面执行的命令,可能将关闭ssh连接,到时候只能去机房从新配置iptables了。
$iptables -F
-F 对应刷新iptables规则,对应的英文为flush。
$iptables -A INPUT -i lo -j ACCEPT
-A 对应增加(append)一条规则, -i对应设备,接口(interface), lo对应localhost, -j对应(jump)。为啥会这样设计。还是开头说的,数据包都是从对应策略的第一条开始走的,一旦遇到匹配的规则,自然是跳转到对应的命令执行上。
$iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
-m对对应的是加载state模块(module),来检测相应的网络包状态(--state)。ESTABLISHED,和RELATED 对应的是应经建立连接的,或者和建立连接的网络包相关的网络包,直接可以放行。
$iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这条对应的是协议(protocol)为tcp协议,端口为22的网络放行,22不就是ssh默认的端口吗。
$iptables -P INPUT DROP
这条对应所有目的地到本地的数据包,全部丢弃
$iptables -P FORWARD DROP
路过本地的所有数据包丢弃。
$iptables -P OUTPUT ACCEPT
所有从本地发出的数据包,放行。
上面是如何通过命令行添加一条命令,参考官方网站对iptables的定义,但这种方法不是那么智能,因为这种方法,是刷新整个iptables的规则,如果你ssh链接上去,你以为是你添加了一条规则,然后执行了DROP,很显然你被坑了,你被永久的拒之门外,只能让机房的同学重启机器,因为你没执行iptables save,所以还是上次的规则。
更安全可靠的方法应给是直接编辑:vi /etc/sysconfig/iptables , 添加一条,保存,这样比较安全。也比较方便,如果通过命令行,就得将所有得规则写成shell,每次得往shell里添加一条命令,然后保存,重启。
总结:
如果对网络通信比较了解,知道两台机器是如何连通的,如何发送网络数据包的。其实还是很容易理解iptalbes涉及的策略为啥要这么设计了。对于里面的各种参数,如果经常使用linux的话,都是很容易记住和理解的。计算机的知识很杂也很多,如果全靠记忆去学习,那随着时间的冲洗很快就将你学习过的东西洗刷的干干净净。只有当你理解了,为啥人家要这样设计,而不是那样设计,这样在你遇到这个问题的时候,你是站在设计者的角度看待问题的,只需要简单的查询下,就可以很快对这东西上手了。还有学习计算机英语也是相当重要,计算机本来就是英语国家人民发明的,所以很多词汇啊,命令啊,参数啊,都是英语单词,或者英语简写。这也是为啥外国人比咱学计算机的一个重要优势。
参考: