〔转载〕构筑防火墙之IPtables搭建防火墙的规则

转载 2006年06月20日 13:16:00

一般情况下,iptables已经包含在了Linux发行版中,可以运行iptables --version来查看系统是否安装了iptables。在我使用的Fedora Core 1中,安装的版本是iptables v1.2.8。如果你的系统确实没有安装iptables,那么可以从以下地址下载: http://www.netfilter.org/

查看规则集

虽然上文对iptables的用法作一个简单介绍,但现实中我们可能需要知道更完整的信息,这时我们可以运行man iptables来查看所有命令和选项的完整介绍,也可以运行iptables help来查看一个快速帮助。要查看系统中现有的iptables规划集,可以运行以下命令:

 

iptables list

下面是没有定义规划时iptables的样子:

 

  Chain INPUT (policy ACCEPT)
  target   prot opt source               destination
  
  Chain FORWARD (policy ACCEPT)
  target   prot opt source               destination         
  
  Chain OUTPUT (policy ACCEPT)
  target   prot opt source               destination   
  
如上面的例子所示,每一个数据包都要通过三个内建的链(INPUT、OUTPUT和FORWARD)中的一个。 filter是最常用的表,上文所示设置所有的表规则的基本语法:iptables [-t table] command [match] [target]。

现实中,不一定要用到这里所列出的所有选项,也不一定是以这个顺序。当然,这是一种惯例,因为规则一般都比较长,为了清晰起见,最好能够按照这个顺序。

在没有指定规则表的情况下,缺省时使用的filter表。在filter表中最常用的三个目标是ACCEPT、DROP和REJECT。DROP会丢弃数据包,不再对其进行任何处理。REJECT会把出错信息传送至发送数据包的主机。虽然有时会有一些预想不到的影响,但在很多时候它还是非常有用。

增加规则

本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意的攻击者在活动:

  # iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP

要了解有关iptables详细的参数和命令格式,请使用man iptables查看。可以说,现在我们对于网络上的恶意攻击者已经深恶痛绝,但不管怎么说,我们也不能因为憎恨它们就以同样的方法对其实行简单的报复,至少这种事情不能在你的网络里发生。因此,我们也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令也只是稍有不同:

 

  # iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP
  

注意这里的A选项,如前所述,使用它说明是给现有的链添加规则。

删除规则

网络上的恶意攻击者总是在变化着的,因此我们也要不断改变IP。假设我们了解的一个网上攻击者转移到了新的IP地址,而其老的IP地址被分配给了一些清白的用户,那么这时这些用户的数据包就无法通过你的网络了。这种情况下,我们可以使用带-D选项的命令来删除现有的规则:

  # iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP
  

 

缺省的策略

创建一个具有很好灵活性,可以抵御各种意外事件的规则需要花大量的时间。对于那些不想这样做的人,最基本的原则就是“先拒绝所有的数据包,然后再允许需要的”。下面我们来为每一个链设置缺省的规则:

  # iptables -P INPUT DROP
  # iptables -P FORWARD DROP
  # iptables -P OUTPUT ACCEPT
  

这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。但很多时候,我们还是需要接收外部信息的。这时可使用以下命令:

 

  # iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
 

SYN的使用

我们不能关闭所有的端口,那将会把我们自己完全“与世隔绝”。我们也不能只指定某些端口处于打开状态,因为我们无法预见哪一个端口将会被使用。事实上,只简单地允许目的地为某一特定端口的数据流通过将对阻止恶意的攻击毫无意义。那么我们怎样才能设置一个有效的规则,即可以允许普通用户正常通过,又可以阻止恶意攻击者访问我们的网络呢?

对于刚开始使用iptables的人,我们可以充分利用syn标识来阻止那些未经授权的访问。因为iptables只检测数据包的报头,所以不会增加有效负荷。事实上,除iptables以外,很多其它有用的数据包分析都是基于报头的。

比如,在进行Web冲浪时,一个请求从你的PC发送至其它某一个地方的Web服务器之上,接着该服务器就会响应请求并且向你发回一个数据包,并且得到你的系统上的一个临时端口。与响应请求不同的是,服务器并不关心你所传送的内容。这们可以利用这种特点,来设置一个规则,让它阻止所有没有经过你的系统授权的TCP连接:

 

  # iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP

 

这里的-i指的是网卡,-p则是指协议,--syn则表示带有syn标识设置的TCP数据包。从中我们可以看出,对TCP/IP的了解将非常有利于维护网络安全。SYN用于初始化一个TCP连接,如果你在自己的机器上没有运行任何服务器,别人自然也就不会向你发送SYN数据包了。

就这点而言,有人会说:何必如此麻烦?的确,我们有更简单的创建防火墙的方法,也有很多不错的软件也可以帮助我们来构建自己的规则集,但是我们应该清楚,最简单的办法,往往不是最好的方法。既然我们有更好的方法,为什么不使用呢?

共享一个Internet连接

网络地址翻译和IP伪装都可以实现多台主机共享一个Internet连接,而这个局域网可以是Linux和Windows系统组成的多系统局域网。假设现在我们有一台机器有两个网卡,其中eth0为“公共”网卡,eth1为“私有”网卡。

换句话说,eth0被分配了一个静态的,可路由的IP地址,而eth1则被分配给了一个私有的、不能路由的IP,也就是说该IP是属于该局域网子网的。要实现上述功能,我们需要向nat和filter表中添加一些链:

  # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  # iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state 
   RELATED,ESTABLISHED -j ACCEPT
  # iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT

这显示了有状态的数据包检测的价值。请注意,我们这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许的,而所有来自局域网内流向外的数据包则都允许通过 (注意:这里的filter是缺省的表,但它并不是必须的)。第一条规则让所有流出的信息看起来都是来自防火墙机器的,而并不会显示出防火墙后面还有一个局域网。

下面的例子是为FORWARD和POSTROUTING链设置了缺省的策略,在使用伪装时,有一个缺省的POSTROUTING DROP策略是非常重要的,否则,就有可能有心怀恶意的用户突破网关后伪装它自己的身份。

 

  # iptables -t filter -P FORWARD DROP
  # iptables -t nat -P POSTROUTING DROP

下面的例子是为了拨号连接设置的,它可以动态地分配IP地址:

 

  # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

 

规则的保存

使用脚本更改规则的问题是:改动每个规则都要调用命令iptables,而每一次调用iptables,它首先要把netfilter内核空间中的整个规则集都提取出来,然后再插入或附加,或做其他的改动,最后,再把新的规则集从它的内存空间插入到内核空间中,这显然会花费很多时间。

为了解决这个问题,可以使用命令iptables-save和restore 。iptables-save用来把规则集保存到一个特殊格式的文本文件里,而iptables-restore则用来把这个文件重新装入到内核空间中。

这两个命令最好的地方在于一次调用就可以装载和保存规则集,而不像脚本中每个规则都要调用一次iptables。

iptables-save运行一次就可以把整个规则集从内核里提取出来,并保存到文件里,而iptables-restore每次装入一个规则表。换句话说,对于一个很大的规则集,如果用脚本来设置,那这些规则就会反复地被卸载、安装很多次,而我们现在可以把整个规则集一次就保存下来,安装时则是一次一个表,这可是节省了大量的时间。所以,一旦测试结果令你满意,你就可以将它们保存为脚本:

  # iptables-save > iptables-script

现在,信息包过滤表中的所有规则都被保存在文件iptables-script中。无论何时再次引导系统,都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,恢复指令如下所示:

 

  # iptables-restore iptables-script

如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化shell脚本中。

事实上,大部分发行版都为用户提供了一个可以自动加载的文件,让用户在其中编辑规则集,并且大部分发行版都会有一个已经预先配置好的防火墙。不同的发行版的配置文件位置不尽相同,我们可以使用命令locate iptables来找到配置文件。对于Red Hat或者 Fedora Core而言,这个配置文件位于/etc/sysconfig/iptables。该文件初始的内容如下:

 

1 # Firewall configuration
2 *filter
3 :INPUT <target> [0:0]
4 :FORWARD <target> [0:0]
5 :OUTPUT <target> [0:0]
6
7 # your rules here
8 
9 COMMIT

建议将其基本框架改成以下内容:

 

1 *filter
 2 :INPUT DROP [0:0]
 3 :FORWARD DROP [0:0]
 4 :OUTPUT ACCEPT [0:0]
 5
 6 # allow local loopback connections
 7 -A INPUT -i lo -j ACCEPT
 8
 9 # drop INVALID connections
10 -A INPUT   -m state --state INVALID -j DROP
11 -A OUTPUT  -m state --state INVALID -j DROP
12 -A FORWARD -m state --state INVALID -j DROP
13
14 # allow all established and related
15 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
16 
17 # add anymore rules here
18
19 COMMIT

相关文章推荐

linux一些常用iptables防火墙规则整理收集

这里是一个朋友在使用linux系统时的一些常用到的iptables防火墙规则整理了一篇文章,下面我转过来作记录的同时也给各位同学参考参考。 安装iptables防火墙 如果没有安装ip...

linux防火墙iptables常用规则(屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链)

本文介绍25个常用的iptables用法。如果你对iptables还不甚了解,可以参考上一篇iptables详细教程:基础、架构、清空规则、追加规则、应用实例,看完这篇文章,你就能明白iptables...

linux下防火墙iptables用法规则详解

iptables简介及使用

配置一个生产的iptables防火墙规则

注意执行顺序,-A表示Append,是在所有规则之后添加新的规则,iptables是从上往下匹配规则,成功后则不继续匹配,所以建议匹配量最大的规则放在最上面。一、规则配置1.清空原有规则(iptabl...
  • pur_e
  • pur_e
  • 2017年01月16日 18:15
  • 254

linux防火墙基础和管理设置iptables规则

一、linux防火墙基础 防火墙分为硬件防火墙和软件防火墙。 1.概述 linux 防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。        包...

基于iptables的网桥防火墙的搭建

基于iptables的网桥防火墙的搭建 目标: 在不改变网络拓补结构的前提下,实现一个防火墙,对经过该防火墙的数据进行过滤。在此,我们主要是想对所有与服务器进行通信的数据进行过滤。结构图如下: ...
  • DLUTXIE
  • DLUTXIE
  • 2013年01月01日 15:42
  • 5872

使用iptables建设Linux防火墙

  • 2014年10月27日 16:23
  • 376KB
  • 下载

配置iptables防火墙系统实例

  • 2012年09月07日 12:26
  • 2.1MB
  • 下载

Iptables防火墙使用

查看防火墙规则: iptables -nvL –line-number -L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数 -n 不对ip地址进...

iptables防火墙的配置

  • 2009年07月03日 16:03
  • 291KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:〔转载〕构筑防火墙之IPtables搭建防火墙的规则
举报原因:
原因补充:

(最多只允许输入30个字)