2008年5月10日星期六

配置Linux防火墙使PPTP VPN协议可穿透

PPTP VPN在默认的Linux防火墙下是无法穿透的,而SSL VPN则可以,为了能透过Linux防火墙拨号到其后的PPTP VPN服务器,必须在Linux防火墙上安装netfilter的patch-o-matic-ng补丁。

本文以2.4内核的RedHat Linux AS 3.0 update 3 为例,说明操作的过程。

安装步骤

1、确定版本
uname -r 可以得到当前的内核版本号为 2.4.21-20.ELsmp (服务器是支持超线程的至强处理器)

2、下载必要的软件并解压
cd /usr/src/
wget -c ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050816.tar.bz2
wget -c ftp://ftp.netfilter.org/pub/iptables/iptables-1.3.1.tar.bz2
tar xjvf patch-o-matic-ng-20050816.tar.bz2
tar xjvf iptables-1.3.1.tar.bz2

3、进入内核源代码进行设置
在做这步之前最好备份源代码,以便在配置错误时能恢复
cd /usr/src/
cp -a linux-2.4.21-20.EL linux-2.4.21-20.EL.backup

一旦内核选项和补丁配置错误,可以使用下面的命令恢复内核
cd /usr/src/
rm -rf linux-2.4.21-20.EL
cp -a linux-2.4.21-20.EL.backup linux-2.4.21-20.EL
进入源代码目录
cd /usr/src/linux-2.4.21-20.EL
清除以前编译内核留下的内容
make mrproper
make menuconfig 什么都不做,直接退出并保存

vi Makefile 将 EXTRAVERSION=-20.ELcustom 修改为 EXTRAVERSION=-20.ELsmp (和当前的内核版本相同)

4、打补丁
cd /usr/src/patch-o-matic-ng-20050816
export KERNEL_DIR=/usr/src/linux-2.4.21-20.EL
export IPTABLES_DIR=/usr/src/iptables-1.3.1
./runme base 这一项中,将能打的补丁都安装上,如果有冲突不能安装的按N
./runme extra 这一项中,除了我们需要的  pptp-conntrack-nat 之外,其它的都不安装

5、重新配置内核并编译内核模块
cd /usr/src/linux-2.4.21-20.EL
make menuconfig
确认[*] Prompt for development and/or incomplete code/drivers要选中,然后进入Networking options,再进入IP:Netfilter Configuration,会看到增加很多模块,把你想要的选中“<M>”(我们这里就是选择PPTP和GRE相关的项),保存、退出,至此,给netfilter打补丁工作完成
make dep
make modules SUBDIRS=net/ipv4/netfilter
cp -f net/ipv4/netfilter/*.o /lib/modules/2.4.21-20.ELsmp/kernel/net/ipv4/netfilter/ 复制编译好的模块到对应内核中
depmod -a 检查模块依赖性
这里注意,可能会提示依赖错误(ipchains和ipfw),由于这两个是不使用的,所以用下面的命令删除几个模块
rm -rf /lib/modules/2.4.21-20.ELsmp/kernel/net/ipv4/netfilter/ipfwadm_core.o
rm -rf /lib/modules/2.4.21-20.ELsmp/kernel/net/ipv4/netfilter/ipchains_core.o
rm -rf  /lib/modules/2.4.21-20.ELsmp/kernel/net/ipv4/netfilter/ip_fw_compat.o
再使用depmod -a命令,应该不会再提示错误

6、编译iptables
cd /usr/src/iptables-1.3.1
make BINDIR=/sbin LIBDIR=/lib MAINDIR=/usrshare/man install
ln -s /lib/iptables /usr/local/lib/iptables
至此,工作基本完成,为了使前面的修改生效,系统最好重新启动一下

7、为了能透过防火墙使用FTP和VPN,需要装载 ip_nat_ftp、ip_nat_pptp 和 ip_nat_proto_gre 模块,使用 modprobe ip_nat_ftp 装载模块时提示以下错误
modprobe: Too deep recursion in module dependencies!
modprobe: Circular dependency? ip_nat_core ip_nat_proto_udp ip_conntrack ip_nat_ftp
Aborted
为解决这个问题,使用下面的方法
cd /lib/modules/2.4.21-20.ELsmp
vi modules.dep
找到ip_nat_ftp,删除其后的依赖项 ip_nat_core,如果有 ip_nat_helper 或者 ip_nat_standalone 的话一并删除,存盘后重新使用 modprobe ip_nat_ftp 装载模块,一般就没有问题了,此时使用 lsmod 可以看到 ip_nat_ftp 模块已正确加载。
对于 ip_nat_pptp 和 ip_nat_proto_gre 模块,也可以使用同样的方法解决并加载。

至此,neifilter补丁安装完毕,在正确配置iptables脚本之后,就可以通过Linux防火墙拨号到其后的PPTP VPN服务器了。

没有评论:

发表评论