본문 바로가기
server/Cent_os

pptpd/xl2tpd vpn with freeradius2 install

1.설치 환경 
OS : CentOS 6.8 64bit 
Public IP : 192.168.0.101
DB: mysql 5.6.31 (root/12345)
SELINUX : disabled
HOSTNAME: mha1

2.PPTP 설치 

## epel repolist 추가 및 yum update 진행
[root@mha1 ~]#  yum install epel* -y 
[root@mha1 ~]#  yum update -y 

## ppp,pptp등 pptp관련 패키지 다운 설치 진행 
[root@mha1 ~]#  yum install libpcap -y  
[root@mha1 ~]# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
[root@mha1 ~]# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/dkms-2.0.17.5-1.noarch.rpm
[root@mha1 ~]# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/ppp-2.4.5-33.0.rhel6.x86_64.rpm
[root@mha1 ~]# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/ppp-devel-2.4.5-33.0.rhel6.x86_64.rpm
[root@mha1 ~]# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptp-release-4-7.rhel6.noarch.rpm
[root@mha1 ~]# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptpd-1.4.0-1.el6.x86_64.rpm


##  패킷 포워딩을 활성하 하기 위해 커널 변수 변경 하기
[root@mha1 ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward =1

## pptp.conf 파일 백업 뒤 설정 변경(localip에 서버의 공인 아이피 입력)
[root@mha1 ~]# cp /etc/pptpd.conf /etc/pptpd.conf.back
[root@mha1 ~]# > /etc/pptpd.conf
[root@mha1 ~]# vi /etc/pptpd.conf
ppp /usr/sbin/pppd
option /etc/ppp/options.pptpd
noipparam
logwtmp
connections 100
localip 192.168.0.101

## ppp 인터페이스 pptp 설정 관련 설정 파일 백업 뒤 설정 변경
[root@mha1 ~]# cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.back
[root@mha1 ~]# >  /etc/ppp/options.pptpd
[root@mha1 ~]# vi  /etc/ppp/options.pptpd
name pptpd
proxyarp
nodeflate
nobsdcomp
lcp-echo-failure 10
lcp-echo-interval 5
deflate 0
lock
logfile /var/log/pptpd.log
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2

## CHAP 인증 ##
require-chap

## DNS lookup ##
ms-dns 8.8.8.8

nobsdcomp
novj
novjccomp

# RADIUS Modify#
plugin radius.so 
plugin radattr.so

## pptp 재시작후 해당 pptp 활성화 확인 
[root@mha1 ~]# /etc/rc.d/init.d/pptpd restart-kill
[root@mha1 ~]# /etc/rc.d/init.d/pptpd start
[root@mha1 ~]# netstat -nltp | grep pptp
tcp        0      0 0.0.0.0:1723                0.0.0.0:*                   LISTEN      1775/pptpd     



2.L2TP 설치 

[root@mha1 ~]#  yum install -y xl2tpd


## xl2tpd.conf 파일 백업 뒤 설정 변경(localip에 서버의 공인 아이피 입력)

[root@mha1 ~]# cp /etc/xl2tpd/xl2tpd.conf  /etc/xl2tpd/xl2tpd.conf.back [root@mha1 ~]# > /etc/xl2tpd/xl2tpd.conf [root@mha1 ~]#  vi /etc/xl2tpd/xl2tpd.conf [global] port = 1701 auth file = /etc/xl2tpd/l2tp-secrets access control = no rand source = dev ipsec saref = yes [lns default] exclusive = no ip range = 192.168.80.5-192.168.81.35 local ip = 192.168.80.1 require chap = yes refuse pap = yes require authentication = yes name = VPNserver ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes flow bit = yes

## ppp 인터페이스 l2tp 설정 관련 설정 파일 백업 뒤 설정 변경

[root@mha1 ~]# cp /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.back
[root@mha1 ~]# > /etc/ppp/options.xl2tpd
[root@mha1 ~]#  vi /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
lcp-echo-failure 30
lcp-echo-interval 5
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
nodeflate
auth
crtscts
idle 1800
mtu 1410
mru 1410
defaultroute
debug
proxyarp
connect-delay 5000
lock
plugin radius.so
plugin radattr.so


3.freeradius client 설치 및 설정


## freeradius 설치 및 mysql 연동을 위한 mysql-devel 패키지 설치 
[root@mha1 ~]# yum install freeradius freeradius-mysql radiusclient-ng radiusclient-ng-utils freeradius-utils mysql-devel -y


## 작업의 편의성을 위하여 yum 으로 설치된 radiusclient-ng 를 radiusclient 로 링크 
[root@mha1 ~]# ln -s /etc/radiusclient-ng /etc/radiusclient
## radius client 의 bindaddr 주석 처리(75 줄)
[root@mha1 ~]# vi /etc/radiusclient-ng/radiusclient.conf
#bindaddr *

## radius client 에서 연결할 서버의 key와 서버 주소 입력 (key는 server와 동일 해야 하며, 외부에 있을 경우 외부 아이피 추가 본 환경에서는 
## server와 client 가 같은 서버에서 역할을 한다.)

[root@mha1 ~]# vi  /etc/radiusclient-ng/servers
localhost cy_key

## ppp연결을 위한 기본 dictionary 복사및 microsoft dictionary 추가후 아래와 같이 입력
## 지시자 앞에 공백 있으면 에러 발생 됨
[root@mha1 ~]# cp /usr/share/radiusclient-ng/diction* /etc/radiusclient-ng/
[root@mha1 ~]# vi  /etc/radiusclient-ng/dictionary.microsoft

VENDOR          Microsoft       311     Microsoft

ATTRIBUTE       MS-CHAP-Response        1       string  Microsoft
ATTRIBUTE       MS-CHAP-Error           2       string  Microsoft
ATTRIBUTE       MS-CHAP-CPW-1           3       string  Microsoft
ATTRIBUTE       MS-CHAP-CPW-2           4       string  Microsoft
ATTRIBUTE       MS-CHAP-LM-Enc-PW       5       string  Microsoft
ATTRIBUTE       MS-CHAP-NT-Enc-PW       6       string  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Policy 7     string  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Type 8       string  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Types  8     string  Microsoft
ATTRIBUTE       MS-RAS-Vendor           9       integer Microsoft
ATTRIBUTE       MS-CHAP-Domain          10      string  Microsoft
ATTRIBUTE       MS-CHAP-Challenge       11      string  Microsoft
ATTRIBUTE       MS-CHAP-MPPE-Keys       12      string  Microsoft
ATTRIBUTE       MS-BAP-Usage            13      integer Microsoft
ATTRIBUTE       MS-Link-Utilization-Threshold 14 integer        Microsoft
ATTRIBUTE       MS-Link-Drop-Time-Limit 15      integer Microsoft
ATTRIBUTE       MS-MPPE-Send-Key        16      string  Microsoft
ATTRIBUTE       MS-MPPE-Recv-Key        17      string  Microsoft
ATTRIBUTE       MS-RAS-Version          18      string  Microsoft
ATTRIBUTE       MS-Old-ARAP-Password    19      string  Microsoft
ATTRIBUTE       MS-New-ARAP-Password    20      string  Microsoft
ATTRIBUTE       MS-ARAP-PW-Change-Reason 21     integer Microsoft
ATTRIBUTE       MS-Filter               22      string  Microsoft
ATTRIBUTE       MS-Acct-Auth-Type       23      integer Microsoft
ATTRIBUTE       MS-Acct-EAP-Type        24      integer Microsoft
ATTRIBUTE       MS-CHAP2-Response       25      string  Microsoft
ATTRIBUTE       MS-CHAP2-Success        26      string  Microsoft
ATTRIBUTE       MS-CHAP2-CPW            27      string  Microsoft
ATTRIBUTE       MS-Primary-DNS-Server   28      ipaddr  Microsoft
ATTRIBUTE       MS-Secondary-DNS-Server 29      ipaddr  Microsoft
ATTRIBUTE       MS-Primary-NBNS-Server  30      ipaddr  Microsoft
ATTRIBUTE       MS-Secondary-NBNS-Server 31     ipaddr  Microsoft
VALUE           MS-BAP-Usage            Not-Allowed     0
VALUE           MS-BAP-Usage            Allowed         1
VALUE           MS-BAP-Usage            Required        2
VALUE   MS-ARAP-PW-Change-Reason        Just-Change-Password            1
VALUE   MS-ARAP-PW-Change-Reason        Expired-Password                2
VALUE   MS-ARAP-PW-Change-Reason        Admin-Requires-Password-Change  3
VALUE   MS-ARAP-PW-Change-Reason        Password-Too-Short              4
VALUE           MS-Acct-Auth-Type       PAP             1
VALUE           MS-Acct-Auth-Type       CHAP            2
VALUE           MS-Acct-Auth-Type       MS-CHAP-1       3
VALUE           MS-Acct-Auth-Type       MS-CHAP-2       4
VALUE           MS-Acct-Auth-Type       EAP             5
VALUE           MS-Acct-EAP-Type        MD5             4
VALUE           MS-Acct-EAP-Type        OTP             5
VALUE           MS-Acct-EAP-Type        Generic-Token-Card      6
VALUE           MS-Acct-EAP-Type        TLS             13

## radiusclient 에서 dictionary   위치를 기존 설정 주석 처리후 아래 새로운 경로로 추가 
[root@mha1 ~]# vi  /etc/radiusclient-ng/radiusclient.conf
... 
#dictionary     /usr/share/radiusclient-ng/dictionary
 dictionary /etc/radiusclient-ng/dictionary
...


## dictionary 기본 파일에 추가된 dictionary include
[root@mha1 ~]# vi  /etc/radiusclient-ng/dictionary
...
INCLUDE /etc/radiusclient-ng/dictionary.microsoft
INCLUDE /etc/radiusclient-ng/dictionary.merit
...



4.freeradius server 설치 및 설정

##mysql 에 radius가 사용할 mysql 계정 추가  및 radius 데이터 베이스 생성 
[root@mha1 mysql]# mysql -uroot -p
Enter password:
 ...
mysql> grant all privileges on *.* to 'radius '@'localhost ' identified by 'radpass' with grant option;  
mysql> grant all privileges on *.* to 'radius'@'%' identified by 'radpass ' with grant option;
mysql> create database radius;
Query OK, 1 row affected (0.00 sec)
...

## 기본 radius sql 삽입 진행 
[root@mha1 mysql]# cd  /etc/raddb/sql/mysql/
[root@mha1 mysql]# mysql -uroot -p < admin.sql
[root@mha1 mysql]# mysql -uroot -p radius < schema.sql  

## radius 데이터베이스에 유저가 사용할 계정 radcheck  테이블에 추가 (id: user1 / pw : pass1)
[root@mha1 mysql]# mysql -uroot -p
...
mysql> use radius
Database changed
mysql>  INSERT INTO radcheck (username,attribute,op,value) values ('user1','User-Password','==','pass1');
Query OK, 1 row affected (0.01 sec)

mysql> select * from radcheck;
+----+----------+---------------+----+-------+
| id | username | attribute     | op | value |
+----+----------+---------------+----+-------+
|  1 | user1    | User-Password | == | pass1 |
+----+----------+---------------+----+-------+
1 row in set (0.00 sec)



## radreply테이블에 해당 유저가 연결될 아이피 추가 

mysql> INSERT INTO radreply (username, attribute, op, value) values ('user1','Framed-IP-Address',':=','192.168.0.102'); Query OK, 1 row affected (0.01 sec) mysql> select * from radreply; +----+----------+-------------------+----+--------------+ | id | username | attribute | op | value | +----+----------+-------------------+----+--------------+ | 1 | user1 | Framed-IP-Address | := | 192.168.0.102 | +----+----------+-------------------+----+--------------+ 1 row in set (0.00 sec)


## radius server 가 받아 드릴 client 아래와 같이 수정 (기존 localhost 설정 수정)
[root@mha1 mysql]# vi /etc/raddb/clients.conf
client 127.0.0.1 {
ipaddr = 192.168.0.101
secret = cy_key
shortname = localhost 
nastype = other
}



## 기본 유저의 연결 횟수 1회로 기본 설정을 위해 아래 설정 추가
[root@mha1 mysql]# vi  /etc/raddb/users
...
DEFAULT Simultaneous-Use := 1
        Fall-Through = 1



## 파일 형태의 인증이 아닌 mysql 쿼리로 관리를 위하여 sql모듈을 활성화를 위해 sql.conf 설정 주석 해제
[root@mha1 mysql]# vi /etc/raddb/radiusd.conf
...
  $INCLUDE sql.conf
...



## sql.conf 파일에 db 에추가한 계정과 패스워드 수정 
[root@mha1 mysql]# vi /etc/raddb/sql.conf
...
sql {
        database = "mysql"
        driver = "rlm_sql_${database}"
        server = "192.168.0.101"
        login = "root"
        password = "12345"
...



## mschap 인증 설정 변경
[root@mha1 mysql]# vi /etc/raddb/modules/mschap
...
mschap {
...
use_mppe = yes
require_encryption = yes
require_strong = yes
}
...



##기본적으로 radius 서버는 file 로 인증 하기 때문에 모듈에서 files를 주석 각 지시자에 대하여 sql 로 설정 주석 해제 한다.
[root@mha1 mysql]# vi /etc/raddb/sites-enabled/default
..
authorize {
          ...
        #files
         sql
 ...
}
...
session {
...
        sql
}
...
 post-auth {
...
        sql
...
}

accounting {
         sql
...

....


5.l2tp 를 위한 ipsec  설치 및 설정

## ipsec tool 설치 진행 
[root@mha1 ~]# yum -y install http://wiki.nikoforge.org/download/ipsec-tools/ipsec-tools-0.8.0-3defpsk.el6.x86_64.rpm





##xl2tp gloval 지시자에 ipese 옵션 추가
[root@mha1 ~]# vi /etc/xl2tpd/xl2tpd.conf   
[global]
ipsec saref = yes
,,,



## ipsec 실행을 위한 파일 생성
[root@mha1 ~]# vi /etc/racoon/init.sh
#!/bin/sh
echo -e "flush;\n\
spdflush;\n\
spdadd 0.0.0.0/0[0] 0.0.0.0/0[1701] udp -P in ipsec esp/transport//require;\n\
spdadd 0.0.0.0/0[1701] 0.0.0.0/0[0] udp -P out ipsec esp/transport//require;\n"\
| setkey -c

[root@mha1 ~]# chmod 750 /etc/racoon/init.sh
[root@mha1 ~]# echo /etc/racoon/init.sh >> /etc/rc.d/rc.local


##ipsec racoon 설정 파일 백업및 새로 설정                                                              
                                                 
[root@mha1 ~]# cp -aR  /etc/racoon/racoon.conf /etc/racoon/racoon.conf_bak
[root@mha1 ~]# >/etc/racoon/racoon.conf
[root@mha1 ~]# vi /etc/racoon/racoon.conf
path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
path script "/etc/racoon/scripts";
remote anonymous
{
exchange_mode aggressive,main;
passive on;
proposal_check obey;
support_proxy on;
nat_traversal on;
ike_frag on;
dpd_delay 20;
proposal
{
encryption_algorithm aes;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
proposal
{
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
}
sainfo anonymous
{
encryption_algorithm aes,3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
pfs_group modp1024;
}
[root@mha1 ~]# chmod 600 /etc/racoon/racoon.conf


## l2tp psk 키 설정 
[root@mha1 ~]# vi /etc/racoon/psk.txt
*       cy_key



6. 테스트및 데몬 실행
[root@mha1 ~]# chkconfig --add racoon
[root@mha1 ~]# chkconfig --add pptpd
[root@mha1 ~]# chkconfig --add xl2tpd
[root@mha1 ~]# chkconfig --add radiusd

[root@mha1 ~]# chkconfig --level 3  radiusd on
[root@mha1 ~]# chkconfig --level 3  pptpd on 
[root@mha1 ~]# chkconfig --level 3  xl2tpd on
[root@mha1 ~]# chkconfig --level 3  racoon on 

[root@mha1 ~]# /etc/init.d/racoon restart
[root@mha1 ~]# /etc/init.d/pptpd start
[root@mha1 ~]# /etc/init.d/xl2tpd start
[root@mha1 ~]# /etc/init.d/radiusd start


## 윈도우상 테스트를 위하여 제어판->모든제어판항목-> 네트워크 및 공유센터 이동후 "새 연결 또는 네트워크 설정" 클릭


##Vpn 연결을 위하여 회사에 연결 클릭



## 기존의 연결이 있다면 무시하고 새연결 만들기 클릭


# 내인터넷 연결 사용 (vpn) 클릭


## 인터넷 주소에 서버 아이피 입력 및 연결 허용, 설정만 하도록 체크후 다음 클릭


## radact에서 설정한 유저와 암호 입력 


# 닫기를 클릭 하여 연결은 잠시 보류 한다.


# 네트워크 및 공유 센터에서 어뎁터 설정 변경 클릭 


# 방금 생성한 vpn연결 인터페이스에서 오른쪽 마우스 속성에 진입


# 보안 탭 클릭후 아래와 같이 vpn종류 pptp 데이터 암호화 " 암호화 사용 안함" 으로 변경 


# 설정 변경후 해당 vpn 연결 


# 저장된 유저 정보와 암호 확인 후 연결 


# 연결이 정상적으로 된다면 아래와 같이 pptp로 연결 된것을 확인 할 수 있으며, 이상있을 경우 해당 로그들을 참조 한다.


# l2tp 연결을 위하여 다시 연결을 종료 한다.


# 설정 변경을 위하여 보안 탭에 진입후에 vpn 종류를 l2tp/ipsec 으로 변경, 데이터암호화를 선택적 암호화 사용으로 변경 한다.
# key 삽입을 위하여 고급 설정을 클릭 한다.


# 인증에 미리 공유한 키사용 체크후 아래 psk 입력한 키를  클라이언트에 동일하게 입력 
# [root@mha1 ~]# cat /etc/racoon/psk.txt
# *       cy_key


# pptp와 동일하게 설정 했다면 아래와 같이 정상적으로 연결 확인 할 수 있다.






반응형