PPTP ×××的基本原理
PPTP ×××本质上是虚拟的点对点链路,它先把到达远方内网的数据包打包成PPP帧,然后再对这些PPP帧进行二次封装,以便于能够在其他物理链路上进行传送。 PPTP ×××有控制信道和数据信道之分,控制信道连接到×××报务器的TCP1723端口,起着控制和管理×××隧道的功能,数据信道是传送PPP帧的信道,关于PPTP数据帧的封装过程如图所示:
 

 


在打包PPP帧的过程中,将对PPP数据包进行加密,为了取得最大的安全性,我们这里将使用MPPE加密和MSCHAPv2身份验证方法。下面我们来看看具体配置过程。
注:这里的PPTP只是一种协议,PPTP: Point to Point Tunneling Protocol --  点到点隧道协议。读者不要被他迷惑了。实现×××有多种协议可以选择,本文讲述的是使用PPTP协议来实现×××,即:PPTP ×××.
 
 

实验模拟:

 

A:eth1 192.168.0.3         #内网

  eth2 202.105.182.1 #外网IP

  eth2:0 192.168.1.3 #内网

  eth2:1 192.168.2.3 #内网

  eth2:2 192.168.100.3     #控制卡网段

rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm        #注意操作系统是多少位

 

vim /etc/pptpd.conf

localip 172.16.0.1            #分配给*** server的地址

remoteip 172.16.0.10-100      #分配给*** client的地址范围

 

vim /etc/ppp/options.pptpd    #分配给*** clientdns解析地址

ms-dns 8.8.4.4     

ms-dns 8.8.8.8

 

vim /etc/ppp/chap-secrets    #clinet account

"zhongxuan"     *       "zhongxuan"             *

 

cat /etc/sysconfig/iptables 

# Generated by iptables-save v1.3.5 on Mon Sep 10 17:49:07 2012

*nat

:PREROUTING ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A POSTROUTING -d 192.168.0.0/255.255.255.0 -j SNAT --to-source 192.168.0.3 

-A POSTROUTING -d 192.168.100.0/255.255.255.0 -j SNAT --to-source 192.168.100.3 

-A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 192.168.1.3

-A POSTROUTING -d 192.168.2.0/24 -j SNAT --to-source 192.168.2.3

-A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 202.105.182.1

-A POSTROUTING -d 202.105.182.0/26 -j SNAT --to-source 202.105.182.1

COMMIT

# Completed on Mon Sep 10 17:49:07 2012

# Generated by iptables-save v1.3.5 on Mon Sep 10 17:49:07 2012

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [249:30024]

-A INPUT -i lo -j ACCEPT 

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT 

-A INPUT -p gre -j ACCEPT 

-A INPUT -p tcp -m tcp --dport 47 -j ACCEPT

-A INPUT -s 192.168.0.0/255.255.0.0 -j ACCEPT #内网汇总

-A INPUT -s 172.16.0.0/255.255.0.0 -j ACCEPT 

-A INPUT -s 119.253.59.0/255.255.255.192 -j ACCEPT #内网出外网的接口

#-A INPUT -s 219.239.89.0/255.255.255.128 -j ACCEPT 

-A INPUT -s 202.105.182.0/255.255.255.192 -j ACCEPT 

#-A INPUT -s 113.106.105.88/255.255.255.248 -j ACCEPT 

#-A INPUT -p tcp -m tcp --dport 80 -m connlimit --connlimit-above 30 --connlimit-mask 32 -j DROP 

#-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 

#-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 30/sec --limit-burst 10 -j ACCEPT 

-A INPUT -m state --state INVALID -j DROP 

-A INPUT -j DROP 

COMMIT

# Completed on Mon Sep 10 17:49:07 2012

 

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

 

sysctl -p

service pptpd start

chkconfig pptpd on

 
 
 
 
 
 
 

问题:

1. 如果*** 服务器开启了iptables防火墙,需要开放哪些端口和服务?
向/etc/sysconfig/iptables中加入:
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT

-A INPUT -p gre -j ACCEPT

-A INPUT -p tcp --dport 47 -j ACCEPT

再运行 service iptables restart重新加载防火墙规则即可。

2. ×××连接正常,但无法通过*** server连接internet ?

这是因为*** server上没有相关路由规则,导致客户端只能连接*** server所在内网,而无法连接internet,需要在*** server作相应NAT转换。

假设***分配给客户端的IP段是172.16.0.0/16, ×××服务器有三个IP, 一个公网和两个内网,分别为202.100.20.10, 192.168.1.68, 192.168.2.57

在/etc/sysconfig/iptables最前面加入:

*nat

:PREROUTING ACCEPT

:POSTROUTING ACCEPT

:OUTPUT ACCEPT

-A POSTROUTING -d 192.168.1.0/255.255.255.0 -j SNAT --to 192.168.1.68

-A POSTROUTING -d 192.168.2.0/255.255.255.0 -j SNAT --to 192.168.2.57

-A POSTROUTING -s 172.16.0.0/255.255.0.0 -j SNAT --to 202.100.20.10

COMMIT

试想,如果没有最后一条NAT转换规则,当数据包以源IP 172.16.0.X到达***服务器后,***服务器再将它转换给连接Internet的网关(数据包来源并未变化),显然172.16.0.X属于保留的IP,无法在Internet上直接转发使用,这也就解释了必须在×××服务器上配置SNAT,才能让客户端上网。

经过上述NAT规则设置,无论上网,还是连接与×××同一局域网的其它机器,目标机器所收到的来源IP均为***服务器的真实IP。

 

 

 

再重启防火墙 service iptable restart 即可。最后一条规则, 是确保可以通过×××连接internet的关键。但这样一来,客户端所有的网络通信均会经过*** server。

 

 

 

×××服务器的典型应用:
以安全的方式管理大量服务器。可在公网上部署×××服务器,同时配置被管理服务器的防火墙仅允许来自×××服务器的SSH/RDP连接。在这个环境中,×××服务器充当跳板角色。这样,也就不必担心服务器登录账号泄露造成的安全隐患。

 

对服务器管理人员较多的场景,只要控制好×××账号,即可很大程度上提高安全性。