配置
Linux
防火墙
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一
.
包过滤防火墙的一般概念
1.
概念
:
是用一个软件查看所流经的数据包的包头
(header),
以决定丢弃还是接受这个包
2.
工作层次
:
工作在网络层
3.
包过滤防火墙的工作原理
使用过滤器
:
过滤系统根据过滤规则原则决定是否让数据包通过,检查的
IP
头和
TCP
或
UDP
头包括
:IP
源地址
,IP
目标地址
,
协议
,TCP
或
UDP
包的源端口,
TCP
或
UDP
包的目标端口
,ICMP
消息类型
,TCP
包中的
ACK
位
,
数据包到达的端口
,
数据包出去的端口
通过屏蔽特定的端口可以禁止特定的服务
过滤器的实现
:
过滤路由器检查数据包的特定信息
4.
包过滤操作的基本过程
:
5.
包过滤的优缺点
优点
:
小型网络包过滤较容易实现,处理包的速度快
,
提供透明服务
缺点
:
一些包过滤网关不支持有效的用户认证
规则表很快,会变得很大而且复杂
包过滤防火墙只能阻止外部主机伪装内部主机的
IP
,对于外部主机伪装外部主机的
IP
欺骗却不能阻止
二
.Netfilter/iptables
1.Netfilter/iptables
是与最新的
2.4.x
版
Linux
内核集成的
IP
信息包过滤系统
2.Netfilter
网络底层架构
(1).Netfilter
是新的用来实现防火墙的过滤器
.
而
iptables
是用来指定
Netfilter
规则的用户工具,它为用户配置防火墙规则提供了方便
.iptables
可以加入、插入或删除核心包过滤表格链中的规则。实际执行者是
netfilter
及其相关模块
(2).Netfilter/IPtables
系统的主要功能:
状态包过滤
(
连接跟踪
)
各种网络地址翻译
灵活、易扩展的急智机制
大量的增强型补丁包
(3).Netfilter/iptables
的用途
:
建立
Internet
防火墙和基于状态的包过滤
用
NAT
和伪装
(masquerading)
共享上网
用
NAT
实现透明代理
用修改
IP
包头的
ToS
字段实现更复杂的功能
和
tc_iproute2
配合使用可以实现
QoS
路由
(4).Netfilter/iptables
系统的优点
:
它可以配置有状态的防火墙,能够指定并记住为发送或接收信息包所建立的连接的状态,有
4
种有效状态
,
分别为
ESTABLISHED
、
INVALID
、
NEW
和
RELATED
3.Netfilter/iptables
的内核空间和用户空间
netfilter
是内核空间
(KernelSpace)
,是内核的一部分,由一些表组成,每个表由若干链
(chains)
组成,而每条链中有一条或数条规则
(rule)
4.Netfilter/iptables
的工作过程
netfilter/iptables IP
信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在
Linux
内核中。在信息包过滤表中,规则被分组放在我们所谓的链(
chain
)中。如果某个信息包与规则匹配,那么使目标
ACCEPT
允许该信息包通过。还可以使用目标
DROP
或
REJECT
来阻塞并杀死信息包。根据规则所处理的信息包的类型,可以将规则分组在链中。处理入站信息包的规则被添加到
INPUT
链中。处理出站信息包的规则被添加到
OUTPUT
链中。处理正在转发的信息包的规则被添加到
FORWARD
链中。建立规则并将链放在适当的位置之后,就可以开始进行真正的信息包过滤工作了。这时内核空间从用户空间接管工作。当信息包到达防火墙时,内核先检查信息包的头信息,尤其是信息包的目的地。我们将这个过程称为路由。
安装
netfilter/iptables
系统
因为
netfilter/iptables
的
netfilter
组件是与内核
2.4.x
集成在一起的,所以只需要下载并安装
iptables
用户空间工具。
三
.
安装和配置
netfilter/iptables
系统:
1.
安装
netfilter/iptables
硬件:要使用
netfilter/iptables
,需要有一个运行
Linux OS
并连接到因特网、
LAN
或
WAN
的系统。
软件:带有内核
2.4
或更高版本的任何版本的
Linux OS
。可以从
[url]http://www.kernel.org[/url]
下载最新版本的内核。
安装前的准备
在开始安装
iptables
用户空间工具之前,需要对系统做某些修改。首先,需要使用
make config
命令来配置内核的选项。在配置期间,必须通过将
CONFIG_NETFILTER
和
CONFIG_IP_NF_IPTABLES
选项设置为
Y
来打开它们,因为这是使
netfilter/iptables
工作所必需的。
2.
建立规则和链
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用
netfilter/iptables
系统提供的特殊命令
iptables
,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
$ iptables [-t table] command [match] [target]
表(
table
)
[-t table]
选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:
filter
、
nat
和
mangle
。该选项不是必需的,如果未指定,则
filter
用作缺省表。
filter
表用于一般的信息包过滤,它包含
INPUT
、
OUTPUT
和
FORWARD
链。
nat
表用于要转发的信息包,它包含
PREROUTING
、
OUTPUT
和
POSTROUTING
链。如果信息包及其头内进行了任何更改,则使用
mangle
表。该表包含一些规则来标记用于高级路由的信息包,该表包含
PREROUTING
和
OUTPUT
链。
注:
PREROUTING
链由指定信息包到达防火墙就改变它们的规则所组成,而
POSTROUTING
链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
命令(
command
)
上面这条命令中具有强制性的
command
部分是
iptables
命令的最重要部分。它告诉
iptables
命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。以下是最常用的一些命令:
-A
或
--append
:该命令将一条规则附加到链的末尾。
示例:
$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT
该示例命令将一条规则附加到
INPUT
链的末尾,确定来自源地址
205.168.0.1
的信息包可以
ACCEPT
。
-D
或
--delete
:通过用
-D
指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。下面的示例显示了这两种方法。
示例:
$ iptables -D INPUT --dport 80 -j DROP
$ iptables -D OUTPUT 3
第一条命令从
INPUT
链删除规则,它指定
DROP
前往端口
80
的信息包。第二条命令只是从
OUTPUT
链删除编号为
3
的规则。
-P
或
--policy
:该命令设置链的缺省目标,即策略。所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。
示例:
$ iptables -P INPUT DROP
该命令将
INPUT
链的缺省目标指定为
DROP
。这意味着,将丢弃所有与
INPUT
链中任何规则都不匹配的信息包。
-N
或
--new-chain
:用命令中所指定的名称创建一个新链。
示例:
$ iptables -N allowed-chain
-F
或
--flush
:如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。
示例:
$ iptables -F FORWARD
$ iptables -F
-L
或
--list
:列出指定链中的所有规则。
示例:
$ iptables -L allowed-chain
匹配(
match
)
iptables
命令的可选
match
部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其示例和说明:
-p
或
--protocol
:该通用协议匹配用于检查某些特定协议。协议示例有
TCP
、
UDP
、
ICMP
、用逗号分隔的任何这三种协议的组合列表以及
ALL
(用于所有协议)。
ALL
是缺省匹配。可以使用
!
符号,它表示不与该项匹配。
示例:
$ iptables -A INPUT -p TCP, UDP
$ iptables -A INPUT -p ! ICMP
在上述示例中,这两条命令都执行同一任务
—
它们指定所有
TCP
和
UDP
信息包都将与该规则匹配。通过指定
! ICMP
,我们打算允许所有其它协议(在这种情况下是
TCP
和
UDP
),而将
ICMP
排除在外。
-s
或
--source
:该源匹配用于根据信息包的源
IP
地址来与它们匹配。该匹配还允许对某一范围内的
IP
地址进行匹配,可以使用
!
符号,表示不与该项匹配。缺省源匹配与所有
IP
地址匹配。
示例:
$ iptables -A OUTPUT -s 192.168.1.1
$ iptables -A OUTPUT -s 192.168.0.0/24
$ iptables -A OUTPUT -s ! 203.16.1.89
第二条命令指定该规则与所有来自
192.168.0.0
到
192.168.0.24
的
IP
地址范围的信息包匹配。第三条命令指定该规则将与除来自源地址
203.16.1.89
外的任何信息包匹配。
-d
或
--destination
:该目的地匹配用于根据信息包的目的地
IP
地址来与它们匹配。该匹配还允许对某一范围内
IP
地址进行匹配,可以使用
!
符号,表示不与该项匹配。
示例:
$ iptables -A INPUT -d 192.168.1.1
$ iptables -A INPUT -d 192.168.0.0/24
$ iptables -A OUTPUT -d ! 203.16.1.89
目标(
target
)
我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:
ACCEPT
:当信息包与具有
ACCEPT
目标的规则完全匹配时,会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。该目标被指定为
-j ACCEPT
。
DROP
:当信息包与具有
DROP
目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为
-j DROP
。
REJECT
:该目标的工作方式与
DROP
目标相同,但它比
DROP
好。和
DROP
不同,
REJECT
不会在服务器和客户机上留下死套接字。另外,
REJECT
将错误消息发回给信息包的发送方。该目标被指定为
-j REJECT
。
示例:
$ iptables -A FORWARD -p TCP --dport 22 -j REJECT
RETURN
:在规则中设置的
RETURN
目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如
INPUT
之类的主链,则使用该链的缺省策略处理信息包。它被指定为
-jump RETURN
。示例:
$ iptables -A FORWARD -d 203.16.1.89 -jump RETURN
还有许多用于建立高级规则的其它目标,如
LOG
、
REDIRECT
、
MARK
、
MIRROR
和
MASQUERADE
等。
保存规则
现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则,那么必须将该规则集保存在文件中。可以使用
iptables-save
命令来做到这一点:
$ iptables-save > iptables-script
现在,信息包过滤表中的所有规则都被保存在文件
iptables-script
中。无论何时再次引导系统,都可以使用
iptables-restore
命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:
$ iptables-restore iptables-script
如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化
shell
脚本中。
netfilter/iptables
系统的优点
netfilter/iptables
的最大优点是它可以配置有状态的防火墙,这是
ipfwadm
和
ipchains
等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为
ESTABLISHED
、
INVALID
、
NEW
和
RELATED
。
状态
ESTABLISHED
指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。
INVALID
状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态
NEW
意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后,
RELATED
表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables
的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
另外,
netfilter/iptables
是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
最新的
Linux
内核
2.4.x
具有
netfilter/iptables
系统这种内置的
IP
信息包过滤工具,它使配置防火墙和信息包过滤变得便宜且方便。
netfilter/iptables
系统使其用户可以完全控制防火墙配置和信息包过滤。它允许为防火墙建立可定制化的规则来控制信息包过滤。它还允许配置有状态的防火墙。
例
:WWW
服务器
198.168.80.251,FTP
服务器
198.168.80.252,E-mail
服务器
198.168.80.253
,包过滤防火墙的
eth0
与
Internet
相连
#touch /etc/rc.d/rilter-firewall
生成空的脚本,并添加可执行权限
#chmod u+x /etc/rc.d/filter-firewall
#echo "/etc/rc.d/filter-firewal">>/etc/rc.d/rc.local
使脚本能在系统启动时自动执行
#vi /etc/rc.d/filter-firewall
#!/bin/bash
echo "Starting iptables rules"
在屏幕上显示信息
echo "1">/proc/sys/net/ipv4/ip_forward
增加系统的
IP
转发功能
IPT=/sbin/iptables
定义变量
WWW-SERVER=192.168.80.251
FTP-SERVER=192.168.80.252
EMAIL-SERVER=192.168.80.253
IP_RANGE="192.168.80.0/24"
$IPT -F
刷新所有的链的规则
$IPT -P FORWARD DROP
转载于:https://blog.51cto.com/deusr/117136