Debian 7 wheezy OpenVPN telepítés MySQL felhasználókkal

Cvk/ március 14, 2014/ Debian, install, linux, security, Szerver, telepítés, VPN

A régebbi, ubuntu-8-10-szerver-openvpn-telepites leírás egy frissített verziója jelenlegi Debian 7(.4) Wheezy verzióhoz, MySQL-ben tárolt felhasználó nevekkel és jelszavakkal.

Egy példa, OpenVPN szerver bittemeto.systemsheep.hu gépen:

  1. MySQL Szerver telepítése
apt-get install mysql-server
  1. Lépj be rottként a MySQL-be
mysql -uroot -p
  1. Hozz létre egy ‘openvpn’ adatbázist
CREATE DATABASE openvpn;
  1. Hozz létre hozzá egy nevet ‘NEV’ és jelszót ‘jelszo’
GRANT ALL ON openvpn.* TO 'NEV'@"%" IDENTIFIED BY 'jelszo';
  1. Jelentkezz ki a root userrel
exit;
  1. Jelentkezz be a létrehozott MySQL felhasználóval ‘NEV’
mysql -uNEV -pjelszo
  1. Válaszd ki az adatbázist
USE openvpn;
  1. Hozzd létre az user, log táblákat és rakj bele adatokat

user tábla

