免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 12187 | 回复: 22
打印 上一主题 下一主题

PF防火墙典型应用(针对FTP环境)(附PDF) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-31 16:20 |只看该作者 |倒序浏览
PF防火墙典型应用

PF防火墙起源于OPENBSD项目。近年来FREEBSD/NETBSD也开始支持PF防火墙了,在BSD系统中PF防火墙变得越来越流行了。这里我们重点结合FTP(因为FTP服务器涉及到FTP和FTP-DATA两个TCP端口,并且又分为主动、被动连接模式。相对其他服务要复杂一些,所以今天主要针对这中环境)应用环境列举几个典型应用。

转载时请保留下面的信息:

作者:LLZQQ
联系:LLZQQ@126.COM
出自:BBS.CHINAUNIX.NET

代理服务器:OpenBSD-3.9/4.0
客户端配置:Win2k+FileZilla+FlashGet/Linux

1.        采用PF构建NAT服务器,代理LAN中的CLIENTS上网。配置过程如下:

# vi /etc/rc.conf.local
============================
identd_flags=""
inetd=YES
pf=YES
ftpproxy_flags=""
============================

# > /etc/pf.conf
# vi /etc/pf.conf
============= pf.conf ==============
ext_if="rl0"
int_if="fxp0"
ftp_port="{21,2201,20021}"

set skip on lo
scrub in

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
nat on $ext_if from !($ext_if) -> ($ext_if:0)
rdr pass on $int_if proto tcp to port $ftp_port -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"

antispoof for $ext_if inet

block in
pass quick on $int_if
pass in on $ext_if proto tcp to ($ext_if) port ssh keep state
pass out keep state
============= pf.conf =============

简单解释:
ftp_port="{21,2201,20021}"
在互联网上不是所有的FTP服务器都监听TCP 21端口,比如有的监听2201,20021等。当CLIENTS采用PASV模式(被动模式)来连接外部FTP服务器时没有问题,但是当用主动模式连接那些非TCP21端口的服务器时就有问题了。针对这种情况,我们把这些端口列出来就可以了(当然我们不可能列出所有的,这个也是很无奈的事情)。

试验结论:
按照上面给出的配置搭建的PF(NAT)服务器可以完美的代理用户连接外部FTP服务器,当然对代理其他类型的服务也没得说。

2.        采用PF构建NAT服务器,代理LAN中的CLIENTS上网,同时NAT服务器上也同时提供FTP服务。配置过程如下:

# vi /etc/rc.conf.local
============================
identd_flags=""
inetd=YES
pf=YES
ftpproxy_flags=""
============================

# > /etc/pf.conf
# vi /etc/pf.conf
============= pf.conf ============
ext_if="rl0"
int_if="fxp0"
ftp_port="{21,221,20021}"

set skip on lo
scrub in

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
nat on $ext_if from !($ext_if) -> ($ext_if:0)
rdr pass on $int_if proto tcp to port $ftp_port -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"

antispoof for $ext_if inet
block in

pass quick on $int_if
pass quick on lo
pass in on $ext_if proto tcp to ($ext_if) port ssh keep state
pass in on $ext_if proto tcp to ($ext_if) port ftp keep state
pass in on $ext_if proto tcp from any to any port > 55000 keep state
pass out keep state
============= pf.conf ============

简单解释:
这个规则是在(1)的基础上增加了下面的部分。比较简单这里就不废话了。
pass in on $ext_if proto tcp to ($ext_if) port ftp keep state
pass in on $ext_if proto tcp from any to any port > 55000 keep state

试验结论:
成功!

3.        采用PF构建NAT服务器,代理LAN中的CLIENTS上网,同时映射LAN中的一台FTP服务器到外部网络:

# vi /etc/rc.conf.local
============================
identd_flags=""
inetd=YES
pf=YES
ftpproxy_flags="-R 192.168.0.20 -p 21 -b 202.87.21.43"
============================

# > /etc/pf.conf
# vi /etc/pf.conf
============= pf.conf ============
ext_if="rl0"
int_if="fxp0"
ext_ip = "202.87.21.43"
ftp_ip = "192.168.0.20"

