LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1732|回复: 3

用freebsd+pf做网关,内网用户用(sohu,163等外部邮箱)不能发邮件,??

[复制链接]
发表于 2005-11-3 09:27:46 | 显示全部楼层 |阅读模式
请问一下有谁用freebsd+pf做网关的

我用的是freebsd5.4(fb6.0RC1也试过)内网用户用(sohu,163等外部邮箱)不能发邮件出去,除非发的邮件只有2-3个字母才能出去,
我就做了这么几步:
1、Mini安装系统。(没有更新port和src。因为更新和不更新结果一样我都试过了,还有5.4和6.0rc1两个版本我也试了,都 不行)
2、编译内核
其中加上device pf
device pflog
device pfsync
就这三个(关于altq的部分我加了也试没加也试过都不行)
3、在/etc/rc.conf中加上
gateway_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog'
pflog_flags=""
4、在/etc/sysctl.conf中加入
net.inet.ip.forwarding=1
5、/etc/pf.conf
inf_if="vr1" #内网卡
ext_if="vr0"
loop="lo0"
scrub in all
nat on $ext_if from $int_if:network to any -> ($ext_if)

pass in all keep state
pass out all keep state
就这么多,可总是不行

后来同样的环境我把pf改为ipf,编译进内核再rc.conf加载启动,规则 也是两条pass in all和pass out all还有个nat就这三条,可用ipf就不会有不能发邮件的这个问题,真是怪,我想还是和pf有关,

为什么fb和pf搭配有这问题啊。
发表于 2005-11-13 19:54:16 | 显示全部楼层
偶用ipfilter+ipnat没问题,内网发邮件都正常..
回复 支持 反对

使用道具 举报

发表于 2005-11-15 12:17:30 | 显示全部楼层
我记得是你pf那个规则设置不对,就算全都pass在默认情况下也发不出去,可能是为了防止垃圾邮件。

以下引自CU-BSD版,剑心通明斑竹规则:

#macros
ext_if="xl0"
#定义外网网卡
int_if="xl1"
#定义内网网卡
tcp_services="{21,80,8021,49151><65535}"
#开放的端口,暂时未用
icmp_types = "echoreq"
#icmp的类型
priv_nets="{ 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 127.0.0.0/8, 0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 204.152.64.0/23, 224.0.0.0/3, 20.20.20.0/24 }"
#定义不该在外网网卡上出现的数据包
ssh_nets="{a.b.c.115/32}"
#定义可ssh的主机范围
int_net="{ a.b.c.0/21, e.f.g.0/22 }"
#定义nat带的内网的地址范围
www_server="a.b.c.79"
#rdr转换的内部server地址
deny_port="{135,137,138,139,445,593,4444,6881><6889,6969}"
#关闭如下端口

#options
set block-policy drop
#block的默认规则是drop,不再返回任何回应数据包,节省资源
set loginterface $ext_if
#pf统计ext_if网卡的进/出流量和pass/block的数据包数目
set optimization aggressive
#自状态表中主动终止空闲连接

#scrub
scrub in all
#流量整形,避免最终的数据包出现非法目的,同时也会重组数据包碎片,保护操作系统免受攻击,丢失某些带有非法联合标记的TCP数据包。

#############################
##ALTQ部分,控制垃圾邮件
##################################
altq on $int_if cbq bandwidth 30Mb queue { std_in mail }
  queue std_in bandwidth 25Mb cbq(default)
  queue mail bandwidth 1Mb
altq on $ext_if cbq bandwidth 20Mb queue { std_out }
  queue std_out bandwidth 18Mb cbq(default)

##################################################
##nat rules nat的规则必须写到filter规则的前面
##################################################

nat on $ext_if from $int_net to any -> ($ext_if)
#nat转换所有的内部地址,()是让PF自动更新ext_if的地址
rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021
#让内网可以使用ftp client软件连接外部的ftp服务器
rdr on $ext_if proto tcp from any to any port 80 -> $www_server
#rdr内部的www_server


#####################
##filter rules
#####################

block all
#block所有的包,然后依实际情况开放
block in quick proto tcp all flags SF/SFRA
block in quick proto tcp all flags SFUP/SFRAU
block in quick proto tcp all flags FPU/SFRAUP
block in quick proto tcp all flags /SFRA
block in quick proto tcp all flags F/SFRA
block in quick proto tcp all flags U/SFRAU
#防止一些网络扫描软件

pass quick on lo0 all
#允许localhost数据包通行

###############
#int_if内网网卡
###############
pass in quick on $int_if proto tcp from $ssh_nets to any port 22 flags S/SA keep state
#允许ssh_nets的计算机ssh登录
pass in quick on $int_if inet  proto icmp all icmp-type $icmp_types keep state
#允许ping内网网卡
block in on $int_if proto tcp from any to any port 22 flags S/SA
#禁止其它机器ssh登录,因为有block all,似乎可以不要了,但是加上更放心!

block in quick on $int_if proto tcp from $int_net to any port $deny_port flags S/SA
pass in log quick on $int_if proto tcp from $int_net to any port 80 flags S/SA keep state queue std_in

pass in quick on $int_if proto tcp from $int_net to any keep state queue std_in
pass out on $int_if from any to $int_net
#允许内网网卡和内网之间通讯

###############
#ext_if外网网卡
###############
block drop in quick on $ext_if from $priv_nets to any
#拒绝所有私有地址进入ext_if网卡
block drop out quick on $ext_if from any to $priv_nets
#拒绝所有私有地址出去ext_if网卡

pass in on $ext_if proto tcp from any to ($ext_if) port $tcp_services flags S/SA keep state
#允许开放端口的数据包进入ext_if网卡
pass in on $ext_if proto tcp from any to $www_server port 80 flags S/SA synproxy state
#www_server的连接由PF来进行TCP代理,防止TCP SYN FLOODs欺骗

pass out on $ext_if proto tcp all modulate state flags S/SA queue std_out
#ext_if网卡上允许tcp数据包出去,并为匹配规则的数据包产生强壮的初始化序列号
pass out on $ext_if proto {udp,icmp} all keep state queue std_out
#ext_if网卡上允许udp、icmp数据包出去


根据自己情况再改改就行了,不过对带宽还有网络性能优化方面做得还不太够,但已经可以足够工作了。 具体优化项可以参考pf-FAQ。
回复 支持 反对

使用道具 举报

发表于 2005-11-15 13:45:51 | 显示全部楼层
刚忙完,还未细看,顶一下再说.呵~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表