Главная Форумы SOFTWARE System settings OpenVPN на Ubuntu Server 14.04

Помечено: , , , ,

В этой теме 1 ответ, 1 участник, последнее обновление  Esmertec 3 мес., 2 нед. назад.

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #150

    Esmertec
    Хранитель

    Главное условия построения защищенной сети — наличие белого IP адреса (он же статический). Уточнить или купить его можно у вашего текущего провайдера, обычно стоит не много, и облагается ежемесячной абонентской платой.

    Для развертывании сервера будет достаточно 40Гб пространства на жестком диске, 4 процессорных ядра (если вы используете виртуальную машину) 4Гб ОЗУ, 1 сетевой адаптер.

    После установки Ubuntu Server сразу зайдем в настройки сетевого адаптера и пропишем статический IP адрес внутренней сети нашего сервера. Все сетевые настройки находятся в файле /etc/network/interfaces, поэтому откроем любым текстовым редактором и пропишем интерфейсы желаемый IP адрес:
    sudo nano /etc/network/interfaces
    Я использую редактор nano, для своего сервера я буду использовать IP адрес 192.168.1.115, конфиг интерфейсов будет выглядеть следующим образом:

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    auto eth0
    iface eth0 inet static
            address 192.168.1.115 - внутренний IP адрес OpenVPN сервера
            netmask 255.255.255.0 - используемая маска
            gateway 192.168.1.1 - шлюз сети
            dns-nameservers 8.8.8.8 - тут будут DNS сервера Вашего провайдера

    перезагружаем сервер
    sudo reboot
    после чего убеждаемся, что интернет на нашем сервере до сих пор есть и продолжаем развертку. Зайдем под Root пользователем для удобства.
    sudo -i
    После чего установим пакет OpenVPN
    apt-get install openvpn
    Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов. Для их генерации в пакете OpenVPN имеются специальные скрипты, расположенные в /usr/share/doc/openvpn/examples/easy-rsa/2.0 Перед началом работы скопируем их, чтобы не изменять оригиналы.Для 14.04 LTS, с лета 2013 года easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), тогда делаем следующее:
    apt-get install easy-rsa

    mkdir /etc/openvpn/easy-rsa
    cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa/2.0

    Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов
    cd /etc/openvpn/easy-rsa/2.0
    Редактируем файл переменных
    nano vars
    Файл vars отвечает за автоматическое заполнение полей при создании сертификатов, т.е. если Вам нужно будет с генерировать 100+ сертификатов, при этом Вы не хотите тратить время на заполнение всех полей, которые будут типичными для всех сертификатов, то они будут автоматически подобраны из этого файла.

    # Почти в самом низу файла, заполняем информацию о сертификатах по умолчанию (ваши значения).
    export KEY_COUNTRY="RU" - Ваше местоположение
    export KEY_PROVINCE="Amur Region" - Ваш регион, по идее то же самое, что и предыдущее поле
    export KEY_CITY="Blagoveschensk" - Ваш город
    export KEY_ORG="Organization" - Ваша организация сокращенно
    export KEY_EMAIL="vash@email.tut" - Ваш электронный адрес почты
    export KEY_OU="MyOrganizationalUnit" - Ваша организация
    # PKCS11 я не использовал, поэтому оставил без изменений. Кто шарит нафига эта штука, напишите ниже в теме.
    export PKCS11_MODULE_PATH=changeme
    export PKCS11_PIN=1234
    
    #Добавить строчку
    export KEY_ALTNAMES="MyOpenVPN"

    После чего сохраняем файл и выходим из редактора.копируем конфиг openssl
    cp openssl-1.0.0.cnf openssl.cnf
    Загружаем переменные
    source ./vars
    Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей
    ./clean-all
    Создаем сертификат. По умолчанию поля будут заполняться данными, введенными ранее в vars, поэтому можно ничего не менять.
    ./build-ca
    Создаем ключ сервера
    ./build-key-server server
    В конце соглашаемся с запросом на подпись и добавление сертификата в базу.
    Создаем ключ Диффи-Хеллмана
    ./build-dh
    Cоздаем ключ для tls-аутификации
    openvpn --genkey --secret keys/ta.key
    Перемещаем сертификаты
    cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/
    Создание файла конфигурации сервера
    Копируем архив конфигураций сервера в папку с нашим Openvpn, после чего переходим в директорию с нашей впн, распаковываем конфиг для дальнейшего редактирования:

    cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
    cd /etc/openvpn
    gunzip -d /etc/openvpn/server.conf.gz

    nano /etc/openvpn/server.conf
    копируем туда следующее:

    # Порт по которому будет работать ваша сеть, этот порт должен быть открыт на вашем шлюзе
    port 443
    # Протокол может быть UDP или TCP, я выбрал 1-й вариант.
    proto udp
    # Если вы выберите протокол TCP, здесь должно быть устройство tap. Однако, это вариант я не проверял, поэтому ищите $
    dev tun
    
    # Указываем где искать ключи
    ca /etc/openvpn/keys/ca.crt
    cert /etc/openvpn/keys/server.crt
    key /etc/openvpn/keys/server.key  # This file should be kept secret
    dh /etc/openvpn/keys/dh2048.pem
    
    # Задаем IP и маску виртуальной сети. Произвольно, но если не уверены лучше делайте как показано здесь
    server 10.0.1.0 255.255.255.0
    
    topology subnet
    
    # Указыем, где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
    client-config-dir /etc/openvpn/ccd
    
    # Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
    ifconfig-pool-persist ipp.txt
    
    # Указываем сети, в которые нужно идти через туннель (сеть-клиента) это возможные адреса удаленных клиентов.
    route 192.168.0.0 255.255.255.0
    route 192.168.1.0 255.255.255.0
    route 102.168.100.0 255.255.255.0
    
    # Включаем TLS
    tls-server
    tls-auth /etc/openvpn/keys/ta.key 0
    tls-timeout 120
    auth SHA1 # по-умолчанию. Можно ещё MD5.
    cipher BF-CBC
    
    # Если нужно, чтобы клиенты видели друг друга раскомментируйте
    client-to-client
    
    keepalive 10 120
    
    # Сжатие трафика
    comp-lzo
    
    # Максимум клиентов
    max-clients 250
    
    user nobody
    group nogroup
    
    # Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
    persist-key
    persist-tun
    
    status openvpn-status.log
    log /var/log/openvpn.log
    # Детальность логирования
    verb 9
    # Защита от повторов (максимум 20 одинаковых сообщений подряд)
    mute 20
    
    # Файл отозванных сертификатов. Разремить, когда такие сертификаты появятся.
    crl-verify /etc/openvpn/easy-rsa/2.0/keys/crl.pem

    Создадим директорию для клиентских конфигов
    mkdir /etc/openvpn/ccd
    Можно запускать наш сервер OpenVPN
    service openvpn restart
    Смотрим список интерфейсов
    ifconfig
    Если среди прочих видим

    tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
              inet addr:10.0.1.1  P-t-P:10.0.1.1  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:100
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    значит VPN-сервер завелся. Если нет, то смотрим лог
    tail -f /var/log/openvpn.log

    Создание ключей и сертификатов
    Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов
    cd /etc/openvpn/easy-rsa/2.0
    Загружаем переменные
    source vars
    Создаем ключ клиента
    ./build-key client
    Если хотим защитить ключ паролем, то генерируем его другой командой
    ./build-key-pass client
    В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ.
    Присвоение статических адресов клиентам
    Если Вы хотите присвоить каждому клиенту свой IP адрес, либо у вас много рользователей и нужно использовать 240+ IP адресов в одной защищенной сети, нужно создать папку ccd в директории с openvpn сервером
    mkdir /etc/openvpn/ccd
    После чего создать там файл с именем клиента для которого вы собираетесь использовать статический IP адрес, допустим это будет client1.
    cd /etc/openvpn/ccd
    touch /etc/openvpn/ccd/client1
    После чего открываем файл
    nano /etc/openvpn/ccd/client1
    и редактируем его

    ifconfig-push 10.0.1.186 255.255.255.0 - Желаемый статический IP адрес и маска сети клиента
    push «route 10.0.1.0 255.255.255.0» - Сеть сервера
    push «route 192.168.0.0 255.255.255.0» - Локальная сеть в которой находится клиент
    push «route 192.168.1.0 255.255.255.0» - Локальная сеть в которой находится клиент

    если локальная сеть клиента меняется не так часто, то можно оставлять одну строчку, но мне лениво менять файлы клиентов, поэтому я прописал обе сети на будущее ))))

    Создание файла конфигурации клиента
    Конфигурация клиента мало чем отличается от сервера, оно и понятно, но есть не большие изменения:

    remote 192.168.1.115 443 - IP адрес сервера, если клиент находится не в той же сети, что и сервер тут должен быть указан белый IP адрес, это то саме условие о котором говорилось ранее.
    client
    dev tun
    proto udp
    resolv-retry infinite # this is necessary for DynDNS
    nobind
    cipher BF-CBC
    user nobody
    group nogroup
    persist-key
    persist-tun
    dh C:\\OpenVPN\\ssl\\dh2048.pem
    ca C:\\OpenVPN\\ssl\\ca.crt
    cert C:\\OpenVPN\\ssl\\client1.crt
    key C:\\OpenVPN\\ssl\\client1.key
    tls-client
    tls-auth C:\\OpenVPN\\ssl\\ta.key 1
    auth SHA1 # по-умолчанию. Можно MD5
    comp-lzo
    verb 4
    mute 20
    #redirect-gateway
    #show-net-up

    На этом настройки закончены, если нужно подключиться с windows то Вам нужно будет скачать клиент Openvpn с офф. сайта, конфиг клиента выше написан под windows, т.к. это ос наиболее популярна, но конфиг легко адаптируется и под другие ОС.

    Ты знаешь, что такое безумие? Безумие - это точное повторение одного и того же действия, раз за разом, в надежде на изменение.

    #153

    Esmertec
    Хранитель

    Имеется Ubuntu server 14.04.5 на последнем ядре используется в качестве openvpn сервера, стоит это все дело на Hyper-v сервере соответственно, недавно понял, что openvpn сервер немного умирает когда к нему коннектица 250+ пользователей, на момент установки ubuntu я не рассчитывал, что придется подключать такое кол-во пользователей. Проблема заключается в том, что если в параметрах виртуальной машины добавлять ядра на ubuntu, она отлично загружается, но в итоге не видит интернет (т.е. не пингуется ни один хостинг), если вернуть все обратно, то все отлично работает.

    Спойлер

    [свернуть]

    В: как добавить в ubuntu server ядер, чтоб оно еще и работало нормально? =)
    О: Решение оказалось, как ни странно, под носом, использовалось ядро GNU/Linux 3.13.0-76-generic i686, которое не хотело работать после «апгрейда» железа, командой:
    sudo apt-get install --install-recommends linux-generic-lts-xenial
    Ставим последнее стабильное ядро для 14.04.5 (оно же GNU/Linux 4.4.0-38-generic i686), и спокойно меняем параметры виртуального железа в Hyper-v, после чего все завелось и работает отлично!

    Команды для отзыва сертификата:

    cd /etc/openvpn/easy-rsa/2.0
    source ./vars
    ./revoke-full client

    После ввода команд увидите сообщение:


    последняя строчка говорит о том, что сертификат не прошел проверку, и больше не сможет подключаться к серверу

    Ты знаешь, что такое безумие? Безумие - это точное повторение одного и того же действия, раз за разом, в надежде на изменение.

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

Для ответа в этой теме необходимо авторизоваться.