使用IPFILTER设置小型企业防火墙系统

发表于:2007-06-09来源:作者:点击数: 标签:
使用IPFILTER设置小型企业防火墙系统 作者:peijun.jiang 一、 网络 环境 1、主机A:安装freebsd4.7,安装三块网卡fxp0、xl0和xl1。 fxp0为对外网卡,IP:x.x.x.xISP为我提供的IP地址 xl0为对内公共区域网卡,IP:192.168.0.1 xl1为对内服务提供区域网卡,IP

使用IPFILTER设置小型企业防火墙系统
作者:peijun.jiang
一、 网络环境 
1、主机A:安装freebsd4.7,安装三块网卡fxp0、xl0和xl1。
fxp0为对外网卡,IP:x.x.x.x  ISP为我提供的IP地址
xl0为对内公共区域网卡,IP:192.168.0.1
xl1为对内服务提供区域网卡,IP:192.168.80.1 
2、主机B:对外提供www服务主机,ip地址为:192.168.80.80
3、主机C:对外提供ftp服务主机,ip:192.168.80.3。
4、其他工作站N台。 
二、编译内核 

1、#cd /sys/i386/conf 
#cp GENERIC kernel_IPF 

2、编译kernel_IPF,加入一下选项: 
options IPFILTER 
options IPFILTER_LOG 
options IPFILTER_DEFAULT_BLOCK 

3、#/usr/sbin/config kernel_IPF 
#cd ../../compile/kernel_IPF 
#make kepend 
#make 
#make install 

4、编辑/etc/rc.rc.conf,打开以下选项: 
defaultrouter="x.x.x.1" x.x.x.1为ISP提供的网关 
gateway_enable="YES" 
ipfilter_enable="YES" 
ipnat_enable="YES" 
5、重新启动系统:reboot 
三、配置防火墙 

1、 设置地址转换ipnat。在/etc下新建文件ipnat.rules,内容为: 
map fxp0 192.168.0.0/16 -> 0/32 proxy port ftp ftp/tcp
map fxp0 192.168.0.0/24 -> 0/32 portmap tcp/udp 10000:30000 
map fxp0 192.168.0.0/24 -> 0/32 
map fxp0 192.168.80.0/24 -> 0/32 portmap tcp/udp 300001:60000
map fxp0 192.168.80.0/24 -> 0/32 portmap
rdr fxp0 x.x.x.x/32 port 80 -> 192.168.0.2 port 80 
rdr fxp0 x.x.x.x/32 port ftp -> 192.168.0.3 port ftp 
rdr fxp0 x.x.x.x/32 port 30001-50000 -> 192.168.80.3 port 30001 tcp

2、设置包过滤ipfilter。在/etc下新建文件ipf.rules,内容为: 
block in log quick all with short 
block in log quick all with ipopts 
block in log quick all with frag
block in log quick all with opt lsrr
block in log quick all with opt ssrr

以上五句为过滤掉可能会带来安全问题的短数据包或具备路由信息的数据包以及防止非法扫描服务器 

pass out on xl0 all 
pass in on xlo all 
pass out on xl1 all
pass in on xl1 all
pass out quick on lo0 all 
pass in quick on lo0 all 
以上为内部网络界面和loopback网络界面可以自由发送和接受数据包 

block out on fxp0 all 
以上为屏蔽外部网络界面向外发送数据包 

block out log on fxp0 from any to 192.168.0.0/16
block out log quick on fxp0 from any to 0.0.0.0/8 
block out log quick on fxp0 from any to 169.254.0.0/8 
block out log quick on fxp0 from any to 10.0.0.0/8 
block out log quick on fxp0 from any to 127.16.0.0/12 
block out log quick on fxp0 from any to 127.0.0.0/8 
block out log quick on fxp0 from any to 192.0.2.0/24 
block out log quick on fxp0 from any to 204.152.64.0/23 
block out log quick on fxp0 from any to 224.0.0.0/3 
以上为屏蔽不合法地址的输出数据 

pass out log on fxp0 proto tcp/udp from any to any keep state 
pass out log on fxp0 proto icmp all keep state 
以上为允许TCP 、UDP、ICMP数据包向外发送出去,并且允许回应数据包发送回到内部网络 

