본문 바로가기
open source solution

openLDAP + RADIUS +openVPN

by open_tracking 2019. 10. 14.

제가 정리한 word파일을 붙여넣기 한거라서.....글씨 들이 들쭉날쭉 합니다.

 

환경 : hyper-v

 

사용된 가상머신

한개의 PC에 2개의 가상머신 사용

openVPN / openldap + freeradius (2개) 

 

VPN클라이언트 테스트를 이용한 또 다른 PC 1대

 

사용된 네트워크 환경

hyper-v 가상스위치와 물리이더넷 맵핑을 통한 리얼 내부방을 구성하고

VPN이 깔린 가상머신은 이더넷 2개를 줘서 외부 이더넷과 내부 이더넷으로 불리하고 

이 또한 랜포트당 가상스위치 1개로 맵핑을시켜서 실사용 환경과 유사한 환경으로 구성함.

 

따라서 이와 같은 환경을 내려면 랜포트가 2개가 필요.

(필자는 메인보드랜카드1 + PCI 쿼드랜카드4 총 5개의 랜포트를 운영하고 있어서 가능하였으며

테스트하는 사용자는 기본랜카드+ USB랜카드를 구해서 꽂아서 하여도 무방함)

 

openldap을 yum 으로 설치 합니다.

yum update -y

yum install epel-release

yum install -y openldap*

