Верифицировано 01.05.2019 г. !!!
Бывает необходимо подключить к вебсерверу на котором опубликованы
информационные базы 1С клиентов через интернет.
А так же организован ftp для обмена файлами.
Initial Server Setup with Ubuntu 16.04
Автозапуск:
Автоматический запуск:
Кладем /home/user/clien1.ovpn по csp
Переименуем:
$ sudo mv /home/user/client1.ovpn /etc/openvpn/client.conf
Запускаться будет в любом случае после однократного запуска
без настройки /etc/default/openvpn
$ sudo nano /etc/default/openvpn
Раскоментировать:
# AUTOSTART="all"
AUTOSTART="all"
Сохранить.
$ sudo reboot
Проверяем:
$ sudo openvpn --config /etc/openvpn/client.conf
----------------------------------------------------------------------------------------------------
Делаем сервис для запуска:
$ sudo nano /etc/systemd/system/ovpn.service
[Unit]
Description=Daemon to start OpenVPN Client
Wants=network-online.target
After=network.target
[Service]
Type=simple
ExecStart=openvpn --config /etc/openvpn/client.conf
[Install]
WantedBy=multi-user.target
Сохранить.
$ sudo systemctl daemon-reload && sudo systemctl enable ovpn.service && sudo systemctl restart ovpn.service
$ sudo systemctl status ovpn.service
$ sudo journalctl --unit=ovpn.service
----------------------------------------------------------------------------------------------------
Серврер будет по ssh 10.8.55.2
Узнать внешний ip (без настройки маршрутизации ip не изменяется!)
$ wget -O - -q icanhazip.com
---------------------------------------------------------------------------------------------------------------------------------------------
На плохих каналах нужно обеспечить перезапуск после падения канала:
Бывает необходимо подключить к вебсерверу на котором опубликованы
информационные базы 1С клиентов через интернет.
А так же организован ftp для обмена файлами.
Initial Server Setup with Ubuntu 16.04
Как настроить сервер OpenVPN в Ubuntu 16.04
DO создать пользоватателя user с сертификатом
1. Создать droplet пароль root придет на регистрационный email, ip увидим при создании
На рабочей машине:
DO создать пользоватателя user с сертификатом
1. Создать droplet пароль root придет на регистрационный email, ip увидим при создании
На рабочей машине:
На рабочей машине:
$ ssh user@ip
$ sudo apt install openvpn easy-rsa -y
Откроем firefox (в ubuntu), откроем эту страничку и скопируем в буфер скрипт настройки сети:
$ nano start.sh
Скопируем из буфера следующий скрипт, в котором Вам нужно исправить ip и адрес шлюза в соответствии со своей сетью:
#!/bin/bash
#Небольшой тюнинг:
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.swappiness=30' >> /etc/sysctl.conf"
sudo sysctl -p
sudo systemctl restart networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
#Добавим swap file to an Ubuntu 16.04:
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo cp /etc/fstab /etc/fstab.bak
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
#Зададим ip для клиентов внутри vpn
sudo mkdir -p /etc/openvpn/ccd
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.2 255.255.255.0' >> /etc/openvpn/ccd/client1"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.3 255.255.255.0' >> /etc/openvpn/ccd/client2"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.4 255.255.255.0' >> /etc/openvpn/ccd/client3"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.5 255.255.255.0' >> /etc/openvpn/ccd/client4"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.6 255.255.255.0' >> /etc/openvpn/ccd/client5"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.7 255.255.255.0' >> /etc/openvpn/ccd/client6"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.8 255.255.255.0' >> /etc/openvpn/ccd/client7"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.9 255.255.255.0' >> /etc/openvpn/ccd/client8"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.10 255.255.255.0' >> /etc/openvpn/ccd/client9"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.11 255.255.255.0' >> /etc/openvpn/ccd/client10"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.12 255.255.255.0' >> /etc/openvpn/ccd/client11"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.13 255.255.255.0' >> /etc/openvpn/ccd/client12"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.14 255.255.255.0' >> /etc/openvpn/ccd/client13"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.15 255.255.255.0' >> /etc/openvpn/ccd/client14"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.16 255.255.255.0' >> /etc/openvpn/ccd/client15"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.17 255.255.255.0' >> /etc/openvpn/ccd/client16"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.18 255.255.255.0' >> /etc/openvpn/ccd/client17"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.19 255.255.255.0' >> /etc/openvpn/ccd/client18"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.20 255.255.255.0' >> /etc/openvpn/ccd/client19"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.21 255.255.255.0' >> /etc/openvpn/ccd/client20"
# Настройка ftp пользователь: test пароль: test
sudo apt install pure-ftpd -y
sudo groupadd ftpgroup
sudo usermod -aG ftpgroup user
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
sudo mkdir /home/user/test
sudo chown -R user:ftpgroup /home/user/test
#sudo pure-pw useradd test -u user -d /home/user/test
# Заведем пользователя ftp test с паролем test
sudo echo -e "test\ntest\n" | sudo pure-pw useradd test -u user -d /home/user/test
sudo pure-pw mkdb
sudo service pure-ftpd restart
Сохраним файл start.sh
$ sudo sh start.sh
=========================================================
#Еще добавим nat (если нужна маршрутизация интернет-трафика) :
# Обратить внимание что бы была одна сеть !!!
#$ sudo nano /etc/rc.local
#добавляем строки до exit 0
iptables -A FORWARD -s 10.8.55.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.55.0/24 -o eth0 -j MASQUERADE
#сохраняем
$ sudo reboot
=========================================================
$ sudo reboot
$ ssh user@ip
$ sudo apt install openvpn easy-rsa -y
Откроем firefox (в ubuntu), откроем эту страничку и скопируем в буфер скрипт настройки сети:
$ nano start.sh
Скопируем из буфера следующий скрипт, в котором Вам нужно исправить ip и адрес шлюза в соответствии со своей сетью:
#!/bin/bash
#Небольшой тюнинг:
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.swappiness=30' >> /etc/sysctl.conf"
sudo sysctl -p
sudo systemctl restart networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
#Добавим swap file to an Ubuntu 16.04:
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo cp /etc/fstab /etc/fstab.bak
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
#Зададим ip для клиентов внутри vpn
sudo mkdir -p /etc/openvpn/ccd
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.2 255.255.255.0' >> /etc/openvpn/ccd/client1"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.3 255.255.255.0' >> /etc/openvpn/ccd/client2"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.4 255.255.255.0' >> /etc/openvpn/ccd/client3"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.5 255.255.255.0' >> /etc/openvpn/ccd/client4"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.6 255.255.255.0' >> /etc/openvpn/ccd/client5"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.7 255.255.255.0' >> /etc/openvpn/ccd/client6"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.8 255.255.255.0' >> /etc/openvpn/ccd/client7"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.9 255.255.255.0' >> /etc/openvpn/ccd/client8"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.10 255.255.255.0' >> /etc/openvpn/ccd/client9"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.11 255.255.255.0' >> /etc/openvpn/ccd/client10"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.12 255.255.255.0' >> /etc/openvpn/ccd/client11"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.13 255.255.255.0' >> /etc/openvpn/ccd/client12"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.14 255.255.255.0' >> /etc/openvpn/ccd/client13"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.15 255.255.255.0' >> /etc/openvpn/ccd/client14"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.16 255.255.255.0' >> /etc/openvpn/ccd/client15"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.17 255.255.255.0' >> /etc/openvpn/ccd/client16"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.18 255.255.255.0' >> /etc/openvpn/ccd/client17"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.19 255.255.255.0' >> /etc/openvpn/ccd/client18"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.20 255.255.255.0' >> /etc/openvpn/ccd/client19"
sudo /bin/su -c "echo 'ifconfig-push 10.8.55.21 255.255.255.0' >> /etc/openvpn/ccd/client20"
# Настройка ftp пользователь: test пароль: test
sudo apt install pure-ftpd -y
sudo groupadd ftpgroup
sudo usermod -aG ftpgroup user
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
sudo mkdir /home/user/test
sudo chown -R user:ftpgroup /home/user/test
#sudo pure-pw useradd test -u user -d /home/user/test
# Заведем пользователя ftp test с паролем test
sudo echo -e "test\ntest\n" | sudo pure-pw useradd test -u user -d /home/user/test
sudo pure-pw mkdb
sudo service pure-ftpd restart
Сохраним файл start.sh
$ sudo sh start.sh
=========================================================
#Еще добавим nat (если нужна маршрутизация интернет-трафика) :
# Обратить внимание что бы была одна сеть !!!
#$ sudo nano /etc/rc.local
#добавляем строки до exit 0
iptables -A FORWARD -s 10.8.55.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.55.0/24 -o eth0 -j MASQUERADE
#сохраняем
$ sudo reboot
=========================================================
$ sudo reboot
На рабочей машине:
$ ssh user@ip
$ ssh user@ip
Если sudo работает запретим входить root по ssh
$ sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
Можно посмотреть:
$ sudo nano /etc/ssh/sshd_config
Должно быть: PermitRootLogin no
$ sudo reboot
На рабочей машине:
$ ssh user@ip
Генерация ключей
$ cd ~
$ make-cadir ~/openvpn-ca
$ cd ~/openvpn-ca
$ source vars
$ ./clean-all
$ ./build-ca
$ ./build-key-server server
....
Certificate is to be certified until Sep 4 14:15:23 2028 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
$ ./build-dh
$ openvpn --genkey --secret keys/ta.key
Генерация ключей для клиента
$ cd ~/openvpn-ca
$ source vars
$ ./build-key client1
.....
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
$ ./build-key client2
...............................
$ ./build-key client20
Скопируем ключи:
$ cd ~/openvpn-ca/keys
$ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
$ sudo gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
$ sudo cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak
Настройка сервера:
$ sudo nano /etc/openvpn/server.conf
Скопируем настройки server.conf и вставим (заменим) в /etc/openvpn/server.conf:
port 1194
#port 443 port-share 127.0.0.1 4443
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.55.0 255.255.255.0
;ifconfig-pool-persist ipp.txt
client-config-dir ccd
# раскоментировать push "redirect-gateway def1" и строки красным для маршрутизации интернета
;push "redirect-gateway def1"
;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
key-direction 0
;cipher BF-CBC # Blowfish (default)
cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
;cipher none # шифрование stunnel
auth SHA256
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
Сохранить.
Запуск:
$ sudo systemctl start openvpn@server
$ sudo systemctl enable openvpn@server
$ sudo systemctl status openvpn@server
$ sudo systemctl restart 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 адрес сервера:
# Для работы через stunnel 127.0.0.1 !!!
$ nano ~/client-configs/base.conf
Заменить на:
client
dev tun
proto tcp
;proto udp
remote 127.0.0.1 1194
;remote XXX.XXX.XXX.XXX 1194
;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
;cipher none # шифрование stunnel
auth SHA256
key-direction 1
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 client20
Подключиться по csp и скачать конфигурационные файлы для openvpn из /home/user/client-configs/files
$ mkdir -p /home/user/test/vu
Первый раз:
$ scp user@XXX.XXX.XXX.XXX:/home/user/client-configs/files/* /home/user/test
Настроить vpn клиента
S sudo reboot
Затем подключиться по vpn
-------------------------------------------------------------------------------------------
$ scp user@10.8.55.1:/home/user/client-configs/files/* /home/user/test
$ sudo openvpn --config /etc/openvpn/client1.ovpn
-------------------------------------------------------------------------------------------
Перед настройкой stunnel4, OpenVPN должен быть настроен и проверен!!!
После проверки необходимо сделать изменеия на сервере:
OpenVPN and Obfsproxy network problems
$ sudo nano /etc/openvpn/server.conf
Добавить:
local 127.0.0.1
Закоментировать:
;push "redirect-gateway def1"
Добавить где XXX.XXX.XXX.XXX , ip адрес сервера:
push "redirect-gateway local"
push "route XXX.XXX.XXX.XXX 255.255.255.255 net_gateway"
Полный файл:
local 127.0.0.1
port 1194
#port 443 port-share 127.0.0.1 4443
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.55.0 255.255.255.0
;ifconfig-pool-persist ipp.txt
client-config-dir ccd
# раскоментировать push "redirect-gateway def1" для маршрутизации интернета
;push "redirect-gateway def1"
#push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway local"
push "route XXX.XXX.XXX.XXX 255.255.255.255 net_gateway"
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
key-direction 0
;cipher BF-CBC # Blowfish (default)
cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
auth SHA256
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
Установка stunnel4 на сервере:
Для проверки можно использовать:
How To Set Up an SSL Tunnel Using Stunnel on Ubuntu
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install stunnel4 -y
$ sudo nano /etc/stunnel/stunnel.conf
; Указываем PID файл работающего сервиса.
pid = /var/run/stunnel.pid
; Отключим отладочные режимы - 0
debug = 7
output = /var/log/stunnel.log
cert = /etc/stunnel/stunnel.pem
; Полностью отключим уязвимые протоколы SSL версии 2 и 3.
options = NO_SSLv2
options = NO_SSLv3
options = NO_TLSv1
options = NO_TLSv1.1
ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
[ovpn]
accept = 53
connect = 127.0.0.1:1194
Сохранить.
$ sudo nano /etc/default/stunnel4
# Change to one to enable stunnel automatic startup
#ENABLED=0
ENABLED=1
Сохранить.
$ sudo openssl genrsa -out /etc/stunnel/key.pem 2048
$ sudo openssl req -new -x509 -key /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 3650
$ sudo su -c "cat /etc/stunnel/key.pem /etc/stunnel/cert.pem >> /etc/stunnel/stunnel.pem"
sudo /etc/init.d/stunnel4 restart
Установка stunnel4 на клиенте:
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install stunnel4 -y
#<IP_server> = XXX.XXX.XXX.XXX
$ sudo nano /etc/stunnel/stunnel.conf
; Указываем PID файл работающего сервиса.
pid = /var/run/stunnel.pid
; Отключим отладочные режимы - 0
debug = 7
output = /var/log/stunnel.log
cert = /etc/stunnel/stunnel.pem
[ovpn]
client = yes
accept = 127.0.0.1:1194
connect = XXX.XXX.XXX.XXX:53
Сохранить.
Переносим с сервера файл с сертификатами в /etc/stunnel/stunnel.pem
$ sudo nano /etc/default/stunnel4
# Change to one to enable stunnel automatic startup
#ENABLED=0
ENABLED=1
Сохранить.
sudo /etc/init.d/stunnel4 restart
-------------------------------------------------------------------------------------------------------------------------
$ sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
Можно посмотреть:
$ sudo nano /etc/ssh/sshd_config
Должно быть: PermitRootLogin no
$ sudo reboot
На рабочей машине:
$ ssh user@ip
Генерация ключей
$ cd ~
$ make-cadir ~/openvpn-ca
$ cd ~/openvpn-ca
$ source vars
$ ./clean-all
$ ./build-ca
$ ./build-key-server server
....
Certificate is to be certified until Sep 4 14:15:23 2028 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
$ ./build-dh
$ openvpn --genkey --secret keys/ta.key
Генерация ключей для клиента
$ cd ~/openvpn-ca
$ source vars
$ ./build-key client1
.....
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
$ ./build-key client2
...............................
$ ./build-key client20
Скопируем ключи:
$ cd ~/openvpn-ca/keys
$ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
$ sudo gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
$ sudo cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak
Настройка сервера:
$ sudo nano /etc/openvpn/server.conf
Скопируем настройки server.conf и вставим (заменим) в /etc/openvpn/server.conf:
port 1194
#port 443 port-share 127.0.0.1 4443
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.55.0 255.255.255.0
;ifconfig-pool-persist ipp.txt
client-config-dir ccd
# раскоментировать push "redirect-gateway def1" и строки красным для маршрутизации интернета
;push "redirect-gateway def1"
;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
key-direction 0
;cipher BF-CBC # Blowfish (default)
cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
;cipher none # шифрование stunnel
auth SHA256
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
Сохранить.
Запуск:
$ sudo systemctl start openvpn@server
$ sudo systemctl enable openvpn@server
$ sudo systemctl status openvpn@server
$ sudo systemctl restart 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 адрес сервера:
# Для работы через stunnel 127.0.0.1 !!!
$ nano ~/client-configs/base.conf
Заменить на:
client
dev tun
proto tcp
;proto udp
remote 127.0.0.1 1194
;remote XXX.XXX.XXX.XXX 1194
;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
;cipher none # шифрование stunnel
auth SHA256
key-direction 1
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 client20
Подключиться по csp и скачать конфигурационные файлы для openvpn из /home/user/client-configs/files
$ mkdir -p /home/user/test/vu
Первый раз:
$ scp user@XXX.XXX.XXX.XXX:/home/user/client-configs/files/* /home/user/test
Настроить vpn клиента
S sudo reboot
Затем подключиться по vpn
-------------------------------------------------------------------------------------------
$ scp user@10.8.55.1:/home/user/client-configs/files/* /home/user/test
$ sudo openvpn --config /etc/openvpn/client1.ovpn
-------------------------------------------------------------------------------------------
Перед настройкой stunnel4, OpenVPN должен быть настроен и проверен!!!
После проверки необходимо сделать изменеия на сервере:
OpenVPN and Obfsproxy network problems
$ sudo nano /etc/openvpn/server.conf
Добавить:
local 127.0.0.1
Закоментировать:
;push "redirect-gateway def1"
Добавить где XXX.XXX.XXX.XXX , ip адрес сервера:
push "redirect-gateway local"
push "route XXX.XXX.XXX.XXX 255.255.255.255 net_gateway"
Полный файл:
local 127.0.0.1
port 1194
#port 443 port-share 127.0.0.1 4443
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.55.0 255.255.255.0
;ifconfig-pool-persist ipp.txt
client-config-dir ccd
# раскоментировать push "redirect-gateway def1" для маршрутизации интернета
;push "redirect-gateway def1"
#push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway local"
push "route XXX.XXX.XXX.XXX 255.255.255.255 net_gateway"
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
key-direction 0
;cipher BF-CBC # Blowfish (default)
cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
auth SHA256
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
Установка stunnel4 на сервере:
Для проверки можно использовать:
How To Set Up an SSL Tunnel Using Stunnel on Ubuntu
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install stunnel4 -y
$ sudo nano /etc/stunnel/stunnel.conf
; Указываем PID файл работающего сервиса.
pid = /var/run/stunnel.pid
; Отключим отладочные режимы - 0
debug = 7
output = /var/log/stunnel.log
cert = /etc/stunnel/stunnel.pem
; Полностью отключим уязвимые протоколы SSL версии 2 и 3.
options = NO_SSLv2
options = NO_SSLv3
options = NO_TLSv1
options = NO_TLSv1.1
ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
[ovpn]
accept = 53
connect = 127.0.0.1:1194
Сохранить.
$ sudo nano /etc/default/stunnel4
# Change to one to enable stunnel automatic startup
#ENABLED=0
ENABLED=1
Сохранить.
$ sudo openssl genrsa -out /etc/stunnel/key.pem 2048
$ sudo openssl req -new -x509 -key /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 3650
$ sudo su -c "cat /etc/stunnel/key.pem /etc/stunnel/cert.pem >> /etc/stunnel/stunnel.pem"
sudo /etc/init.d/stunnel4 restart
Установка stunnel4 на клиенте:
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install stunnel4 -y
#<IP_server> = XXX.XXX.XXX.XXX
$ sudo nano /etc/stunnel/stunnel.conf
; Указываем PID файл работающего сервиса.
pid = /var/run/stunnel.pid
; Отключим отладочные режимы - 0
debug = 7
output = /var/log/stunnel.log
cert = /etc/stunnel/stunnel.pem
[ovpn]
client = yes
accept = 127.0.0.1:1194
connect = XXX.XXX.XXX.XXX:53
Сохранить.
Переносим с сервера файл с сертификатами в /etc/stunnel/stunnel.pem
$ sudo nano /etc/default/stunnel4
# Change to one to enable stunnel automatic startup
#ENABLED=0
ENABLED=1
Сохранить.
sudo /etc/init.d/stunnel4 restart
-------------------------------------------------------------------------------------------------------------------------
Перед настройкой ufw, OpenVPN должен быть настроен и проверен!!!
Доступ к серверу по ssh будет только через OpenVPN через stunnel !!!
Можно будет зайти только через Access console панели управления!
$ sudo ufw reset
---------------------------------------------------------------------------------------------------------------------------
Настройка ufw
$ sudo nano /etc/ufw/before.rules
Добавляем после:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
комментируем:
#-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
Сохранить.
#$ sudo ufw disable && sudo ufw enable
$ sudo ufw default deny incoming
$ sudo ufw default deny outgoing
$ sudo ufw default deny forward
$ sudo ufw allow out on tun0
$ sudo ufw allow in on tun0
$ sudo ufw allow 53/tcp
#$ sudo ufw allow 443/tcp
#$ sudo ufw allow from x.x.x.x proto tcp to any port 22
$ sudo ufw disable && sudo ufw enable
$ sudo ufw status verbose
$ sudo reboot
Если предполагается одновременная работа с прокси:
$ sudo ufw reset
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
$ sudo ufw default allow forward
$ sudo ufw allow out on tun0
$ sudo ufw allow in on tun0
$ sudo ufw allow 53/tcp
#$ sudo ufw allow 443/tcp
$ sudo ufw allow 35732/tcp
$ sudo ufw allow from x.x.x.x proto tcp to any port 22
$ sudo ufw disable && sudo ufw enable
$ sudo ufw status verbose
#$ sudo ufw status numbered
#$ sudo ufw delete 30
Можно подключать 1С-ки.
----------------------------------------------------------------------------------------------------
Под linux точно работает!
Под windows похоже нужно допиливать маршрутизацию!
$ apt list --all-versions openvpn
Listing... Done
openvpn/xenial-updates,xenial-security,now 2.3.10-1ubuntu2.1 amd64 [installed]
Для windows
Клиента качаем отсюда, версия 2.3.18
OpenVPN 2.3.18 (old stable)
Установка клиента OpenVPN ubuntu 16.04 desktop
Для контролируемого доступа службу не запускаем!
Настройка на ручной запуск
$ sudo apt-get install openvpn -y
$ sudo reboot
$ sudo systemctl disable openvpn.service
$ sudo systemctl status openvpn.service
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: inactive (dead)
How can I run OpenVPN as root in the background, in a script?
Ручной запуск:
# Настройки не здесь /etc/openvpn/client.conf тут будет автоматически запускаться!!!
Запустить до перезагрузки:
$ sudo openvpn --config /home/user/client.conf --daemon
Прервать соединение:
Доступ к серверу по ssh будет только через OpenVPN через stunnel !!!
Можно будет зайти только через Access console панели управления!
$ sudo ufw reset
---------------------------------------------------------------------------------------------------------------------------
Настройка ufw
$ sudo nano /etc/ufw/before.rules
Добавляем после:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
комментируем:
#-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
Сохранить.
#$ sudo ufw disable && sudo ufw enable
$ sudo ufw default deny incoming
$ sudo ufw default deny outgoing
$ sudo ufw default deny forward
$ sudo ufw allow out on tun0
$ sudo ufw allow in on tun0
$ sudo ufw allow 53/tcp
#$ sudo ufw allow 443/tcp
#$ sudo ufw allow from x.x.x.x proto tcp to any port 22
$ sudo ufw disable && sudo ufw enable
$ sudo ufw status verbose
Если предполагается одновременная работа с прокси:
$ sudo ufw reset
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
$ sudo ufw default allow forward
$ sudo ufw allow out on tun0
$ sudo ufw allow in on tun0
$ sudo ufw allow 53/tcp
#$ sudo ufw allow 443/tcp
$ sudo ufw allow 35732/tcp
$ sudo ufw allow from x.x.x.x proto tcp to any port 22
$ sudo ufw disable && sudo ufw enable
$ sudo ufw status verbose
#$ sudo ufw status numbered
#$ sudo ufw delete 30
Можно подключать 1С-ки.
----------------------------------------------------------------------------------------------------
Под linux точно работает!
Под windows похоже нужно допиливать маршрутизацию!
$ apt list --all-versions openvpn
Listing... Done
openvpn/xenial-updates,xenial-security,now 2.3.10-1ubuntu2.1 amd64 [installed]
Для windows
Клиента качаем отсюда, версия 2.3.18
OpenVPN 2.3.18 (old stable)
Установка клиента OpenVPN ubuntu 16.04 desktop
Для контролируемого доступа службу не запускаем!
Настройка на ручной запуск
$ sudo apt-get install openvpn -y
$ sudo reboot
$ sudo systemctl disable openvpn.service
$ sudo systemctl status openvpn.service
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: inactive (dead)
How can I run OpenVPN as root in the background, in a script?
Ручной запуск:
# Настройки не здесь /etc/openvpn/client.conf тут будет автоматически запускаться!!!
Запустить до перезагрузки:
$ sudo openvpn --config /home/user/client.conf --daemon
Прервать соединение:
$ sudo killall openvpn
$ sudo systemctl status openvpn.service
[sudo] пароль для user:
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; disabled; vendor preset: enabled)
Active: inactive (dead)
$ ping 10.8.55.1
PING 10.8.55.1 (10.8.55.1) 56(84) bytes of data.
--- 10.8.55.1 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5101ms
$ sudo openvpn --config /home/user/client.conf --daemon
$ ping 10.8.55.1
PING 10.8.55.1 (10.8.55.1) 56(84) bytes of data.
64 bytes from 10.8.55.1: icmp_seq=1 ttl=64 time=53.8 ms
^C
$ sudo systemctl status openvpn.service
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; disabled; vendor preset: enabled)
Active: inactive (dead)
---------------------------------------------------------------------------------------------------- $ sudo systemctl status openvpn.service
[sudo] пароль для user:
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; disabled; vendor preset: enabled)
Active: inactive (dead)
$ ping 10.8.55.1
PING 10.8.55.1 (10.8.55.1) 56(84) bytes of data.
--- 10.8.55.1 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5101ms
$ sudo openvpn --config /home/user/client.conf --daemon
$ ping 10.8.55.1
PING 10.8.55.1 (10.8.55.1) 56(84) bytes of data.
64 bytes from 10.8.55.1: icmp_seq=1 ttl=64 time=53.8 ms
^C
$ sudo systemctl status openvpn.service
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Автозапуск:
Автоматический запуск:
Кладем /home/user/clien1.ovpn по csp
Переименуем:
$ sudo mv /home/user/client1.ovpn /etc/openvpn/client.conf
Запускаться будет в любом случае после однократного запуска
без настройки /etc/default/openvpn
$ sudo nano /etc/default/openvpn
Раскоментировать:
# AUTOSTART="all"
AUTOSTART="all"
Сохранить.
$ sudo reboot
Проверяем:
$ sudo openvpn --config /etc/openvpn/client.conf
----------------------------------------------------------------------------------------------------
Делаем сервис для запуска:
$ sudo nano /etc/systemd/system/ovpn.service
[Unit]
Description=Daemon to start OpenVPN Client
Wants=network-online.target
After=network.target
[Service]
Type=simple
ExecStart=openvpn --config /etc/openvpn/client.conf
[Install]
WantedBy=multi-user.target
Сохранить.
$ sudo systemctl daemon-reload && sudo systemctl enable ovpn.service && sudo systemctl restart ovpn.service
$ sudo systemctl status ovpn.service
$ sudo journalctl --unit=ovpn.service
----------------------------------------------------------------------------------------------------
Серврер будет по ssh 10.8.55.2
Узнать внешний ip (без настройки маршрутизации ip не изменяется!)
$ wget -O - -q icanhazip.com
---------------------------------------------------------------------------------------------------------------------------------------------
На плохих каналах нужно обеспечить перезапуск после падения канала:
$ ping -c 1 8.8.8.8 || sudo
service openvpn stop &&sudo
service openvpn start
$ ping -c 1 10.8.55.1 || sudo
service openvpn stop &&sudo
service openvpn start
$ sudo su - root
# mkdir /etc/scripts/
# nano /etc/scripts/openvpn.sh
Вставитьв файл:
#!/bin/bash
# Проверка OpenVPN соединения
ping -c 1 10.8.55.1 || service openvpn stop && service openvpn start
Сохранить:
# chmod +x /etc/scripts/openvpn.sh
# nano /etc/crontab
Добавить в конец */5 * * * * root /etc/scripts/openvpn.sh
И теперь каждые 5 мин будет проверяться наличие канала, по пингу
и если пинга нет, то происходит попытка его поднятия.