Настройка OpenVPN сервера в Debian 10
Общая
Пример простой настройки OpenVPN сервера в Debian 10 (buster) для доступа работников к сеть организации.
1. Установка необходимых компонентов
Для начала установим необходимые компоненты
apt update && apt -y install ca-certificates wget net-tools gnupg wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add - echo "deb http://build.openvpn.net/debian/openvpn/stable buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list apt update apt upgrade apt install openvpn iptables iptables-persistent openssl ca-certificates -y
Установка EasyRSA
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar xzf EasyRSA-3.0.8.tgz mv ~/EasyRSA-3.0.8/ /etc/openvpn/ mv /etc/openvpn/EasyRSA-3.0.8/ /etc/openvpn/easy-rsa/ rm -f EasyRSA-3.0.8.tgz
2. Настройка сертификатов
Создаем необходимые для работы сервера сертификаты:
cd /etc/openvpn/easy-rsa/ ./easyrsa init-pki ./easyrsa --batch build-ca nopass EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-server-full server nopass EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full CLIENT nopass EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl cp pki/ca.crt pki/private/ca.key pki/issued/server.crt pki/private/server.key pki/crl.pem /etc/openvpn chown nobody:nogroup /etc/openvpn/crl.pem openvpn --genkey --secret /etc/openvpn/ta.key openssl dhparam -out /etc/openvpn/dh.pem 2048
3. Настройка сервера
Создаем файл конфигурации сервера:
Для клиентов не поддерживающих сервер OpenVPN 2.5 и выше замените data-ciphers CHACHA20-POLY1305:AES-128-GCM
на cipher AES-128-GCM
nano /etc/openvpn/server.conf
Добавляем в файл следующие строки:
port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh.pem auth SHA512 tls-auth /etc/openvpn/ta.key 0 topology subnet server 172.16.100.0 255.255.255.0 #Здесь указан адрес сети для клиентов local 1.2.3.4 #Адрес сетевого интерфейса сервера ifconfig-pool-persist /etc/openvpn/ipp.txt # Если надо исключить одиночный IP Адрес #push "route 1.2.3.4 255.255.255.255 net_gateway" # Если надо исключить сеть #push "route 1.2.3.4 255.255.255.0 net_gateway" push "redirect-gateway def1 bypass-dhcp" #Указать делаемый DNS сервера push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 data-ciphers CHACHA20-POLY1305:AES-128-GCM user nobody group nogroup persist-key persist-tun client-to-client status /etc/openvpn/openvpn-status.log verb 3 crl-verify /etc/openvpn/crl.pem
Настраиваем iptables
Сначала необходимо узнать имя сетевого интерфейса через команду ip addr
и в примере имя интерфейса eth0
заменить на него.
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.100.0/24 -j MASQUERADE iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o eth0 -s 172.16.100.0/24 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT iptables-save > /etc/iptables/rules.v4
4. Настройка файла конфигурации клиента:
Создаем файл конфигурации для клиента:
nano /etc/openvpn/client.txt
Добавляем в файл следующие строки:
Для клиентов не поддерживающих сервер OpenVPN 2.5 и выше замените data-ciphers CHACHA20-POLY1305:AES-128-GCM
на cipher AES-128-GCM
client dev tun proto udp sndbuf 0 rcvbuf 0 tun-mtu 1500 mssfix 1420 remote 1.2.3.4 1194 #Внешний адрес сервера на который клиент будет подключаться из интернета resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 auth-nocache data-ciphers CHACHA20-POLY1305:AES-128-GCM setenv opt block-outside-dns key-direction 1 verb 3
Активируем функцию пересылки пакетов:
nano /etc/sysctl.conf
Ищем и разкомментируем следующую строку
net.ipv4.ip_forward=1
Применяем изменения
sysctl -p.
Перезагружаем сервер
reboot
5. Создаем скрипт для управления пользователями
Создаем скрипт на bash:
Готовый файл можно взять ТУТ
cd ~ nano openvpn-user-manager.sh
Добавляем в файл следующие строки:
#!/usr/bin/env bash if readlink /proc/$$/exe | grep -q "dash"; then echo "This script needs to be run with bash, not sh." exit fi if [[ "$EUID" -ne 0 ]]; then echo "Sorry, you need to run this as root" exit fi newclient () { # Generates the custom client.ovpn cp /etc/openvpn/client.txt ~/$1.ovpn echo "<ca>" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/ca.crt >> ~/$1.ovpn echo "</ca>" >> ~/$1.ovpn echo "<cert>" >> ~/$1.ovpn sed -ne '/BEGIN CERTIFICATE/,$ p' /etc/openvpn/easy-rsa/pki/issued/$1.crt >> ~/$1.ovpn echo "</cert>" >> ~/$1.ovpn echo "<key>" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/private/$1.key >> ~/$1.ovpn echo "</key>" >> ~/$1.ovpn echo "<tls-auth>" >> ~/$1.ovpn sed -ne '/BEGIN OpenVPN Static key/,$ p' /etc/openvpn/ta.key >> ~/$1.ovpn echo "</tls-auth>" >> ~/$1.ovpn } if [[ -e /etc/openvpn/server.conf ]]; then while : do clear echo "" echo "What do you want to do?" echo " 1) Add a new user" echo " 2) Remove an existing user" echo " 3) Exit" read -p "Select an option [1-3]: " option case $option in 1) echo echo "Please don't use special characters, only clear words." read -p "Client name: " -e CLIENT cd /etc/openvpn/easy-rsa/ EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full $CLIENT nopass newclient "$CLIENT" echo echo "Client $CLIENT added, configuration is available at:" ~/"$CLIENT.ovpn" exit ;; 2) NUMBEROFCLIENTS=$(tail -n +2 /etc/openvpn/easy-rsa/pki/index.txt | grep -c "^V") if [[ "$NUMBEROFCLIENTS" = '0' ]]; then echo echo "We were not able to find existing clients!" exit fi echo echo "Select the existing client certificate you want to revoke:" tail -n +2 /etc/openvpn/easy-rsa/pki/index.txt | grep "^V" | cut -d '=' -f 2 | nl -s ') ' if [[ "$NUMBEROFCLIENTS" = '1' ]]; then read -p "Select one client [1]: " CLIENTNUMBER else read -p "Select one client [1-$NUMBEROFCLIENTS]: " CLIENTNUMBER fi CLIENT=$(tail -n +2 /etc/openvpn/easy-rsa/pki/index.txt | grep "^V" | cut -d '=' -f 2 | sed -n "$CLIENTNUMBER"p) echo read -p "Do you actually desire to revoke the access of the client? $CLIENT? [y/N]: " -e REVOKE if [[ "$REVOKE" = 'y' || "$REVOKE" = 'Y' ]]; then cd /etc/openvpn/easy-rsa/ ./easyrsa --batch revoke $CLIENT EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl rm -f pki/reqs/$CLIENT.req rm -f pki/private/$CLIENT.key rm -f pki/issued/$CLIENT.crt rm -f /etc/openvpn/crl.pem cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/crl.pem chown nobody:nogroup /etc/openvpn/crl.pem echo echo "Certificate for the client $CLIENT is revoked!" else echo echo "Certificate revocation for client $CLIENT aborted!" fi exit ;; 3) exit ;; esac done else clear echo "OpenVPN is not installed." echo "Install OpenVPN first" fi
после чего запускаем скрипт и создаем пользователя
./openvpn-user-manager.sh
Полученый файл используем в клиенте OpenVPN.
- Просмотров: 12735