systemctl start slapd.service        /* LDAP 서비스 시작
systemctl enable slapd.service    /* LDAP서버스 부팅시 자동시작

 

 

https://open-infra.tistory.com/21 부분 slapd 패스워드 등록 과정부터 끝까지 진행하고 오시면 됩니다.

 

다음은 freeradius 셋팅 부분입니다.

마찬가지로 LDAP가 설치된 같은 가상머신에 진행합니다.

 

yum install freeradius freeradius-utils freeradius-mysql freeradius-perl 

systemctl start radiusd
systemctl enable radiusd


 firewall-cmd --zone=public --add-port=1812/udp
 firewall-cmd -–zone=public --add-port=1813/udp
 firewall-cmd --zone=public --permanent --add-port=1812/udp
 firewall-cmd --zone=public --permanent --add-port=1813/udp
 firewall-cmd --zone=public --add-service=radius
 firewall-cmd --zone=public --permanent --add-service=radius

cd /etc/raddb

vim clients.conf

client localhost {
ipaddr = 127.0.0.1
secret = testhope201   (원하는 shared scret 설정하세요)
require_message_authenticator = no
nas_type = other
}

 

다음은 openvpn 부분

이부분은 다른 가상머신에 설치하였습니다.

 

eth0 = 외부망
eth1 = 내부망

centos 7.6

yum install epel-release
yum install openvpn* easy-rsa
yum install libgcrypt libgcrypt-devel gcc-c++

cd  /usr/share/easy-rsa/3.0.6/
cp /usr/share/doc/easy-rsa-3.0.6/vars.example vars

주석 해제 후 알맞게 수정 

vi vars

set_var EASYRSA_REQ_COUNTRY     "KR"
set_var EASYRSA_REQ_PROVINCE    "Seoul"
set_var EASYRSA_REQ_CITY        "Songpa-gu"
set_var EASYRSA_REQ_ORG "hope201"
set_var EASYRSA_REQ_EMAIL       "hope201@hope201.co.kr"
set_var EASYRSA_REQ_OU          "hope201"


주석 해제 후 알맞게 수정 

./easyrsa init-pki

./easyrsa build-ca nopass
패스워드 묻는창에서 원하는 패스워드

./easyrsa gen-req server nopass



./easyrsa sign-req server server

./easyrsa gen-dh

 

openvpn --genkey --secret /usr/share/easy-rsa/3.0.6/pki/ta.key

 

cd pki/

cp ca.crt /etc/openvpn/
cp dh.pem /etc/openvpn/
cp ta.key /etc/openvpn/
cp private/server.key /etc/openvpn/
cp issued/server.crt /etc/openvpn

 

cp /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf /etc/openvpn/server.conf

 

cd /etc/openvpn

 

vi server.conf


server.conf 셋팅

# Which local IP address should OpenVPN
# listen on? (optional)
;local a.b.c.d

# Which TCP/UDP port should OpenVPN listen on?
# If you want to run multiple OpenVPN instances
# on the same machine, use a different port
# number for each one.  You will need to
# open up this port on your firewall.
port 443
# TCP or UDP server?
proto tcp
;proto udp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# Use "dev tap0" if you are ethernet bridging
# and have precreated a tap0 virtual interface
# and bridged it with your ethernet interface.
# If you want to control access policies
# over the VPN, you must create firewall
# rules for the the TUN/TAP interface.
# On non-Windows systems, you can give
# an explicit unit number, such as tun0.
# On Windows, use "dev-node" for this.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel if you
# have more than one.  On XP SP2 or higher,
# you may need to selectively disable the
# Windows firewall for the TAP adapter.
# Non-Windows systems usually don't need this.
;dev-node MyTap

# SSL/TLS root certificate (ca), certificate
# (cert), and private key (key).  Each client
# and the server must have their own cert and
# key file.  The server and all clients will
# use the same ca file.
#
# See the "easy-rsa" directory for a series
# of scripts for generating RSA certificates
# and private keys.  Remember to use
# a unique Common Name for the server
# and each of the client certificates.
#
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12" directive in man page).
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
plugin /etc/openvpn/radius/radiusplugin.so /etc/openvpn/radius/radius.cnf ifconfig-pool-persist ipp.txt persist-key
# Network topology
# Should be subnet (addressing via IP)
# unless Windows clients v2.0.9 and lower have to
# be supported (then net30, i.e. a /30 per client)
# Defaults to net30 (not recommended)
topology subnet

# Configure server mode and supply a VPN subnet
# for OpenVPN to draw client addresses from.
# The server will take 10.8.0.1 for itself,
# the rest will be made available to clients.
# Each client will be able to reach the server
# on 10.8.0.1. Comment this line out if you are
# ethernet bridging. See the man page for more info.
server 10.8.0.0 255.255.255.0

# Maintain a record of client <-> virtual IP address
# associations in this file.  If OpenVPN goes down or
# is restarted, reconnecting clients can be assigned
# the same virtual IP address from the pool that was
# previously assigned.
ifconfig-pool-persist ipp.txt

# Configure server mode for ethernet bridging.
# You must first use your OS's bridging capability
# to bridge the TAP interface with the ethernet
# NIC interface.  Then you must manually set the
# IP/netmask on the bridge interface, here we
# assume 10.8.0.4/255.255.255.0.  Finally we
# must set aside an IP range in this subnet
# (start=10.8.0.50 end=10.8.0.100) to allocate
# to connecting clients.  Leave this line commented
# out unless you are ethernet bridging.
;server-bridge 10.8.0.1 255.255.255.0 10.8.0.6 10.8.0.100

# Configure server mode for ethernet bridging
# using a DHCP-proxy, where clients talk
# to the OpenVPN server-side DHCP server
# to receive their IP address allocation
# and DNS server addresses.  You must first use
# your OS's bridging capability to bridge the TAP
# interface with the ethernet NIC interface.
# Note: this mode only works on clients (such as
# Windows), where the client-side TAP adapter is
# bound to a DHCP client.
;server-bridge

# Push routes to the client to allow it
# to reach other private subnets behind
# the server.  Remember that these
# private subnets will also need
# to know to route the OpenVPN client
# address pool (10.8.0.0/255.255.255.0)
# back to the OpenVPN server.
push "route 192.168.111.0 255.255.255.0"
;push "route 10.8.0.0 255.255.255.0"

# To assign specific IP addresses to specific
# clients or if a connecting client has a private
# subnet behind it that should also have VPN access,
# use the subdirectory "ccd" for client-specific
# configuration files (see man page for more info).

# EXAMPLE: Suppose the client
# having the certificate common name "Thelonious"
# also has a small subnet behind his connecting
# machine, such as 192.168.40.128/255.255.255.248.
# First, uncomment out these lines:
;client-config-dir ccd
;route 192.168.111.0 255.255.255.0
;route 10.8.0.0 255.255.255.0
# Then create a file ccd/Thelonious with this line:
#   iroute 192.168.40.128 255.255.255.248
# This will allow Thelonious' private subnet to
# access the VPN.  This example will only work
# if you are routing, not bridging, i.e. you are
# using "dev tun" and "server" directives.

# EXAMPLE: Suppose you want to give
# Thelonious a fixed VPN IP address of 10.9.0.1.
# First uncomment out these lines:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# Then add this line to ccd/Thelonious:
#   ifconfig-push 10.9.0.1 10.9.0.2

#route-gateway 10.8.0.1
#push "route-gateway 10.8.0.1"

# Suppose that you want to enable different
# firewall access policies for different groups
# of clients.  There are two methods:
# (1) Run multiple OpenVPN daemons, one for each
#     group, and firewall the TUN/TAP interface
#     for each group/daemon appropriately.
# (2) (Advanced) Create a script to dynamically
#     modify the firewall in response to access
#     from different clients.  See man
#     page for more info on learn-address script.
;learn-address ./script

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
#push "redirect-gateway def1 bypass-dhcp"

push "redirect-gateway def1"
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 14.32.171.65"

# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
client-to-client

# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names.  This is recommended
# only for testing purposes.  For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
;duplicate-cn

# The keepalive directive causes ping-like
# messages to be sent back and forth over
# the link so that each side knows when
# the other side has gone down.
# Ping every 10 seconds, assume that remote
# peer is down if no ping received during
# a 120 second time period.
keepalive 10 120

# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
#   openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
;tls-auth ta.key 0 # This file is secret

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
# Note that v2.4 client/server will automatically
# negotiate AES-256-GCM in TLS mode.
# See also the ncp-cipher option in the manpage
cipher AES-256-CBC

# Enable compression on the VPN link and push the
# option to the client (v2.4+ only, for earlier
# versions see below)
;compress lz4-v2
;push "compress lz4-v2"

# For compression compatible with older clients use comp-lzo
# If you enable it here, you must also
# enable it in the client config file.
;comp-lzo

# The maximum number of concurrently connected
# clients we want to allow.
;max-clients 100

# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
user nobody
group nobody

# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
persist-key
persist-tun

# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
status /etc/openvpn/openvpn-status.log

# By default, log messages will go to the syslog (or
# on Windows, if running as a service, they will go to
# the "\Program Files\OpenVPN\log" directory).
# Use log or log-append to override this default.
# "log" will truncate the log file on OpenVPN startup,
# while "log-append" will append to it.  Use one
# or the other (but not both).
log         /etc/openvpn/openvpn.log
log-append  /etc/openvpn/openvpn.log

# Set the appropriate level of log
# file verbosity.
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 3

# Silence repeating messages.  At most 20
# sequential messages of the same message
# category will be output to the log.
;mute 20

# Notify the client that when the server restarts so it
# can automatically reconnect.
#explicit-exit-notify 1
client-cert-not-required

---------------------------------------------------------------------------------------------------------


mkdir /etc/radiusplugin
cd /etc/radiusplugin/
wget http://www.nongnu.org/radiusplugin/radiusplugin_v2.1a_beta1.tar.gz
tar xvf radiusplugin_v2.1a_beta1.tar.gz
cd radiusplugin_v2.1a_beta1
make
mkdir /etc/openvpn/radius
cp -r radiusplugin.so /etc/openvpn/radius

cp /etc/radiusplugin/radiusplugin_v2.1a_beta1/radiusplugin.cnf /etc/openvpn/radius/radius.cnf

cd /etc/openvpn/radius


vi radius.cnf
NAS-Identifier=openvpn
# The service type which is sent to the RADIUS server
Service-Type=5
# The framed protocol which is sent to the RADIUS server
Framed-Protocol=1
# The NAS port type which is sent to the RADIUS server
NAS-Port-Type=5
# The NAS IP address which is sent to the RADIUS server
NAS-IP-Address=192.168.111.28 /*open VPN서버 IP
# Path to the OpenVPN configfile. The plugin searches there for
# client-config-dir PATH   (searches for the path)
# status FILE                      (searches for the file, version must be 1)
# client-cert-not-required (if the option is used or not)
# username-as-common-name  (if the option is used or not)
# Path to our OpenVPN configuration file. Each OpenVPN configuration file needs its own radiusplugin configuration file as well
OpenVPNConfig=/etc/openvpn/server.conf
# Support for topology option in OpenVPN 2.1
# If you don't specify anything, option "net30" (default in OpenVPN) is used.
# You can only use one of the options at the same time.
# If you use topology option "subnet", fill in the right netmask, e.g. from OpenVPN option "--server NETWORK NETMASK"
subnet=255.255.255.0
# If you use topology option "p2p", fill in the right network, e.g. from OpenVPN option "--server NETWORK NETMASK"
# p2p=10.8.0.1
# Allows the plugin to overwrite the client config in client config file directory,
# default is true
overwriteccfiles=true
# Allows the plugin to use auth control files if OpenVPN (>= 2.1 rc8) provides them.
# default is false
# useauthcontrolfile=false
# Only the accouting functionality is used, if no user name to forwarded to the plugin, the common name of certificate is used
# as user name for radius accounting.
# default is false
# accountingonly=false
# If the accounting is non essential, nonfatalaccounting can be set to true.
# If set to true all errors during the accounting procedure are ignored, which can be
# - radius accounting can fail
# - FramedRouted (if configured) maybe not configured correctly
# - errors during vendor specific attributes script execution are ignored
# But if set to true the performance is increased because OpenVPN does not block during the accounting procedure.
# default is false
nonfatalaccounting=false
# Path to a script for vendor specific attributes.
# Leave it out if you don't use an own script.
# vsascript=/root/workspace/radiusplugin_v2.0.5_beta/vsascript.pl
# Path to the pipe for communication with the vsascript.
# Leave it out if you don't use an own script.
# vsanamedpipe=/tmp/vsapipe
# A radius server definition, there could be more than one.
# The priority of the server depends on the order in this file. The first one has the highest priority.
server
{
# The UDP port for radius accounting.
acctport=1813
# The UDP port for radius authentication.
authport=1812
# The name or ip address of the radius server.
name=192.168.111.27 /* (radius 가 설치 된 곳의 IP)
# How many times should the plugin send the if there is no response?
retry=1
# How long should the plugin wait for a response?
wait=5
# The shared secret.
sharedsecret=  이전에 설정한 비밀번호(radius쪽에서)
}


firewalld부분
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --add-service openvpn
firewall-cmd --permanent --add-service openvpn
firewall-cmd --add-masquerade
firewall-cmd --permanent --add-masquerade
firewall-cmd --query-masquerade
firewall-cmd --reload

vi /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p

 

 

클라이언트 측에서 openvpn GUI를 다운받아서 openVPN서버에 있는

ca.crt 와 client.ovpn파일을 

설치 경로에 (윈도우 기준)

C:\Program Files\OpenVPN\config

 

붙여놓고 openvpn GUI를 실행시킨다.

'open source solution' 카테고리의 다른 글

packetfence mac auth method 시연  (0) 2020.01.22
Sophos UTM home  (0) 2019.11.07
openLDAP 에러 관련  (0) 2019.08.12
DRBD+pacemaker HA구성 centos 7.x  (4) 2019.08.09
pdns 4.1.8 with pdns recursor 4.1.9  (0) 2019.06.10

댓글