block in log on fxp0 from 192.168.0.0/16 to any
block in log quick on fxp0 from 10.0.0.0/8 to any 
block in log quick on fxp0 from 172.16.0.0/12 to any 
block in log quick on fxp0 from 127.0.0.0/8 to any
block in log quick on fxp0 from 192.0.2.0/24 to any
block in log quick on fxp0 from 169.254.0.0/16 to any
block in log quick on fxp0 from 224.0.0.0/3 to any
block in log quick on fxp0 from 204.152.64.0/23 to any
block in log quick on fxp0 from x.x.x.x/32 to any
block in log quick on fxp0 from any to x.x.x.0/32
block in log quick on fxp0 from any to x.x.x.255/32 
以上为屏蔽具备内部网络地址的数据包被转发到外部网络 

pass in quick on fxp0 proto tcp from any to any port = 80 flags S/SA keep state 
pass in quick on fxp0 proto tcp from any to any port = ftp flags S/SA keep state 
pass in quick on fxp0 proto tcp from any to any port = ftp-data flags S/SA keep state 
pass in quick on fxp0 proto tcp from any to any port 30000 >< 50001 flags S/SA keep state
以上为允许www和ftp进入,并且允许对ftp数据端口的数据进行转发

block in quick on fxp0 all
禁止其他的连接进入fxp0

block in log quick on fxp0 proto icmp from any to any icmp-type redir 
block in log quick on fxp0 proto icmp from any to any 
block in log quick on fxp0 proto icmp from any to any icmp-type echo 
以上为禁止别人ping我得网络 

block return-rst in log on fxp0 proto tcp from any to any flags S/SA 
block return-icmp(net-unr) in log on fxp0 proto udp from any to any 
以上对其他tcp请求,防火墙回应一个RST数据包关闭连接。对UDP请求,防火墙回应网络不可达到的ICMP包。
或者在/etc/sysctl.conf中加入:
  net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
能够有效地避免端口扫描

3、然后编辑/etc/rc.conf,加入一下命令,让ipfilter和ipnat在系统启动的时候可以自动加载: 
  ipfilter_enables=”YES”
ipf –C –f /etc/ipf.rules
ipfilter_flags=”-E”

ipnat_enable=”YES”
ipnat_program=”/sbin/ipnat –CF -f”
ipnat_rules=”/etc/ipnat.rules”

ipmon_enable=”YES”
ipmon_flags=”-D /var/log/ipfilter.log”
4、在/usr/log/建立文件ipfilter.log,并更改其属性为755,这样你的防火墙日志就记录到/var/log/ipfilter.log文件中,可以随时对其进行查看。

四、设置FTP服务器,使其支持被动连接(pasv)
1.Proftpd:编辑你的proftpd的配置文件proftpd.conf,加入一下内容:
   MasqueradeAddress x.x.x.x
   PassivePorts 30001 50000
2.Pure-ftpd:编辑你的FTP配置文件,加入一下内容:
    PassivePortRange 30001 50000
    ForcePassiveIP x.x.x.x
3.Serv-U:
a、在serv-U的”本地服务器”―――”设置”―――”高级”―――”PASV端口范围”输入30001 50000
   b、在serv-U的”域”―――”你自己建立的域”―――”设置”―――”高级”选中”允许被动模式传送”,” 使用IP”输入:x.x.x.x

 黑夜编码人 回复于:2003-03-24 17:36:19
Very Good Article, Thanks.

 雪之女 回复于:2003-03-24 17:41:57
好文章,谢谢!
请问您的这篇文章中的ipf效果同iceblood所写的用ipfw组建安全网管的效果相比如何?哪一个更好些?谢谢!

 黑夜编码人 回复于:2003-03-24 17:49:49
[quote:53b163e9b7="雪之女"]好文章,谢谢!
请问您的这篇文章中的ipf效果同iceblood所写的用ipfw组建安全网管的效果相比如何?哪一个更好些?谢谢![/quote:53b163e9b7]

看你的喜好了。
我比较喜欢ipf,因为比较通用嘛,这样在其它操作系统下就不用再重新学习了。再一次证明一点:“我比较懒”,  呵呵

 peijun.jiang 回复于:2003-03-24 18:10:33
[quote:e6a57d92da="雪之女"]好文章,谢谢!
请问您的这篇文章中的ipf效果同iceblood所写的用ipfw组建安全网管的效果相比如何?哪一个更好些?谢谢![/quote:e6a57d92da]
谈不上那个好坏的问题,我也是刚接触Freebsd系统,我用ipfw有一个多月把,感觉也挺好的,后来是为了学习才又用ipfilter,当时也没有找到现成的资料可用,所以就把我自己作出的设置贴出来和大家分享,以来对于刚使用的朋友有一个参考,二来也可让各位高手们指点一下其中的错误。

 i2era 回复于:2003-03-24 20:35:13
