服务电话:021-61305946

疑问解答

Linux的防火墙---IP Tables


IP Tables已经集成在Linux2.4及以上版本的内核中了。同Windows下的众多“傻瓜”防火墙不同的是,IP Tables需要用户自己定制相关的规则。

一、名字的来历

Linux防火墙是一种典型的包过滤防火墙。通过检测达到的数据包头中的信息,确定哪些数据包可以通过,哪一些应该被丢弃。防火墙行为的依据主要是数据包的目的地址、端口号和协议类型,所有这些都应该由管理员指定。

Linux中的包过滤引擎在2.4版本内核中做了升级。防火墙工具最初叫做ipchains,取这个名字的原因在于防火墙将一系列规则组成了一些“链(chains)”应用到网络数据包上。iptables则更进一步吧一些功能相似的“链”组合成一个个“表(tables)”。

上面的说法有些抽象,现在考虑一个具体的例子。iptables默认使用的表是“filter(过滤器)”,其中默认包含了三个链,分别是FORWARD、INPUT和OUTPUT。FORWARD链中定义的规则作用于那些需要转发到另一个网络接口的数据包。INPUT链中定义的规则作用于发送到本机的数据包。相对应的,OUTPUT链中定义的规则作用于从本机发送出去的数据包。

通常定义filter表就可以迎合大部分的安全需求,因为这个表包含了包过滤的所有内容。除了filter,iptables还包含有nat和mangle两个表。nat用于网络地址转换(NAT),mangle则用于修改除了NAT和包过滤之外的网络包。


二、初始化防火墙设置

iptables命令最常用的五个选项分别是-F、-P、-A、-D和-L。在大部分情况下,管理员只需要这五个选项就可以完成防火墙的规则设置。下图给出了这五个选项各自代表的含义。

iptables常用的五个选项

iptables -F命令在管理员决定从头开始的时候非常有用。由于防火墙的设置通常不会写得太长,因此在每次将服务器应用到一个新环境的时候重写防火墙设置是有好处的。这避免了因为疏忽而造成的前后设置上的冲突。要清空默认表(也就是filter表)中的数据,只要简单的使用下面这条命令即可。

IP Tables清除所有

也可以指定清空某一条特定的链。下面这条命令清空默认表(也就是filter表)中的INPUT链的规则。

IP Tables清除input

命令执行成功后,使用iptables -L命令查看当前防火墙设置,看上去应该如下:

查看当前配置

现在这张filter表空空如也,并且所有链的默认行为都是ACCEPT,这意味着所有的包都可以不受阻碍地通过防火墙。iptables -P用于给链设置默认策略,这条命令的基本语法如下:

设置默认策略

其中,chain-name是链的名字,也就是FORWARD、INPUT和OUPUT中的一个。target(目标)字段用于定义策略,filter表中共有九个不同的策略可供使用,但最常用的只有四个。ACCEPT表示允许包通过;DROP丢弃一个包;REJECT会在丢弃的同时返回一条ICMP错误消息;LOG则扮演了记事员的角色记录包的信息,并把它们写入日志。
 
下面这条命令将INPUT链的默认策略更改为DROP(丢弃),通常对服务器而言,将所有的链的默认策略设置为DROP是一个好的建议。

input链默认策略改为drop

执行完这条命令后,所有试图同本机建立连接的努力都会失败,因为所有从“外部”到达防火墙的包都被丢弃了,甚至连使用环回接口ping自己都不行。

ping
ping info

如法炮制,将FORWARD链的默认策略设置为DROP(丢弃)。

forward设置为drop

现在查看改动后的防火墙配置,可以看到INPUT和FORWARD链的规则都已经变为DROP了。

改动后查看


三、添加链规则

完成防火墙规则的初始化后,就可以着手添加链规则了。假设当前防火墙所在的主机是一台web服务器,为此应该允许外部主机能够连接到80端口(对应HTTP服务器)和22端口(对应SSH服务)。使用iptables -A命令添加链规则,该命令的基本语法如下:

添加链

其中chain-name代表链的名字,interface指定该规则用于哪个网络接口,target用于定义策略。如果防火墙主要用于保护本地主机,只要对INPUT链进行设置就可以了。为简便起见,假设只有一个网络接口eth0通向外部,lo是本地环回接口。为了实现防火墙规则的精确匹配,还可能用到下面的这些选项。

精确规则

下面这条命令添加了一条INPUTt链的规则,允许所有通过lo接口的连接请求,这样防火墙就不会阻止“自己连接自己”的行为了。

