Конфигурация openvpn сервера в Linux Alpine

Конфигурация openvpn сервера в Linux Alpine

    Общие сведения

    OpenVpn используется для создания защитного туннеля между сервером openvpn и клиентом openvpn, геолокация IP-адреса ( провайдера ) заменяется на геолокацию VPN-сервера. Интернет-провайдер не сможет получить доступ к данным туннеля, поэтому можно использовать vpn для обхода блокировок сайтов, но только если ip-адрес сервера vpn не заблокирован провайдером и имеет доступ к этим сайтам
    openvpn позволяет устанавливать соединение между компьютерами минуя NAТ или сетевой экран
    openvpn позволяет создавать защищенные каналы для удаленных сегментов сети, например между филиалами ( городами ). Для шифрования и аутентификации OpenVPN используется библиотека OpenSSL
    OpenVPN использует собственный протокол на базе TLS и SSL и не поддерживает L2TP, IPSec и PPTP
    OpenVPN использует 256-битное OpenSSL-шифрование, но может использовать более сложные шифры
    Для защиты пользователей от сканирования портов, DoS-атак и наводнения портов, используется tls-auth для проверки подписи HMAC
    Из за сильного уровня шифрования лучше использовать протокол UDP

    Установка

    Перед настройкой vpn установить временную зону
    Далее установка openvpn:

    #установить openvpn apk add openvpn #добавить сервис в автозагрузку rc-update add openvpn default #добавить модуль ядра tun modprobe tun echo "tun" >> /etc/modules-load.d/tun.conf #включить IP Forwarding echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/ipv4.conf sysctl -p /etc/sysctl.d/ipv4.conf
    TUN/TAP

    Модуль ядра tun/tap - виртуальный сетевой драйвер, эмулирует работу Ethernet адаптера
    TAP - работает на канальном уровне ( кадры ), создает сетевой мост
    TUN - работает на сетевом уровне ( пакеты ), создает маршрутизацию
    Данная программа перенаправляет входящие и исходящие пакеты через специальный файловый дескриптор, внедряя пакеты в сетевой стек операционной системы.

    IP-forwarding

    IP-forwarding - возможно перенаправлять пакеты через устройство, по умолчанию отключено.
    Проверить включен или нет можно так:

    localhost:~# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1

    Включить можно так:

    sudo sysctl -w net.ipv4.ip_forward=1

    Или добавить строку "net.ipv4.ip_forward = 1" в файл /etc/sysctl.d/ipv4.conf
    Для применения настроек выполнить следующую команду:

    sudo sysctl -p
    Создание сертификатов

    easy-rsa - необходим для упрощения создания ключей и сертификатов

    apk add easy-rsa #Каталог для готовых сертификатов: mkdir -p /etc/openvpn/keys #Каталог для сгенерированных сертификатов: mkdir /etc/openvpn/easy-rsa #скопировать в созданный каталог шаблоны для генерирования сертификатов: cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa #Перейти в каталог для сгенерированных сертификатов: cd /etc/openvpn/easy-rsa

    Файл vars - шаблон для создания ключей, хранит переменные окружения
    Редактировать файл vars

    export KEY_COUNTRY="RU" export KEY_PROVINCE="Moscow" export KEY_CITY="Moscow" export KEY_ORG="MY COMPANY" export KEY_EMAIL="89261969132@mail.ru" export KEY_CN="CHICH" export KEY_OU="CHICH" export KEY_NAME="openvpn.netbash.ru" export KEY_ALTNAMES="openvpn.netbash.ru"

    PKI - инфраструктура публичных ключей
    Повторное выполнение следующей команды уничтожит существующий CA и потребует повторного создания всех ключей и сертификатов Инициализация PKI

    localhost:/etc/openvpn/easy-rsa# ./easyrsa init-pki Notice ------ 'init-pki' complete; you may now create a CA or requests. Your newly created PKI dir is: * /etc/openvpn/easy-rsa/pki * Using Easy-RSA configuration: /etc/openvpn/easy-rsa/vars * The preferred location for 'vars' is within the PKI folder. To silence this message move your 'vars' file to your PKI or declare your 'vars' file with option: --vars= * Using x509-types directory: /etc/openvpn/easy-rsa/x509-types
    Создание корневого сертификата
    # ./easyrsa build-ca * Using SSL: openssl OpenSSL 1.1.1q 5 Jul 2022 * Using Easy-RSA configuration: /etc/openvpn/easy-rsa/vars * The preferred location for 'vars' is within the PKI folder. To silence this message move your 'vars' file to your PKI or declare your 'vars' file with option: --vars= Enter New CA Key Passphrase: #Здесь указывается пароль, который будет использоваться для ключа сертификации #Этот пароль защищает приватный ключ удостоверяющего центра Re-Enter New CA Key Passphrase: Common Name (eg: your user, host, or server name) [Easy-RSA CA]: #Здесь можно пропустить ввод клавишей Enter Notice ------ CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/easy-rsa/pki/ca.crt

    После выполнения этих команд будет созданы структуры директорий CA, публичный сертификат центра сертификации ca.crt располагается в директории pki, закрытый ключ ca.key в pki/private

    Запрос сертификата для сервера
    localhost:/etc/openvpn/easy-rsa# ./easyrsa gen-req server nopass Common Name (eg: your user, host, or server name) [server]: #Данный шаг можно пропустить ( Enter ) Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/pki/reqs/server.req key: /etc/openvpn/easy-rsa/pki/private/server.key
    Генерация сертификата

    В следующей команде server это имя сервера
    При выполнении будет создан запрос на сертификат ( /pki/issued/server.crt ) и сгенерирован закрытый ключ сервера server.key, он будет располагаться в pki/private. Закрытый ключ не должен передаваться по открытым каналам связи

    ./easyrsa sign-req server server #Далее необходимо подтвердить данные: Request subject, to be signed as a server certificate for 825 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /etc/openvpn/easy-rsa/pki/ee09ad28/temp.d2605a45 #Ранее указанным паролем подтвердить: Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Feb 27 21:10:09 2025 GMT (825 days) Write out database with 1 new entries Data Base Updated Notice ------ Certificate created at: /etc/openvpn/easy-rsa/pki/issued/server.crt
    Ключ Гофмана

    Ключ Диффи Хеллмана применяется для обеспечения дополнительной защиты трафика от расшифровки между клиентом и сервером.

    ./easyrsa gen-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ...................................................+.. DH parameters appear to be ok. Notice ------ DH parameters of size 2048 created at: /etc/openvpn/easy-rsa/pki/dh.pem
    Генерация ta ключа

    Для активации tls-auth необходим дополнительный секретный ключ ta
    Tls-auth добавляет подпись HMAC к handshake-пакетам SSL/TLS
    Сгенерировать ключ можно с помощью команды

    localhost:/etc/openvpn/easy-rsa# openvpn --genkey --secret pki/ta.key
    Перенос сгенерированных ключей в рабочий каталог сервера

    Скопировать ключи в созданный каталог /etc/openvpn/keys

    localhost:/etc/openvpn/easy-rsa# cp pki/ca.crt /etc/openvpn/keys/ localhost:/etc/openvpn/easy-rsa# cp pki/issued/server.crt /etc/openvpn/keys/ localhost:/etc/openvpn/easy-rsa# cp pki/private/server.key /etc/openvpn/keys/ localhost:/etc/openvpn/easy-rsa# cp pki/dh.pem /etc/openvpn/keys/ localhost:/etc/openvpn/easy-rsa# cp pki/ta.key /etc/openvpn/keys/ localhost:/etc/openvpn/easy-rsa# ls ../keys/ ca.crt dh.pem server.crt server.key ta.key
    Настройка openvpn сервера

    Создать конфигурационный файл /etc/openvpn/server.conf и вставить в него данные:

    local 192.168.1.1 port 443 proto udp dev tun ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh.pem tls-auth keys/ta.key 0 server 172.16.10.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 max-clients 32 persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 4 mute 20 daemon mode server tls-server comp-lzo

    local — адрес, на котором обрабатываются запросы OpenVPN; port — сетевой порт ( порт 1194 является стандартным для OpenVPN).
    proto — транспортный протокол.
    dev — виртуальный сетевой адаптер
    ca — путь до корневого сертификата
    cert — путь до открытого сертификата сервера.
    key — путь до закрытого сертификата сервера.
    dh — путь до ключа Диффи Хеллмана.
    tls-auth — путь до tls ключа.
    server — IP-адрес сервера в сети VPN.
    ifconfig-pool-persist — путь к файлу клиентских IP-адресов.
    keepalive X Y — каждые X секунд отправляется ping-запрос на удаленный узел. Если за Y секунд не получено ответа — перезапускать туннель
    max-clients — максимум одновременных подключений
    persist-key — не перезагружать ключи при повторной загрузки из-за разрыва соединения
    persist-tun — не изменять устройства tun/tap при перезапуске сервера
    status — путь до журнала статусов
    log-append — путь до файла лога
    verb — уровень логирования событий. От 0 до 9
    mute — ограничение количества подряд отправляемых в лог событий
    daemon — работа в режиме демона
    mode — в каком режиме работает openvpn (сервер или клиент)
    tls-server — указывает, что данный сервер работает с использованием TLS
    comp-lzo — использовать сжатие


    Создать каталог логов, добавить службу в автозапуск

    mkdir /var/log/openvpn rc-update add openvpn@server
    Настройка openvpn клиента

    На сервере создать ключи для клиента:

    export EASYRSA_CERT_EXPIRE=1460 #Создать сертификат для клиента: ./easyrsa build-client-full client1 nopass #Копировать ключи во временную директорию: cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt pki/ta.key /tmp/keys/ #Задать права chmod -R a+r /tmp/keys

    На стороне клиента:

    #Скачать сгенерированные ключи: rsync -Pzavrc -e 'ssh -p 9876' user1@192.168.1.1:/tmp/keys ./

    На клиентском сервер в директории /etc/openvpn/ создать кофигурационный файл netbash.conf

    client dev tun proto udp topology subnet remote openvpn.netbash.ru port 443 resolv-retry infinite nobind comp-lzo -----BEGIN CERTIFICATE----- MIIDSzCCAjOgAwIBAgIUbcfMu+6yy6deV4b1t2+S9hmyZSgwDQYJKoZIhvcNAQEL BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjIxMTI1MjA1MTM1WhcNMzIx MTIyMjA1MTM1WjAWMRQwEgYDVQQDDAtFYXN5LVJTQSBDQTCCASIwDQYJKoZIhvcN NcRAT0UXo+tzkW2njPRI08cXEXO136QpKwGOp2mxqdNyRxZ+A1SGz35LIxgdLvUj oWqXB3kb9+ljgEO2bp954St6FZ7gsSxQElrrXsAX6g== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: cd:37:2e:73:35:54:78:30:7c:fe:76:d3:01:46 Signature Algorithm: sha256WithRSAEncryption Issuer: CN=Easy-RSA CA Validity Not Before: Nov 26 00:52:19 2022 GMT Not After : Nov 25 00:52:19 2026 GMT Subject: CN=client1 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:b4:6f:41:dd:4d:19:df:e4:95:19:17:f9:cb:f6: a1:71:bf:26:dc:67:8a:a2:a5:2d:8b:d2:3b:34:54: 3d:ad:70:ad:5e:78:a2:6b:7a:fd:88:6a:e6:e2:19: cf:9e:41:60:44:42:cd:a6:c7:ee:3f:f1:06:5e:70: 0c:db:ad:42:6d:84:1a:14:4b:f6:ba:e1:71:a2:6d: 7b:2b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: C0:9D:6A:9C:47:5A:CD:60:A6:BE:2F:25:39:25:26:92 X509v3 Authority Key Identifier: keyid:31:8E:46:B0:7C:47:7B:D8:BA:DE:0B:75:2F:AB:EE DirName:/CN=Easy-RSA CA serial:6D:C7:CC:5E:57:86:F5:B7:6F:92:F6:19:B2:65:28 X509v3 Extended Key Usage: TLS Web Client Authentication X509v3 Key Usage: Digital Signature Signature Algorithm: sha256WithRSAEncryption 27:1c:a4:7b:26:6a:f4:6d:37:b3:93:91:9e:ae:31:45:4f:24: 11:88:e5:9c:e2:00:e5:0d:8f:11:43:7d:df:4c:dd:34:40:6f: ca:b6:cd:5d:ba:9c:f8:f4:e9:b6:65:e4:a1:5a:2a:be:29:23: d1:47:9c:bd:21:1c:2f:e2:20:a1:a3:ee:f0:a0:d0:af:b7:a9: 41:2f:f3:82 -----BEGIN CERTIFICATE----- MIIDVjCCAj6gAwIBAgIRAM03LnM1VHj3tDB8/nbTAUYwDQYJKoZIhvcNAQELBQAw FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjIxMTI2MDA1MjE5WhcNMjYxMTI1 MDA1MjE5WjASMRAwDgYDVQQDDAdjbGllbnQxMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAtG9B3U0Z3+SVGRf5y/ahcb8m3GeKoqUti9I7NFRpZZQ2msJB dQnv2v2XaAHA8EwkalV8kJmUoc1k5XVLbjJls2u/9wmbWhF/o4ucD+P8vcuwudCb dJbSCp80lanOtNbKg7TclokNJ303Tr5HqxuuY/8yBKbPinkKUXZvZ1t5XG3+1pud JfJtTuLK2bGRpZgW/CBSiE609kwYrBVH4vUHFeNo0zERZzeBKtM1zPu3NxFec/Is G1kgSi4B7nRDmPLgwpnVNgtRIm79VZQ78Oprfut1c9TdJEt07/FBL/OC -----END CERTIFICATE----- -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0b0HdTRnf5JUZ F/nL9qFxvybcZ4qipS2L0js0VGlllDaawkF1Ce/a/ZdoAcDwTCRqVXyQmZShzWTl V3ZGoZpSZeVqQe3miErf0gekL7zsexbR6AIas+5CQDGSfwcm/SJ1++SbBXJztEKF A/xXXETeuMH33twUv7sU+5HCq7kUCNgMWm59o6cupg0RddKx2Lg1AQDge994Lai2 6F2EarcsycWDkmcv4CME70PnNxB9haTx868wezgZPv3tAiOGOo8NXfwz73NFgb0u -----END PRIVATE KEY----- tls-client # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 0c333d55f1603c0aa27b7cf2b694ad2d b35bd3d003f46e635353eae9ea28b432 fce05171c7ca78dee0ce42f8352bc2b9 9eec2a084b1b8b756be3170b0eca0b1c b23814b774f86e8a4685fd31062a0e0b -----END OpenVPN Static key V1----- key-direction 1 remote-cert-tls server persist-key persist-tun verb 3 mute 20

    В конфигурационный файл перенесены ключи созданные на openvpn сервере для клиента, а также указаны параметры конфигурации

    Использование сервера openvpn в качестве шлюза

    Для настройки openvpn сервера в качестве шлюза для подписчиков (клиентов), необходимо добавить в /etc/openvpn/server.conf следующие строки:

    push "redirect-gateway def1" push "dhcp-option DNS 77.88.8.8"

    Далее перезапустить openvpn

    Последнее изменение: 07.10.2024 00:05


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