unix软件防火墙ipfilter拒绝服务安全漏洞
see here:
http://security.zz.ha.cn/ipfilterq.html

 unix菜鸟 回复于:2003-03-24 21:02:51
谢谢!

 黄师虎 回复于:2003-03-24 21:09:40
谢谢,收藏先!

 弱智 回复于:2003-03-25 11:25:14
谢谢,

收下慢慢看。

 yhcamel 回复于:2003-03-28 12:10:54
问题是我 的不能ping外网!怎么能使我的内网机器ping外部地址?

 红袖添香 回复于:2003-03-28 18:48:52
[quote:acedae9c16="yhcamel"]问题是我 的不能ping外网!怎么能使我的内网机器ping外部地址?[/quote:acedae9c16]

rc.conf: 

defaultrouter="xxx.xxx.xxx.xxx"   # 网关的IP

 1000g.net 回复于:2003-03-29 02:29:26
机箱千万用千际的1U机箱啊,地址:www.1000G.net

 黄师虎 回复于:2003-03-29 11:30:47
[quote:6523e193c5="1000g.net"]机箱千万用千际的1U机箱啊,地址:www.1000G.net[/quote:6523e193c5]
广告?晕~~

 quakelee 回复于:2003-03-30 00:09:22
这样也可以,居然在帖子里面做广告!

 1000g.net 回复于:2003-03-30 22:23:30
不是广告啊!兄弟们,帮帮大哥吧,我都30了!等钱娶媳妇啊。

 quakelee 回复于:2003-03-30 23:36:17
ft~~
有机会会买的嘻嘻~

 ihweb 回复于:2003-03-31 09:25:53
[quote:79clearcase/" target="_blank" >ccccaa6e="1000g.net"]不是广告啊!兄弟们,帮帮大哥吧,我都30了!等钱娶媳妇啊。[/quote:79ccccaa6e]

恐怕你儿子都出来了吧?!

 1000g.net 回复于:2003-04-02 22:53:15
老弟哥哥我真的很困难啊,帮忙别说我了

 1000g.net 回复于:2003-04-27 22:24:05
我们是北京的硬件厂商,我们最近要开发防火墙系统,如能兼职帮助开发的朋友请来信,报酬优厚,sunet@xinhuanet.com   或者在QQ谈 76842750   我们就是想搞基于PC架构的那种防火墙,使用unix模块就行,我们打算批量生产!

 B2Sun 回复于:2003-05-08 08:10:53
HI,

 B2Sun 回复于:2003-05-08 08:13:58
如何在Openbsd中邦定MAC地址防止IP占用上网    

--------------------------------------------------------------------------------
 
大家好,我想用OPENBSD3.2建立一个防火墙 PF 
我想在防火墙中加入地址邦定功能,: MAC和IP地址邦定一起! 
这样就可以搞定限制了别个不会去冒充上网, 
如: IP:192.168.4.1-192.168.4.100 /24这个段可以上网 
而 IP: 192.168.4.101-254 /24这个段不可以上网 
如果没有MAC地址和IP邦定的话,那就很难办了! 如果不能上网的机器在能上网的机器开机之前启动的话,它就可以上网了,这也是我们不想的事情! 
如果 192.168.4.101的机器把自己的IP改为192.168.4.1就可以上网了 
如果 我们做了MAC地址邦定的话,就 是改了IP地址也没有用,不能上网。 
(但还是可以冒充IP!如果可以限制不能改IP地址就好了!)

 yhcamel 回复于:2003-05-21 15:35:14
不错的文章 收藏!!!我正为这个烦恼那!我做的内网的ping 不能出去

 yhcamel 回复于:2003-05-26 08:03:58
[quote:43ce673fc4="红袖添香"]

rc.conf: 

defaultrouter="xxx.xxx.xxx.xxx"   # 网关的IP[/quote:43ce673fc4]
我用tracert 命令跟踪发现 我只能到我的内部网地址,连网关的外部网地址多不能返回

 dnext 回复于:2003-06-06 15:01:03
我配置好后,重启后不能以ROOT进入。~

不知哪配置错了~晕

 超越极限 回复于:2003-08-07 12:26:58
呵,我正好试一试~~~!

 wofeifei 回复于:2003-09-05 13:49:00
rdr fxp0 x.x.x.x/32 port ftp -> 192.168.0.3 port ftp 
192.168.0.3从何而来???

 er 回复于:2003-09-14 22:16:51
有些小错误楼主也不改一下,害俺瞎琢磨
ipfilter_flags=”-E” 纯属多余

原文转自:http://www.ltesting.net