Linux代理服务器与防火墙安装与应用

环境介绍:两台Linux系统(一台用于防火墙[两张网卡,一张连接外网,一张连接内网],一台XP客户机测试用

在2.0内核中,网络防火墙的操作工具名称是ipfwadm

在2.2内核中,网络防火墙的操作工具名称是ipchains(IP规则链)

在2.4之后的内核中,网络防火墙的操作工具名称是iptables(IP表)

netfilter与iptables

在Linux网络防火墙的管理与配置中需要明确以下两个概念

Linux的包过滤防火墙功能是由Linux的内核实现的,而不是由运行在Linux系统中的某个服务器程序实现的,在Linux的内核中是使用netfilter架构实现防火墙功能的

iptables实质上是Linux系统中为用户提供的netfilter管理工具,系统管理员可以使用iptables管理工具实现对Linux内核中网络防火墙的管理工作。管理工作主要包括防火墙策略的设定

iptables中的规则表与规则链

规则链

iptables的作用在于为netfilter的处理提供相关的规则,iptables默认具有5条规则链:PREROUTING(预先路由)、FORWARD(转发)、POSTROUTING、INPUT、OUTPUT

Linux代理服务器与防火墙安装与应用

规则表

iptables的 规则链组织在3个不同的规则表中:filter、nat、mangle。其中filter针对过滤系统,nat针对地址转换系统,mangle针对策略路由和特殊应用。规则链分配如下:

filter:INPUT、FORWARD和OUTPUT

nat:PREROUTING、POSTROUTING、OUTPUT

mangle:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

主机的安全性主要集中在filter表中的INPUT、OUTPUT规则链中,因此这两个关键字在添加规则的时候会用到。在内核编译了netfilter系统以后,系统会自动建立这5个规则链和3个规则表

iptables的基本配置管理

iptables的软件包组成

在Linux的网络防火墙管理中,netfilter功能是由Linux内核实现的,而iptables管理工具需要安装名为iptables的软件包,该软件包在RHEL4系统中是默认安装的,可以使用rpm命令查询iptables软件包的信息

Linux代理服务器与防火墙安装与应用

iptables是主要的管理命令,对网络防火墙功能的管理都是通过iptables命令实现的

iptables-save和iptables-restore是一对辅助的管理工具,iptables-save可以将当前系统中的防火墙设置进行保存,而iptables-restore命令可以将使用iptables-save命令保存的防火墙策略配置恢复到当前系统中

iptables服务的启动与停止

iptables服务启动脚本

iptables软件包安装后,在系统中以iptables服务程序运行, 服务的启动脚本保存在/etc/rc.d/init.d/目录中,脚本文件名是iptables

iptables服务在系统运行级别3和5默认启动

iptables配置文件与策略设置文件

/etc/sysconfig/目录中iptables-config文件是iptables服务的配置文件,用于设置在iptables服务启动时加载服务相关的内核模块,管理员通常不需要对iptables-config文件进行设置

/etc/sysconfig/目录中的iptables文件是RHEL4系统中iptables服务使用的防火墙策略设置文件,在iptables服务启动时将调用iptables-restore命令将该文件中的策略设置内容应用到防火墙中

/etc/sysconfig/iptables文件通常是由iptables-save命令或其它的防火墙配置工具生成的一般也不需要管理员手动进行设置

iptables服务的启动与停止

示:service  iptables  start/stop/restart/status

iptables命令是对Linux中网络防火墙配置管理的核心命令,具有以下特点:

iptables命令提供了丰富的功能,可以对Linux内核中的netfilter防火墙进行各种策略的设置

iptables命令的设置在系统中即时生效的

使用iptables命令手动进行的防火墙策略设置如果不进行保存将在下次启动时丢失

使用iptables-save命令保存设置

iptables-save命令提供了对Linux系统中配置保存功能,在使用iptables命令对防火墙进行设置后可以使用iptables-save命令将配置保存到文件中

iptables-save命令默认只将设置信息显示到标准输出(屏幕)中,因此如果需要将iptables-save命令的输出保存,需要将命令输出结果重定向到指定的文件中

示: iptables-save  >  ipt.v1.0(此为你保存的文件名)

在对防火墙进行调试时,可以使用iptables-save命令将不同的设置保存为不同的版本,以便对各版本进行对比和排错

示:iptables-save  >  ipt.v1.1(此为保存的文件名)

使用iptables-restore恢复位置

在对Linux中的防火墙进行测试的过程中,经常需要将不同版本的配置恢复到系统中,这时需要使用iptables-restore命令:

iptables-restore命令将标准输入或输入重定向文件中的设置内容恢复到Linux系统的防火墙中

示:iptables-restore  < ipt.v1.0

使用iptables脚本保存防火墙设置

当管理员已经对Linux防火墙设置完毕,并且需要永久保存防火墙的设置时,需要使用iptables启动脚本将设置内容保存到/etc/sysconfig/iptables文件中,在进行保存之前最好先将/etc/sysconfig/iptables文件原有内容进行备份,以便出现错误时进行恢复

示:cp  /etc/sysconfig/iptables  iptables.bak

在RHEL4系统中,iptables脚本提供了save命令用于将当前的防火墙设置保存到/etc/sysconfig/iptables文件中,以便以后系统每次启动时都读取新的防火墙设置内容

使用防火墙的配置工具

在RHEL4系统中为用户提供了字符界面中运行的防火墙配置工具,虽然该配置工具的功能有限,但是其操作简单,对于Linux防火墙配置的初学者来说是很好的辅助工具

在字符界面下输入system-config-securitylevel-tui命令将运行配置程序,再在界面下选择Customize按钮将进入防火墙的设置页面

示:system-config-securitylevel-tui

Linux代理服务器与防火墙安装与应用

Linux代理服务器与防火墙安装与应用

iptables命令的使用

iptables的操作对象

在netfilter/iptables网络架构中,操作对象由以下几个级别组成

规则表(table)由规则链的集合组成,不同的规则表用于实现不同类型的功能

规则链(chain)由规则的集合组成,保存在规则表中,在规则表中不同的规则链代表了不同的数据包流向

规则(rule)是最基本的设置项,用于对防火墙的策略进行设置,流经某个数据链的数据将按照先后的顺序经过规则的过滤

从以上几个由大到小的对象可以看出,netfilter/iptables网络架构是相当复杂并且严谨的,使用iptables命令对不同的规则表、规则链、规则的设置,可以实现网络防火墙的各种功能

系统默认的规则表:filter、nat、mangle

查看防火墙的基本状态

示:iptables [- t  table] –L

Linux代理服务器与防火墙安装与应用

使用iptables命令进行表配置查询时,需要使用-L命令选项

iptables –L命令默认显示filter规则表的内容,如果需要显示其它的规则表需要使用-t选项指定规则表的名称

示:iptables  -t  nat  -L

清空表中的规则

示:iptables  -F

Linux代理服务器与防火墙安装与应用

删除表中的自定义规则链

iptables –X命令用于删除指定的规则链,如果不指定规则链名称作为参数,将删除表中所有的自定义规则链

示:iptables  -X

iptables –X命令通常与iptables –F命令一同使用,用于在重新设置防火墙规则之前对防火墙进行初始化

清除流量统计

示:iptables  -Z

添加规则

iptables –A命令用于为指定的规则链末尾添加规则,在添加规则的命令中使用-A选项指定需要添加规则的链;使用-i选项指定数据包流入的网络接口,使用-j选项设置对数据包的处理,-j ACCEPT表示允许通过,-j DROP表示丢弃数据包(丢弃并不反馈错误信息给客户端),-j REJECT(拒绝并反馈错误信息给客户端)

示:iptables  -A  INPUT  -i  lo  -j  ACCEPT

在INPUT规则链中添加规则,允许来自lo网络接口中的所有数据包

示:iptables  -A  INPUT  -i  eth0  -s 192.168.1.0/24  -j  ACCEPT

INPUT规则链中添加规则,允许eth0网络接口来自192.168.1.0/24子网的所有数据包

删除规则

iptables –D命令用于删除指定规则链中的规则

示:iptables  -D  INPUT  -i  eth0  -s  192.168.1.0/24  -j  ACCEPT

将INPUT规则链中最后添加的关于eth0网络接口的规则删除

设置内置规则链的默认策略

iptables 规则表的内建规则链具有“默认策略”的属性,默认值是ACCEPT,即默认策略将接受不符合任何规则的数据包,iptables –P命令可以设置指定规则链的默认策略

示:iptables  -P  INPUT  DROP

更改INPUT规则链的默认策略为DROP(丢弃)

设置Linux作为网关服务器

在Linux中实现IP伪装功能(NAT)主要由iptables命令实现,操作步骤:

设置Linux内核支持IP数据包的转发

加载实现NAT功能主要的内核模块

对iptables中的规则表进行初始化

设置规则链的默认策略

添加IP伪装规则

由于设置IP伪装的操作步骤比较复杂,因此我这里通过编写shell脚本为完成(以便修改、调试、和执行),使用脚本进行防火墙的配置也是Linux中防火墙的常用配置方法

我这里把此脚本命名为:iptables_nat

示:iptables_nat

Linux代理服务器与防火墙安装与应用

此脚本最后一行命令实现了IP伪装的功能

示:iptables  -t  nat  -A  POSTROUTING  -s 172.16.0.0/16  -o  eth1 -j  MASQUERADE

有另一命令与上面的命令所达到的目的是一样的:

iptables  -t  nat  -A  POSTROUTING -o eth1 -j SNAT --to  +外网口的公网IP地址(如我这里的202.69.133.134)

以上iptables命令在nat规则表的POSTROUTING规则链中添加了规则,规则中-s 172.16.0.0/16表示数据包的源地址为172.16.0.0/16子网;-o  eth1表示数据包的流出网络接口是eth1(一般为外网口),eth1网络接口具有公网IP;-j  MASQUERADE表示对数据包进行的处理,即将符合条件的数据包进行IP伪装。整个规则的作用是将来自172.16.0.0/16子网并由eth1网络接口流出的数据进行IP伪装,将数据包的源地址转换为eth1网络接口的公网IP地址

iptables_na脚本建立后需要使用chmod命令设置脚本对用户具有执行权限(或直接使用bash命令执行)

Linux代理服务器与防火墙安装与应用

此方法使用./iptables_nat来执行脚本

若直接使用bash命令执行则

示:bash  iptables_nat

查看nat规则表:

示:iptables  -t  nat  -L

Linux代理服务器与防火墙安装与应用

添加规则允许80端口通过:

示:iptables  -A  INPUT  -i  eth0  -p   tcp  --dport  80  -j  ACCEPT

iptablles  -A  OUTPUT  -o  eth1  -p   tcp   --dport  80  -j  ACCEPT

在客户机访问:

Linux代理服务器与防火墙安装与应用

缓存代理squid

Squid 服务器主要具有如下功能

提供对HTTP和FTP协议的代理服务

缓存代理的内容,提高客户端访问网站的速度,节约网络出口流量

对客户端地址进行访问控制,限制允许访问squid服务器客户机

对目标地址进行访问控制,限制客户端允许访问的网站

根据时间进行访问控制,限定客户端可以使用代理服务的时间

Squid服务器的安装

Squid服务器在RHEL4系统中已经默认安装,作用rpm命令可以查询squid软件包的安装状态,如果需要手动(或重新)安装squid服务器,可以在RHEL4的第2张安装光盘中找到该软件包

squid服务程序在RHEL4中默认不自动启动,如作为服务器使用,需要用chkconfig命令设置squid服务在运行级别3和5中自动启动

确认主机具有完整的域名

Squid服务器在初始化或运行时需要所在主机具有完整的域名,否则squid服务器无法成功启动。Linux主机的完整域名需要在hosts文件中或在DNS服务器中进行解析(若有DNS服务器则,如主机名为hostSer时,区域名为yunjing.com,则完全合格域名为hostSer.yunjing.com),我这里没有DNS服务器所以通过更改hosts文件来完成

示:vi  /etc/hosts

Linux代理服务器与防火墙安装与应用

squid服务器的初始化

第一次使用squid服务器之前需要先作用squid –z命令对squid服务器进行初始化

squid服务器初始化工作的主要作用是在squid服务器的工作目录/var/spool/squid/中建立需要的子目录(从上图可看出在没初始化前/var/spool/squid/目录是为空)

只有在第一次启动squid服务器之前才需要进行服务器的初始化工作,如果不手动执行squid –z命令,squid服务脚本在第一次启动服务时也会自动完成相应的初始化工作,再启动squid服务程序

squid服务的启动与停止

squid服务器的启动脚本位于/etc/init.d目录中,脚本文件的名称是squid,该脚本负责squid服务器的启动和停止等任务管理

示:service  squid  start/stop/restart

squid服务启动后,使用netstat命令可以看到squid服务程序在3128端口进行代理服务的监听,这与通常的代理服务器使用的8080端口是不同的

squid服务的配置文件

squid服务器在/etc/目录下有独立的配置目录,目录名称为squid,该目录中保存了squid服务器相关的配置文件

/etc/squid/目录中的squid.conf是squid服务器的主配置文件,squid.conf.default文件是squid.conf文件的原始配置副本

服务端口

Squid服务器的服务端口使用http_port配置项设置,其默认设置值是3128,为了用户使用方便,可以将服务端口更改为通用的8080,或在多个端口提供服务

示:vi  /etc/squid/squid.conf

http_port  3128

//改为

http_port 8080

//或

http_port 3128 8080

http_port配置项支持在多个端口提供代理服务

注:将http_port 3128 前的“#”注释符去掉使此行生效

Linux代理服务器与防火墙安装与应用

缓冲内存数量

Squid服务器的性能和squid服务器使用的缓冲内存数量有很大关系,一般来讲,使用内存越多,squid服务器的性能会越好,在squid.conf配置文件中使用cache_mem进行代理服务器缓冲内存的设置,cache_mem默认设置只有8MB,远远不能满足实际应用中代理服务器的要求,因此需要将该设置值重新设置。通常来讲squid服务器中cache_mem的值设置为服务器物理内存的三分之一到四分之一比较合适(最好为16的倍数)

Linux代理服务器与防火墙安装与应用

工作目录

Squid服务器缓存的内容只有很少的一部分是保存在缓冲内存中的,而代理服务中使用的所有文件都会保存在squid的工作目录中,在squid.conf配置文件中使用cache_dir设置squid服务器的工作目录路径和属性

Linux代理服务器与防火墙安装与应用

cache_dir设置项的默认值为/var/spool/squid,“100  64  256”分别表示目录中最大的容量是64MB(这里与我们前面设置的cache_mem值一样都是64MB),目录中的一级子目录的数量为16个,二级子目录为256个

squid工作目录的容量和子目录的数量也会在一定程序上影响squid服务器代理服务的性能,在实际应用中可根据实际情况适当扩大工作目录的总容量

访问控制设置

Squid服务器中提供了强大的访问控制功能,在squid.conf配置文件中,访问控制功能是由http_access和acl配置项功能共同实现的

Linux代理服务器与防火墙安装与应用

http_access用于设置允许或拒绝指定名称的访问控制列表(ACL)对象访问squid服务器

Linux代理服务器与防火墙安装与应用

Acl配置项用于设置访问控制列表的内容,通过acl设置项的设置,管理员可以为特定的目标指定访问控制名称

例:

将源地址为0.0.0.0/0.0.0.0的对象命令为all

将源地址分为127.0.0.1/255.255.255.255的对象命名为localhost

将目标地址为127.0.0.0/8的对象命名为to_localhost

通过acl和http_access的设置,既可以对使用squid服务器的客户机进行控制,也可以对客户机可以访问的目标地址进行控制

在squid.conf配置文件中默认只允许本机(localhost)使用squid服务器,这种策略也体现了squid服务器默认设置的严谨,为了让同一局域网中的所有客户机能够通过squid的代理服务访问外部网页,需要在squid.conf文件中进行访问控制策略的修改

我这里当前局域网的地址是172.16.0.0/16, 在squid.conf配置文件中需要添加进行如下配置

Linux代理服务器与防火墙安装与应用

上图中的clients是我为这张ACL表命的名称

在squid.conf文件中的http_access deny all设置行之前添加相关内容

Linux代理服务器与防火墙安装与应用

以上设置将在squid服务器的访问控制策略中,在拒绝所有对象之前添加了允许名为clients的访问控制对象进行访问

重启squid服务

注:每次修改squid.conf文件之后都必须重新启动 squid服务程序

配置透明代理服务器

构建透明代理服务器需要对squid代理服务和iptables防火墙分别设置,配合使用才能实现透明代理功能

配置squid.conf文件

Squid服务器的默认配置中不支持提供透明代理服务的相关功能,因此需要在 squid.conf文件末尾添加如下行

示:vi  /etc/squid/squid.conf

Linux代理服务器与防火墙安装与应用

在squid.conf文件中进行配置修改后,需要执行squid脚本使配置生效

示:service  squid  reload

修改防火墙配置脚本

在进行nat配置(IP伪装)时曾建立有iptables_nat脚本,我们在此脚本末行加入如下iptables命令

Linux代理服务器与防火墙安装与应用

在以上的iptables命令中,在nat规则表的PREROUTING规则链中添加规则,在规则中,-s 172.16.0.0/16表示数据包来自172.16.0.0/16;-p  tcp 表示数据包的协议为TCP,--dport 80表示数据包访问的目的端口为80,即标准的www服务;-j REDIRECT表示将符合条件的数据包进行重定向;--dport  3128表示将符合条件的数据包重定向到3128端口,3128端口是squid服务器提供网页代理服务器的端口。整个规则的作用是将来自172.16.0.0/16子网,且访问 www服务的数据包重定向到服务器主机的3128端口,由squid代理服务器进行处理

执行iptables_nat脚本后,Linux主机将具有透明代理功能,如果来自内部网络中的数据包是访问www服务的,那么它将重定向到squid服务器提供代理服务;如果数据包访问的是非www服务,则将进行IP伪装处理

Linux代理服务器与防火墙安装与应用

从以上iptables命令的结果中可以看到nat表的PREROUTING规则链中已经存在实现透明代理的规则

为使其永久生效将其保存至/etc/sysconfig/iptables文件中

使用透明代理的客户机需要将以上配置的Linux服务器设置为默认网关,如果能够正确访问外部网站,则说明透明代理配置成功

Linux代理服务器与防火墙安装与应用

本文转自 tomsjack  51CTO博客,原文链接:http://blog.51cto.com/tom110/192313

上一篇:配置高级安全Windows Vista防火墙
下一篇:绝对值得一看的杀毒软件和防火墙评论