用ipfilter实现透明代理( 二 )







firewall_enable="NO"





增加如下配置









gateway_enable="YES"
# enable gateway


named_enable=YES"
# enable naming service


ipfilter_enable="YES"
# Stateful firewall


ipfilter_program="/sbin/ipf"



ipfilter_rules="/etc/ipf.conf"
# 新增加的规则文件, 有人习惯文件名 .rule



ipfilter_flag=""



ipnat_enable="YES"
# Network Address Translation



ipnat_program="/sbin/ipnat"



ipnat_rules="/etc/ipnat.conf"
# 新增加的规则文件, 有人习惯文件名 .rule



ipmon_enable="NO"
# Firewall logging, 我没有开放, 如果是重要的服务器, 应该开放.



ipmon_program="/sbin/ipmon"



ipmon_flag="-Ds"







/etc/ipf.conf


该文件为防火墙配置文件, 本文主要介绍实现透明代理, 从网络的角度讲是代理Client, 因此关闭了Internet方向的Server
In的所有端口. 这个配置, 允许内网dc0的所有操作, 允许对外Internet的所有请求, 但外网Internet只允许对内网请求的回应, 其他包一律丢弃.





# 默认规则, 关闭阻止所有的包, 关闭所有的通路, 再一步一步打开允许的通道.

# 如果内核设置了 IPFILTER_DEFAULT_BLOCK, 可以省略.

block in all
block out all



# 允许内网的信息自由通过.

pass in quick on dc0 from 192.168.0.0/24 to any

pass out quick on dc0 from any to 192.168.0.0/24



# 允许本机的信息自由通过.

pass in quick on lo0 all

pass out quick on lo0 all



# 禁止外网的无效地址通过

block in quick on tun0 from 192.168.0.0/16 to any

block in quick on tun0 from 10.0.0.0/8 to any

block in quick on tun0 from 172.16.0.0/12 to any

block in quick on tun0 from 127.0.0.0/8 to any

block in quick on tun0 from 0.0.0.0/8 to any

block in quick on tun0 from 192.0.2.0/14 to any

block in quick on tun0 from 204.152.64.0/23 to any

block in quick on tun0 from 224.0.0.0/3 to any



# 对外网信息的处理, 允许内网包发送到外网, 并且允许外网对这些包的回应信息通过

pass out quick on tun0 proto tcp from any to any flags S/SAFR keep state keep frags

pass out quick on tun0 proto udp from any to any keep state keep frags

pass out quick on tun0 proto icmp from any to any keep state keep frags





/etc/ipnat.conf


该文件为NAT配置文件.
本文中pppoe通过DHCP方式获得地址, 因此无法在规则中给出外网的地址, 先用0代替.





# ftp proxy, 为 active 方式的FTP使用, 稍后再作介绍. 请注意, proxy的设置一定要在portmap之前.

#map tun0 192.168.0.0/24 -> 0/32 proxy port ftp ftp/tcp



# IKE proxy, 为ESP (Encapsulating Security Protocol) 使用

# map tun0 192.168.0.0/24 -> 0/32 proxy port 500 ipsec/udp



# RealAudio proxy, 只可用于PNM模式, RealPlayer G2已经使用RTSP.

#map tun0 192.168.0.0/24 -> 0/32 proxy port 7070 raudio/tcp



# 允许内部的UDP/TCP包通过,并且允许外网回应包通过

# 到外网采用指定范围的端口

# map tun0 192.168.0.0/24 -> 0/32 portmap tcp/udp 40000:60000

# 到外网由系统自动分配端口

map tun0 192.168.0.0/24 -> 0/32 portmap tcp/udp auto



# 允许内部ICMP通过,并且允许回应包通过

map tun0 192.168.0.0/24 -> 0/32



# 允许net2phone, 将呼入的呼叫转到指定机器

# rdr tun0 0/0 port 6801 -> 192.168.0.4 port 6801 udp



# 允许squid

# rdr dc0 0/0 port 80 -> 127.0.0.1 port 3128 tcp






/etc/sysctl.conf




net.inet.ip.forwarding=1
net.inet.ip.sourceroute=0

推荐阅读