input链规则

这条命令中还使用了-p 选项。这个选项指定该规则应该匹配哪一种协议。支持的协议包括tcp、udp和icmp。ALL简单的把这三种协议都包含在内。

通常来说,还应该让外部主机能够ping到这台web服务器。这样当网站出现问题的时候,管理员可以简单地使用ping命令确定这台服务器是否还在运行。如果服务器拥有两个网络接口eth0和ppp0,分别对应内部网络和internet,那么一些管理员会倾向于将ppp0设置为丢弃外部的ping请求。不过现在并不需要考虑这些


ping规则

命令的-p选项指定该规则匹配协议icmp,紧跟的--icmp-type指定了icmp的类型代码。ping命令对应的类型代码是8.
接下来的两条命令增加了对22端口和80端口的访问许可。注意这次-p选项指定的协议类型是tcp,这是因为ssh服务和HTTP服务都是基于tcp协议的。


Linux的防火墙---IP Tables TCP

如果网络接口eth0通向internet,那么将SSH服务向全世界开放有时不那么令人放心。有些管理员可能希望更进一步,将SSH服务设置为只对本地网络的用户开放。下面的设置指定只有10.62.74.0/24这个网络中的主机可以访问22端口。

Linux的防火墙---IP Tables IP

很多时候,管理员想要做的并不仅仅是把别人挡在门外,还希望知道哪些人正在试图访问服务器。下面这条命令给input链添加了一条log(日志记录)策略。

Linux的防火墙---IP Tables LOG

默认情况下,防火墙记录到的访问信息被保存在var/log/messages中。这是一个文本文件,可以使用任何文本命令查看。事实上,这个目录记录了系统中的大部分行为,这是Linux主要的系统日志文件。一条典型的防火墙日志记录如下:

Linux的防火墙---IP Tables 日志文件

其中比较常用的记录字段有IN(接收数据包的网络接口)、SRC(数据包来源的IP地址)、DST(数据包的目的IP地址)及开头的日期和时间等。不过,系统自动生成的日志总体上并不那么“友好”,必要的时候可以借助一些日志分析工具。swatch和logcheck是两款常用的体质处理程序。

四、删除链规则

在大部分情况下,管理员在改变防火墙设置之前总是清空整条链规则,因为这样可以避免一些不必要的冲突。但是人难免会犯错,管理员有时候需要删除自己刚才的失误。
iptables提供了-D选项来删除链规则,有两种不同的语法用于删除一条规则。


Linux的防火墙---IP Tables 两种语法

第一种语法使用规则描述来匹配某条链规则。为此,用户必须一字不差地照搬当初使用-A选项添加时使用的描述。下面这条命令删除了对lo环回接口的规则设置。

Linux的防火墙---IP Tables 按描述删除

很少有人愿意使用这样冗长的命令。iptables -D命令的第二种形式(接收规则对应的编号)能够有效地减少管理员敲击键盘的次数。为此需要首先使用带-line-numbers选项的iptables -L命令查看链规则的编号。

Linux的防火墙---IP Tables 查看所有

下面这条命令删除了编号为11的链规则。

Linux的防火墙---IP Tables 按编号删除

五、防火墙保险吗

没有什么东西是绝对可靠的。防火墙制造商的宣传容易让人产生错觉,以为购买了防火墙产品就可以高枕无忧。如果一个大型站点的管理员抱有这样的想法,那将是极端危险的。系统管理员应该首先确保每项服务都做了足够安全的配置,保持对安全漏洞和补丁的关注,并且注重对内部员工的安全教育。不管怎么说,防火墙只是保证网络安全的辅助工具。

无论如何,时刻保持对安全问题的警惕,才是保证网络安全最有效的手段。

备注信息:

      如需要了解更多的安全产品,工业交换机产品,请浏览:上海自恒信息科技有限公司官网,查看自恒信息推荐IPS系统-用户组防御技术,工业交换机,光纤收发器,等相关产品。


工业交换机Copyright © 2016-2020 上海自恒信息科技有限公司 版权所有
推荐产品:工业交换机 | 光纤收发器 | 工业路由器 | 工业以太网交换机 | 二层工业以太网交换机 | 三层工业以太网交换机 | 工业级sfp光模块
网站地图|XML地图 备案序号:沪ICP备17046400号-1

友情链接: 揽阁信息 儿童内衣 UPS不间断电源 AOI 工业CT