set skip on lo
scrub in

nat-anchor "ftp-proxy/*"
nat on $ext_if inet from $int_if -> ($ext_if)
rdr-anchor "ftp-proxy/*"

pass in on $ext_if inet proto tcp to $ext_ip port 21 flags S/SA keep state
pass out on $int_if inet proto tcp to $ftp_ip port 21 user proxy flags
S/SA keep state
anchor "ftp-proxy/*"

antispoof for $ext_if inet
block in

pass quick on $int_if
pass quick on lo
pass in on $ext_if proto tcp to ($ext_if) port ssh keep state
pass out keep state
============= pf.conf ============

简单解释:
ftpproxy_flags="-R 192.168.0.20 -p 21 -b 202.87.21.43"
其中192.168.0.20是LAN中的FTP服务器。202.87.21.43是NAT服务器的公网IP。

试验结论:
成功!

注意事项:
在OPENBSD中只有3.9/4.0版本才可以支持以上的规则。

参考文档:
http://www.openbsd.org/faq/pf/ftp.html

[ 本帖最后由 llzqq 于 2007-1-1 09:08 编辑 ]

PF防火墙典型应用.pdf

121.89 KB, 下载次数: 421

论坛徽章:
0
2 [报告]
发表于 2006-12-31 16:38 |只看该作者
我是经人介绍抱着试试看的态度来浏览llzqq的贴子的。原以为它们口中的信誓旦旦只是广告,没想到竟然是真的承诺!有一次我公司那里的服务器出现问题,llzqq老大不顾零下三百度的严寒不顾身上的病痛和卧床无法自理的妻儿连夜驱车五千公里赶到网吧登录CU给我处理,最终帮我挽回了数亿亿元的损失,当我要重金对llzqq表示谢意的时候,llzqq老大没有接受,只是对我微微的一笑:“这是我们应该做的”
每每想起这件事情,我都按耐不住心里的感激之情,我要感谢CU,感谢BSD版,感谢llzqq的服务!是你们让我感觉到了温暖,是你们让我体会到了真情,是你们让我重新拾回了自信!

llzqq的服务,真好!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2006-12-31 16:41 |只看该作者
收藏学习

论坛徽章:
0
4 [报告]
发表于 2006-12-31 17:54 |只看该作者
原帖由 新杂人 于 2006-12-31 16:38 发表
我是经人介绍抱着试试看的态度来浏览llzqq的贴子的。原以为它们口中的信誓旦旦只是广告,没想到竟然是真的承诺!有一次我公司那里的服务器出现问题,llzqq老大不顾零下三百度的严寒不顾身上的病痛和卧床无法自理的 ...



晕死!!

论坛徽章:
0
5 [报告]
发表于 2006-12-31 19:19 |只看该作者
恭敬地收下了。感谢llzqq大虾的辛勤劳动。

论坛徽章:
0
6 [报告]
发表于 2007-01-01 09:09 |只看该作者
修改一些文字错误,增加了一些注释

论坛徽章:
0
7 [报告]
发表于 2007-01-01 16:32 |只看该作者
每个Unix系统都有一个“loopback(回送)”接口,它是用于系统中应用程序间通信的虚拟网络接口。在OpenBSD中,回送接口是lo(4)。

set skip on lo0
pass quick on lo0 all



[ 本帖最后由 新杂人 于 2007-1-1 16:35 编辑 ]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
8 [报告]
发表于 2007-01-01 18:52 |只看该作者
原帖由 新杂人 于 2006-12-31 16:38 发表
我是经人介绍抱着试试看的态度来浏览llzqq的贴子的。原以为它们口中的信誓旦旦只是广告,没想到竟然是真的承诺!有一次我公司那里的服务器出现问题,llzqq老大不顾零下三百度的严寒不顾身上的病痛和卧床无法自理的 ...

论坛徽章:
0
9 [报告]
发表于 2007-01-01 20:01 |只看该作者
原帖由 新杂人 于 2007-1-1 16:32 发表




呵呵,都习惯了,虽然显的多余了。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-06 06:20:00
10 [报告]
发表于 2007-01-01 22:26 |只看该作者
好贴顶上...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP