登录 |  注册 |  繁體中文


细说Linux iptables防火墙--基本概念(1)

分类: 服务器相关 颜色:橙色 默认  字号: 阅读(2078) | 评论(0)

如何使用netfilter/iptables构建防火墙

基本概念

典型的防火墙设置有两个网卡:一个流入,一个流出。iptables读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。

通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:

iptables [-t table] command [match] [target]

1.表(table)

[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。各表实现的功能如表1所示。

 

表1 三种表实现的功能

 

2.命令(command)

command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。表2是最常用的一些命令及例子。

 

表2 命令的功能和样例

 

3.匹配(match)

iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。这里将介绍可用于采用任何协议的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。

 

表3 通用匹配及示例说明

 

4.目标(target)

目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。表4是常用的一些目标及示例说明。

除表4外,还有许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。

 

表4 目标及示例说明


 

iptables -t [table]:指定表
  -A CHAIN :附加一条规则,在链的尾部添加。
  -I CHAIN [num]:在指定位置添加。
  -D CHAIN [num]:删除指定链,第num条规则。
  -R CHAIN [num]:替换指定的规则。
  -F [CHAIN]: 清空指定链的规则,如果省略CHAIN,则清空这个表中的所有链的规则。
  -P CHAIN:设定指定链的默认策略
  -N:自定义一个新的空链
  -X:删除一个自定义的空链
  -Z:清空指定链中的所有规则计数器
  -E:重新命名自定义链
  -L:显示指定表中的所有规则
    -n:以数字格式显示主机地址和端口号。
    -v:显示详细信息;
    -vv:显示更详细信息。
    -x:显示精确值
    --line-numbers:显示规则号

这类匹配是通用的匹配,可以通过man查询或者查询在线文档获取更多信息
-s:指定源ip地址,-d:指定目的地址;
-p{tcp|udp|icmp}:指定协议
-i eht0:指定数据报文流入的接口
-o eth0:指定数据报文流出的接口


-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num 匹配目标端口号
--sport num 匹配来源端口号


ACCEPT     :允许通过
DROP       :拒绝
REJECT     :拒绝的更彻底
DNAT       :目标地址转换
SNAT       :源地址转换
REDIRECT   :端口重定向
MASQUERAND :地址伪装
LOG        :记录日志


SNAT和DNAT的实现
 
由于我们现在IP地址十分紧俏,已经分配完了,这就导致我们必须要进行地址转换,来节约我们仅剩的一点IP资源。那么通过iptables如何实现NAT的地址转换呢?
 
1.SNAT基于原地址的转换
基于原地址的转换一般用在我们的许多内网用户通过一个外网的口上网的时候,这时我们将我们内网的地址转换为一个外网的IP,我们就可以实现连接其他外网IP的功能。
所以我们在iptables中就要定义到底如何转换:
定义的样式:
比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成62.16.100.1这个假设出来的外网地址:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 62.16.100.1
这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成62.16.100.1这个IP.
那么,如果62.16.100.1不是固定的怎么办?
我们都知道当我们使用联通或者电信上网的时候,一般它都会在每次你开机的时候随机生成一个外网的IP,意思就是外网地址是动态变换的。这时我们就要将外网地址换成 MASQUERADE(动态伪装):它可以实现自动寻找到外网地址,而自动将其改为正确的外网地址。所以,我们就需要这样设置:
         iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
         这里要注意:地址伪装并不适用于所有的地方。
 
2.DNAT目标地址转换
对于目标地址转换,数据流向是从外向内的,外面的是客户端,里面的是服务器端通过目标地址转换,我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器,而我们的服务却放在内网服务器的不同的服务器上。
 
    如何做目标地址转换呢?:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --todestination 192.168.8.5
        目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上

 




姓 名: *
邮 箱:
内 容: *
验证码: 点击刷新 *   

回到顶部