配置
Linux
防火墙
一
.
包过滤防火墙的通常概念
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