勿六七 2012-01-18
第一部分 VPN 简介及其分类
1 PPTP-Based VPN
PPTP (Point to Piont Tunneling Protocol)是由微软发起的可以工作在包括在Windows95 在内的微软多个操作系统上的协议.虽然已经用了相当长的时间,但其仍然存在许多安全漏洞.它主要是基于GRE(Generic Routing Encapsulation) 通过隧道来传送一个ppp 连接Linux 系统上的PPTP实现主要代表是PoPToP. 如果需要用PPTP ,建议用基于IPSEC的L2TP 来代替PPTP,因为它更加安全,并且提供了和PPTP 一样的功能
2 SSL-Based VPN (Openvpn)
加密套接字层(SSL) 虚拟专用网(VPN) 逐渐流行起来,这种VPN 的最大好处在于,仅仅需要一个单独的TCP或者UDP端口随便可以轻易的穿越大多数防火墙进行数据传送.SSL VPN 是在Linux 系统上最容易实现的就是OpenVPN.
3 IPSec (IP Security) 是一种比较老的也是采用最为广泛的VPN技术.是用IETF开发的一组身份验证和数据加密协议,提供了私有性,完整性,真实性和防重播等安全服务,可以用于IP网络中的数据保密,完整性检查,身份验证,密钥管理等许多方面
IPSec 在Linux上的实现主要分为两类
第一类是Frees/wan 项目,该项目在2004 就已经终止了开发,而Free/wan 已经分裂为Openswan 和stringswan 两个项目.他们提供自身的内涵堆栈(Kernel stack),也可以基于新近的内核中所提供的代码
第二类是BSD之上的KAME,它中能使用内涵堆栈.
大多数IPsec 规范本神并不在本地网络中为远程主机提供一个虚拟的IP,不过仍用不少为此而实现的扩展可以解决如此类问题.可以将Microsoft 的支持的L2TP 的产品运行于IPsec 之上
IPSec是面向连接的协议,被许多商业路由器所采用,OpenSwan 是基于自身的XAUTH扩展,也可以作为Cisco,Nortel 以及其他多家VPN集成产品的客户端
IPSec 可以在不改变防火墙规则的情况下,在内核级别相当容易的对什么能通过隧道或者什么不能做出安全的处理,其在实现NET-TO-NET 以及host-to-Net 的配置方面也表现出了很大的灵活性.但在灵活也就意味着实现起来的困难,所有IPSec 的成功配置运行相当有难度,此外,尽管已经在对NAT-Travle 的支持方面做了不少的改进,但还是不能较好的工作于一些NAT网关之后
OpenSWan 支持2.0,2.2,2.4 以及2.6 内核,可以运行在不同平台下,OpenSWan是开源项目FreeS/Wan 停止开发后的后继分支项目,OpenSWan 是由三个主要组件构成:
1 配置工具(ipsec 命令脚本)
2 Key 管理工具(Pluto)
3 内核组件(KLIPS/26sec)
26sec 使用2.6内核内建模块Netkey,用来替代OpenSwan 开发的KLIPS模块,2.4及以下版本内核无Netkey模块,只能使用KLIPS
如果您用的是2.6.9 以上的内核,推介使用的26sec,2.6.9以下版本的内核NETKEY存在BUG,推介使用KLIPS
第二部分 下载安装openswan 及其配置
1 #wget http://www.openswan.org/download/openswan-2.6.34.tar.gz
#tar xvf openswan-2.6.34.tar.gz
#make programs
#make install
2 验证是否安装正确
#depmod -a
#mkdprobe ipsec
#ipsec –version
如果显示如下,则说明已经加载IPSEC stack
Linux Openswan U2.6.34/K2.6.18-164.el5 (netkey)
See `ipsec --copyright' for copyright information.
3 修改Linux 内核参数
#vim /etc/sysctl.conf
net.ipv4.ip_forward=0
net.ipv4.conf.default.rp_filer= 1
修改为
net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filer=0
4 执行以下命令是设置生效
#sysctl –p
5 禁用icmp
#vim disable_send_accept_redirects.sh
#!/bin/bash
# Disable send redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/send_redirects
# Disable accept redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects
echo "1" > /proc/sys/net/core/xfrm_larval_drop
#chmod +x disable_send_accept_redirects.sh
#bash disable_send_accept_redirects.sh
6 生成key
#mv /dev/random /dev/random.bak
#ln –s /dev/urandom /dev/random
#ipsec newhostkey --output /etc/ipsec.secrets
注: mv 和ln –s 的目的是为了第三步的IPSec 操作节省时间
第三部分,配置OpenSwan
一. openswan 的连接方式
1) NET-TO-NET 连接方式
使用该种连接方式,可以将来年改革不同位置的networks 连接成为一个虚拟 专用网络;连接建立后,两端的主机可以同名的互相访问.不过.在两个网关之间以及网关到对方内部网络内主机不能实现透明的互相访问.这也是第二中方式Road Warrior 存在的部分原因
使用这种方式必须满足以下条件:
I 两个network 都有自己的Linux 网关,且每个网关都安装了OpenSwan;
II 每个子网的IP段不能出现叠加
2) Road Warrior 方式
该种方式用以实现远程主机到本地网络的安全拨入,主要用于经常有员工出差时可以远程安全的访问企业内部的资源
使用这种方式应该满足以下条件:
I 一个具有静态IP地址的Linux 网关,安装Openswan
II 一个安装了OpenSwan 的Latop,可以是动态的IP地址
在本地的网关是最好安装tcpdump,以便测试连接
OpenSwan 支持多种认证方式,如RSA,RSK,XAUTH,x.509 等;最常用到的是RSA和x.509