вторник, 14 ноября 2017 г.

Начальная настройка сервера OpenVPN c Ubuntu 16.04 хостера DO

Бывает необходимо подключить к вебсерверу на котором опубликованы информационные базы 1С клиентов через интернет. Для этого хорошо подходит DO.

1. Создать droplet пароль root придет на регистрационный email,  ip увидим при создании

На рабочей машине:
$ ssh root@ip
Сменим пароль root

# apt update -y
# apt upgrade -y
# apt install mc -y
Небольшой тюнинг:
# /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
# /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
# /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
# /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
# /bin/su -c "echo 'vm.swappiness=0' >> /etc/sysctl.conf"
# sysctl -p
# systemctl restart networking.service

Добавим swap file to an Ubuntu 16.04:
# fallocate -l 1G /swapfile
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
# cp /etc/fstab /etc/fstab.bak
# echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Зададим ip для клиентов внутри vpn

# mkdir -p /etc/openvpn/ccd
# cd /etc/openvpn/ccd

# echo "ifconfig-push 10.8.0.2 255.255.255.0" >> client1
# echo "ifconfig-push 10.8.0.3 255.255.255.0" >> client2
# echo "ifconfig-push 10.8.0.4 255.255.255.0" >> client3
# echo "ifconfig-push 10.8.0.5 255.255.255.0" >> client4
# echo "ifconfig-push 10.8.0.6 255.255.255.0" >> client5
# echo "ifconfig-push 10.8.0.7 255.255.255.0" >> client6
# echo "ifconfig-push 10.8.0.8 255.255.255.0" >> client7
# echo "ifconfig-push 10.8.0.9 255.255.255.0" >> client8
# echo "ifconfig-push 10.8.0.10 255.255.255.0" >> client9

Установка 
# apt install openvpn easy-rsa -y
# make-cadir ~/openvpn-ca
# cd ~/openvpn-ca
# source vars
# ./clean-all
# ./build-ca
# ./build-key-server server
# ./build-dh
# openvpn --genkey --secret keys/ta.key

Генерация ключей для клиента
# cd ~/openvpn-ca
# source vars
# ./build-key client1
...............................
# ./build-key client9

Скопируем ключи:
# cd ~/openvpn-ca/keys
# cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
# gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/server.conf
# cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak

Настройка сервера:
# nano /etc/openvpn/server.conf

Скопируем настройки server.conf и вставим (заменим) в /etc/openvpn/server.conf:

port 443
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
;ifconfig-pool-persist ipp.txt
client-config-dir ccd
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
client-to-client
;duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
;cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES
comp-lzo
;max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
;log         openvpn.log
;log-append  openvpn.log
verb 3
;mute 20

Сохранить.

Запуск:
# systemctl start openvpn@server
# systemctl enable openvpn@server
# systemctl status openvpn@server
   -------------------------------------------------------------------------------------------------------------------------
Упакуем сертификаты
# mkdir -p ~/client-configs/files
# chmod 700 ~/client-configs/files
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
# cp ~/client-configs/base.conf ~/client-configs/base.conf.bak

Настроим базовые настройки клиента, XXX.XXX.XXX.XXX ip адрес сервера:
# nano ~/client-configs/base.conf
Заменить на: 
client
dev tun
proto tcp
;proto udp
remote XXX.XXX.XXX.XXX 443
;remote my-server-1 1194
;remote my-server-2 1194
resolv-retry infinite
nobind
;user nobody
;group nogroup
persist-key
persist-tun
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-128-CBC
comp-lzo
verb 3
;mute 20

Сохранить.

# nano ~/client-configs/make_config.sh
Добавить:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn
Сохранить.
# chmod 700 ~/client-configs/make_config.sh
# cd ~/client-configs
# ./make_config.sh client1
.........................................
# ./make_config.sh client9

Подключиться по csp и скачать конфигурационные файлы для openvpn из  /root/client-configs/files
 -------------------------------------------------------------------------------------------------------------------------
# adduser user
# usermod -aG sudo user
# Настройка ftp пользователь: test пароль: test
# apt install pure-ftpd -y
# groupadd ftpgroup
# usermod -aG ftpgroup root
# ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure


# mkdir /home/user/test
# chown -R user:ftpgroup /home/user/test
# Заведем пользователя ftp test с паролем test
# pure-pw useradd test -u user -d /home/user/test
!!!!sudo echo -e "test\ntest\n" | sudo pure-pw useradd test -u user -d /home/user/test
# pure-pw mkdb
# service pure-ftpd restart

Перед настройкой ufw, OpenVPN должен быть настроен и проверен!!!
Доступ к серверу по ssh будет только через OpenVPN!!!
Можно будет зайти только через Access console панели управления!
Настройка ufw
# ufw reset
# ufw enable 
# ufw allow out on tun0
# ufw allow in on tun0
# ufw allow 443/tcp
# ufw default deny incoming
# ufw default deny outgoing
# ufw default deny forward
После команды reload следующее подключение только через OpenVPN!
# ufw reload
# ufw status

Можно подключать 1С-ки.

-----------------------------------------------------------------------------------------------------
Для маршрутизацию интернет-трафика OpenVPN-клиентов через VPN-сервер

# nano /etc/openvpn/server.conf
Заменим:
;push "redirect-gateway def1 bypass-dhcp"
На
push "redirect-gateway def1"

Если маршрутизация не нужна, просто закоментируем.

Еще добавим nat (если нужна маршрутизация интернет-трафика) :
# nano /etc/rc.local
# добавляем строки до exit 0
    iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
 # сохраняем
# reboot
----------------------------------------------------------------------------------------------------
$ apt list --all-versions openvpn
Listing... Done
openvpn/xenial-updates,xenial-security,now 2.3.10-1ubuntu2.1 amd64 [installed]

Клиента качаем отсюда, версия 2.3.18
OpenVPN 2.3.18 (old stable)






Комментариев нет:

Отправить комментарий