CREATE TABLE IF NOT EXISTS `user` (
`user_id` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`user_pass` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '1234',
`user_mail` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
`user_phone` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
`user_online` tinyint(1) NOT NULL DEFAULT '0',
`user_enable` tinyint(1) NOT NULL DEFAULT '1',
`user_start_date` date NOT NULL,
`user_end_date` date NOT NULL,
PRIMARY KEY (`user_id`),
KEY `user_pass` (`user_pass`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

log tábla

CREATE TABLE IF NOT EXISTS `log` (
`log_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`log_trusted_ip` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`log_trusted_port` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
`log_remote_ip` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`log_remote_port` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
`log_start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`log_end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`log_received` float NOT NULL DEFAULT '0',
`log_send` float NOT NULL DEFAULT '0',
PRIMARY KEY (`log_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

user adatok

INSERT INTO `user` (
`user_id`, `user_pass`, `user_mail`, `user_phone`,
`user_online`, `user_enable`, `user_start_date`, `user_end_date`
)
VALUES (
'sheep', 'B4raNy', '[email protected]',
'+3630000000', 0, 1, '2012-01-01', '0000-00-00'
);
  1. Táblák lekérdezése
show tables;
+-------------------+
| Tables_in_openvpn |
+-------------------+
| log               |
| user              |
+-------------------+
  1. user tábla adatai
select * from user;
+---------+-----------+---------------------+--------------+-------------+-------------+-----------------+---------------+
| user_id | user_pass | user_mail           | user_phone   | user_online | user_enable | user_start_date | user_end_date |
+---------+-----------+---------------------+--------------+-------------+-------------+-----------------+---------------+
| sheep   | B4raNy    | [email protected]| +3630000000  |           0 |           1 | 2012-01-01      | 0000-00-00    |
+---------+-----------+---------------------+--------------+-------------+-------------+-----------------+---------------+
  1. Kilépés
exit;
  1. Az /etc/mysql/my.cnf fájl szerkesztése, hogy ne csak önmagán figyeljen
bind-address  = 127.0.0.1 ->
#bind-address  = 127.0.0.1
  1. Az /etc/rc.local fájlban az exit 0; sor elé felvenni az sql portját
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
  1. iptables futtatása
/etc/rc.local
iptables-save
  1. OpenVPN szerver telepítése
apt-get install openvpn
  1. Tanúsítványok létrehozása és kezelése
cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/.
cd /etc/openvpn/easy-rsa/2.0/
  1. Tanúsítványok paraméterei
mcedit vars

A vars fájlban meg kell keresni ás sajátra átírni az adatokat

export KEY_COUNTRY="HU"
export KEY_PROVINCE="PEST"
export KEY_CITY="Budapest"
export KEY_ORG="Systemsheep-VPN"
export KEY_EMAIL="[email protected]"
  1. Menteni, kilépni. Töltsük be a változókat és tisztítás
source ./vars
./clean-all
  1. Publikus és privát kulcsok létrehozása. YES vagy ENTER lenyomásával az alapértelmezés megy végig
./build-ca
./build-key-server server
./build-key client
./build-dh
mv keys /etc/openvpn/.

Scriptek létrehozása

  1. Könyvtárat létrehozni a scriptek számára ‘/etc/openvpn/script’
mkdir /etc/openvpn/script
cd /etc/openvpn/script
  1. config.sh létrehozása’/etc/openvpn/script/config.sh’
#!/bin/bash
##Adatbázis szerver
HOST='bittemeto.systemsheep.hu'
#Alap port = 3306
PORT='3306'
#Felhasználónév
USER='NEV'
#Jelszó
PASS='jelszo'
#Adatbázis neve
DB='openvpn'
  1. test_connect_db.sh fájl létrehozása ‘/etc/openvpn/script/test_connect_db.sh’
#!/bin/bash
. /etc/openvpn/script/config.sh
##Hitelesítés tesztelése
username=$1
password=$2
user_id=$(mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -sN -e "select user_id from user where user_id = '$username' AND user_pass = '$password' AND user_enable=1 AND user_start_date != user_end_date AND TO_DAYS(now()) >= TO_DAYS(user_start_date) AND (TO_DAYS(now()) <= TO_DAYS(user_end_date) OR user_end_date='0000-00-00')")
##Felhasználó ellenőrzése
[ "$user_id" != '' ] && [ "$user_id" = "$username" ] && echo "felhasznalo : $username" && echo 'hitelesites sikerult.' && exit 0 || echo 'hitelesites nem sikerult.'; exit 1
  1. login.sh fájl létrehozása ‘/etc/openvpn/script/login.sh’
#!/bin/bash
. /etc/openvpn/script/config.sh
##Hitelesítés
user_id=$(mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -sN -e "select user_id from user where user_id = '$username' AND user_pass = '$password' AND user_enable=1 AND user_start_date != user_end_date AND TO_DAYS(now()) >= TO_DAYS(user_start_date) AND (TO_DAYS(now()) <= TO_DAYS(user_end_date) OR user_end_date='0000-00-00')")
##Felhasználó ellenőrzése
[ "$user_id" != '' ] && [ "$user_id" = "$username" ] && echo "felhasznalo : $username" && echo 'hitelesites sikerult.' && exit 0 || echo 'hitelesites nem sikerult.'; exit 1
  1. connect.sh fajl létrehozása ‘/etc/openvpn/script/connect.sh’
#!/bin/bash
. /etc/openvpn/script/config.sh
##log táblába beírni a csatlakozást
mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -e "INSERT INTO log (log_id,user_id,log_trusted_ip,log_trusted_port,log_remote_ip,log_remote_port,log_start_time,log_end_time,log_received,log_send) VALUES(NULL,'$common_name','$trusted_ip','$trusted_port','$ifconfig_pool_remote_ip','$remote_port_1',now(),'0000-00-00 00:00:00','$bytes_received','$bytes_sent')"
##bejelentkezett felhasználó státuszát online-ra állítani
mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -e "UPDATE user SET user_online=1 WHERE user_id='$common_name'"
  1. disconnect.sh fájl létrehozása ‘/etc/openvpn/script/disconnect.sh’
#!/bin/bash
. /etc/openvpn/script/config.sh
##kilépő felhasználó státuszát offline-ra állítani
mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -e "UPDATE user SET user_online=0 WHERE user_id='$common_name'"
##log táblába beírni a lekapcsolódást
mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -e "UPDATE log SET log_end_time=now(),log_received='$bytes_received',log_send='$bytes_sent' WHERE log_trusted_ip='$trusted_ip' AND log_trusted_port='$trusted_port' AND user_id='$common_name' AND log_end_time='0000-00-00 00:00:00'"
  1. server-tcp-443.conf fájl létrehozása ‘/etc/openvpn/server-tcp-443.conf’ a 443-as porthoz
##protokol és port
port 443
proto tcp
dev tun

##ip szerver maszk
server 10.4.0.0 255.255.255.0

##kulcs
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem

##beállítások
persist-key
persist-tun
keepalive 5 60
reneg-sec 432000

##hitelesítés.
comp-lzo
user nobody
#group nogroup
client-to-client
username-as-common-name
client-cert-not-required
auth-user-pass-verify /etc/openvpn/script/login.sh via-env

##kliens push infók
max-clients 50
push "persist-key"
push "persist-tun"
push "redirect-gateway def1"
#push "explicit-exit-notify 1"

##DNS Szerver
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

##script connect-disconnect
script-security 3 system
client-connect /etc/openvpn/script/connect.sh
client-disconnect /etc/openvpn/script/disconnect.sh

##log státusz
status /etc/openvpn/log/tcp_443.log
log-append /etc/openvpn/log/openvpn.log
verb 3
  1. Könyvtár létrehozása a logoknak ‘/etc/openvpn/log’
mkdir /etc/openvpn/log
touch /etc/openvpn/log/openvpn.log
touch /etc/openvpn/log/tcp_443.log
  1. Fájlok jogosultságainak módosítása
chmod -R 755 /etc/openvpn
  1. Teszt hitelesítés ‘sheep’ és ‘B4raNy’ jelszóval
/etc/openvpn/script/test_connect_db.sh sheep B4raNy
# felhasznalo : sheep
# hitelesites sikerult.
  1. OpenVPN szerver indítása
/etc/init.d/openvpn start

Internet engedélyezése a kliensek számára

  1. Az /etc/sysctl.conf szerkesztése

Ki kell törölni a # a sor elejéről:

#net.ipv4.ip_forward=1 ->
net.ipv4.ip_forward=1
  1. Az /etc/rc.local fájl végéhez hozzáadni az exit 0; sor elé
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT

iptables -A INPUT -i tun1 -j ACCEPT
iptables -A FORWARD -i tun1 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.4.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.5.0.0/24 -o eth0 -j MASQUERADE
  1. Script futtatása, hogy legyen net
/etc/rc.local
iptables-save

Kliens konfiguráció

  1. Kliens konfiguráció 443-as porton
client
dev tun

proto tcp
remote bittemeto.systemsheep.hu 443

nobind
auth-user-pass
reneg-sec 432000
resolv-retry infinite

ca ca.crt
comp-lzo
verb 1
  1. A ca.crt fájl és a kliens konfig eljuttatása a felhasználókhoz
  2. Windows 8.1 OpenVPN kliens letöltése.
Share this Post