|
这几天东找西找,将代理服务器算是架设好了,一点心得写出来与大家交流一下。其实这些都很简单,但是我从接触到完成还是多少花了点心血,希望对初学的朋友能有所帮助。
实现功能:这里主要用作于网关192.168.0.1,公司内部建有ftp、web服务器,需在外网对此进行访问。用此机实现对整个网内的透明代理、防火墙、3322动态域名解析、端口映射(将http:9888端口映射到内网web服器192.168.0.200:80,将ftp:2121端口映射到内网ftp:192.168.0.200),为了防目日志记录占用硬盘空间及易于查看,需要将访问日志每隔半小时上传至ftp服务器指定目录,然后清空日志,远程管理使用ssh.
硬件环境:
系统:FreeBSD4.9、
双网卡:vr0接外网,动态分配IP
rl0接内网,192.168.0.1
线路使用为网通ADSL虚拟拔号方式,无固定IP。
一、编译内核:[由于做透明代理,所以需要在内核中加入有关ipfilter选项]
cd /usr/src/sys/i386/conf
cp GENRIC mykernel
ee mykernel
添加:
options IPFILTER #加入ipfilter
options IPFILTER_LOG #加入ipfilter日志
options IPFILTER_DEFAULT_BLOCK
编译:
/usr/sbin/config mykernel
cd ../compile/mykernel
make depend
mke modules-clean [make install]
二、安装配置squid:(用ports,前提是能上网,需要配置好网络参数)
用ports来进行安装,安装非常简单。
cd /usr/ports/www/squid
make install
make clean
# squid.conf位于:/usr/local/etc/squid/squid.conf
# squid命令位于:/usr/local/sbin/squid
这里可以参考:http://www.linuxsir.cn/forum.php ... amp;highlight=squid
我也是从这个开始了解squid的,对初学者而言是一篇很不错的教材。
配置squid.conf文件:(主要是以下一些选项)
visible_hostname bsd #本地机器名,在linux下必须要加这个,BSD下似可不用,但是感觉还是加上好:)
http_port 3128
acl all src 0.0.0.0/0.0.0.0 #这里设为全部通过,具体用户控制方法可以查阅squid说明
dns_nameservers 61.128.128.68 #我曾经试过不加这一句,即使在客户机上都添加正确的DNS,可还是有一些网址打不开
cache_effective_user nobody
cache_effective_group nobody
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
emulate_httpd_log on #这一句是为了让access.log日志文件有时间显示
保存后退出:
/usr/local/sbin/squid –z #建立缓存目录,然后chmod更改缓存目录权限
/usr/local/sbin/squid #启动squid,
此时如果有时不能启动,多半是因为/usr/local/squid/logs这里的权限不对,将之设为777就好了。
三、配置PPP文件:[配置此文件以使本机可以进行pppoe拔号上网]
编辑/etc/ppp/ppp.conf
default:
set device PPPoE:vr0
enable dns
PPPoE:
Set authname username #这里填入用户名
Set authkey passwd #密码
Adddefault HISADDR
为了使系统可以自动拔号,可以如下操作:
编辑etc/rc.conf ,加入以下选项
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"
ppp_profile="PPoE"
四、编辑/etc/rc.conf:
gateway_enable=”YES”
named_enable=”YES”
ipfilter_enable=”YES”
ipfilter_program=”/sbin/ipf”
ipfilter_rules=”/etc/ipf.rules” #此文件自定义,为包过滤规则文件
ipfilter_flags=””
ipnat_enable=”YES”
ipnat_program=”/sbin/ipnat”
ipnat_rules=”/etc/ipnat.rules” #此文件自定义,为nat规则文件
ipnat_flags=”-Ds”
ppp_enable=”YES”
ppp_mode=”ddial” #此处如果为auto则为请求式拔号
ppp_nat=”YES”
ppp_profile=”PPPoE”’
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"
ppp_profile="PPoE"
五、编辑/etc/ipf.rules文件:(若此文件规则不得法,则有可能启动报错)
block in quick all with short
block in quick all with ipopts
pass in quick on lo0
pass out quick on lo0 all
pass in quick all
pass out quick all #允许所以通过,当然不安全,规则自己设定,对防火墙规则我也不是很熟,现在正在为习当中,呵呵。
六、编辑/etc/ipnat.rules文件:(这里主要实现nat及端口映射功能)
rdr rl10.0.0.0/0 port 80 -> 192.168.0.1 port 3128 tcp/udp
rdr tun0 0.0.0.0/0 port 9888 -> 192.168.0.200 port 80
rdr tun0 0.0.0.0/0 port 2121 –> 192.168.0.200 port ftp
map rl0 192.168.0.0/24 -> 0/32 portmap tcp/udp auto
map rl0 192.168.0.0/24 -> 0/32
七、建立脚本run.sh开机自动启动ipf.rules及ipnat.rules:
在/usr/local/etc/rc.d/下建一启动脚本:
cat > run.sh
#!/bin/sh
ipf –f /etc/ipf.rules
ipnat –f /etc/ipnat.rules
^D
chmod 777 /usr/local/etc/rc.d/run.sh
八、建立自动上传ftp脚本,每半小时上传至ftp://192.168.0.200指定目录中,同时清空日志。
cat > myftp.sh
#!/bin/sh
ftp –n –v 192.168.0.200 <<EoF
user abc 123
sunique #这里为了防止上传文件后同名覆盖
put /usr/local/squid/logs/access.log bsd/access.log #这个是主要访问记录
put /usr/local/squid/logs/store.log bsd/store.log
put /usr/local/squid/logs/store.log bsd/cache.log #上面及这个文件可传可不传,一般也很少查看
bye
EoF
True > /usr/local/squid/logs/access.log
True > /usr/local/squid/logs/store.log
True > /usr/local/squid/logs/cache.log
^D
chmod 777 myftp.sh
建立自动运行任务:
crontab –e
*/30 * * * * /../myftp.sh
此文件在/var/cron/tabs/下,以用户名命名,可以自行按照格式编辑。这其中:
第一列为分钟,规定每小时的第几分钟执行相应的程序
第二列为每天第几个小时执行程序
第三列为每月的第几天
第四列为第几周
第五列为每周的第几天
最后为要执行的命令。
九、3322域名配置:(下面这一段转自3322网站关于BSD下域名使用方法,非常易于操作)
首先去http://www.3322.org/ 申请动态域名。申请之后,在http://www.3322.org/dyndnspage/e ... 我是解压缩到 /usr/local/bin下的。在里面找到qdns.conf, 那个就是3322.org动态域名的配置文件。在配置文件里面写入:
user=hefish:xxxxxxx #hefish是你申请时的用户名,xxxxxxx是密码
host=web.3322.org #这是你申请的动态域名。
interface=tun0 #这是域名所要指向的IP所在的设备,我们是ADSL拨号,设备就是tun0
写完保存后,就可以启动动态域名了,我是这样启动的
/usr/local/bin/ez-ipupdate -c /usr/local/bin/qdns.conf
之后我们可以用nslookup来看一下,是不是已经把我们注册的动态域名指向了我们刚刚拨号所分配地址。
如果我们不想每次拨号都输入这个命令,你可以把他写到/etc/ppp/ppp.linkup文件中,每次拨号完毕的时候就可以自动运行域名信息更新程序。我的ppp.linkup文件是这样的:
adsl:
iface clear
!bg /usr/local/bin/ez-ipupdate -c /usr/local/bin/qdns.conf
adsl是拨号的配置标号, !bg表示在后台运行ez-ipupdate,注意每一行都是以空格开始的。
十、远程管理控制:
在系统中建立远程控制用户:abc
adduser abc
并将其加入wheel组:[因为在unix中只有wheel组的用户才可以通过ssh进行]
pw mod group wheel –m abc
在windows端安装putty,通过ip对服务器以ssh方式进行管理控制。以abc用户登录,若需登录以后使用root用户,键入su及密码后即可。
完成后我们即可在外网通过:http://***.3322.org:9888对内 ... .200进行访问。
ftp://***.3322.org:2121内网[url]ftp://192.168.0.200进行访问,有点奇怪的是我在本地内网中却无法通过这样的方式进行访问,不知道是不是防火墙的原因,摸索中。
还有一点发现,在配置好squid后,如果ipf.rules规则配置有误,或是网络参数配置不正确,在系统启动时会出有关squid启动的错误提示。
实现功能 |
|