Как настроить OpenVPN, чтобы я мог безопасно использовать Интернет из незащищенной точки доступа?

31

Цель: я хочу иметь возможность безопасно пользоваться Интернетом через мой домашний ПК, когда мой ноутбук подключен к открытой точке доступа / точке доступа.

Я действительно знаю , что я могу использовать SSH туннель / SOCKS прокси, но я не хочу возиться с приложениями ( что делает их использовать, если вообще возможно). Я предполагаю, что мне нужна установка OpenVPN, поэтому я ищу подробное руководство о том, как:

  1. Установите и настройте сервер OpenVPN
  2. Настройте клиент OpenVPN (NetworkManager)

Версии Ubuntu, с которыми это должно работать, - 10.10 и 11.04.

htorque
источник
Я думаю, это скорее вопрос о сбое сервера, чем вопрос о Ubuntu.
Луис Альварадо
1
@Cyrex: 1) есть, 2) вероятно нет
Лекенштейн

Ответы:

40

У меня есть точный вопрос несколько месяцев назад, но, кроме того, я хотел иметь подключение IPv6, если это возможно. Вас могут заинтересовать мои вопросы по Serverfault:

У меня был только один сетевой адаптер («сетевой интерфейс») на моем сервере для использования. В моей настройке NetworkManager было недостаточно, потому что мне нужно запустить собственный скрипт для поддержки IPv6. Однако для простоты я буду использовать NetworkManager здесь и опускать поддержку IPv6.

Сначала просто примите решение о методе аутентификации. Я буду использовать более безопасный метод сертификата, который работает как SSL: во время рукопожатия выбирается общий секрет, который будет использоваться для сеанса. Другие методы являются общим ключом; имя пользователя и пароль.

сервер

1. Подготовить

Сначала установите сервер openvpn. Это так же просто, как sudo apt-get install openvpn. Сложная часть - это настройка. Конфигурация присутствует в /etc/openvpn.

2. Настройте аутентификацию

Серверу нужны сертификаты для идентификации себя и своих клиентов. Эти сертификаты извлекаются из CA (Common Authority). Создание сертификатов и соответствующих закрытых ключей может быть выполнено на любой машине, это не обязательно должно выполняться на сервере. Если вы действительно параноик, вы должны сделать это на машине, которая не подключена к сети, и использовать карту памяти для передачи сертификатов.

Создайте CA и сертификаты для сервера

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

Официальная документация предполагает сделать администрацию /etc/openvpn. Я не большой поклонник запуска всего как root, поэтому я помещу его в другой каталог.

  1. Создайте каталог администрирования и скопируйте в него файлы, выполнив:

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. При необходимости измените значения по умолчанию vars, например, настройки, KEY_SIZE=2048потому что вы параноик.
  3. Загрузите переменные и создайте каталог ключей, выполнив:

    . vars
    
  4. Если вы получили сообщение об ошибке No ... openssl.cnf file could be found Further invocations will fail, запустите ln -s openssl-1.0.0.cnf openssl.cnf, а затем . varsснова.

  5. Если вы впервые используете этот центр сертификации, подготовьте среду ключей. Вы не запускать эту команду , если вы хотите сохранить свой ранее созданный CA. Для этого вам потребуется развернуть новый ca.crt.

    ./clean-all
    
  6. Создайте CA, выполнив ./build-ca. Вы можете заполнить любую информацию по своему усмотрению, но обратите внимание, что эта информация будет видна в файлах журналов, когда клиенты подключаются к серверу. Это создаст файлы ca.keyи ca.crtв подпапке keys. Храните ca.keyфайл в секрете при любых обстоятельствах . В противном случае любой пользователь, имеющий ключ, сможет подключиться к вашему серверу.
  7. Если у вас есть предыдущий сертификат, который утерян или просрочен, вам нужно сначала отозвать старый ./revoke-full server. В противном случае вы получите ошибку базы данных.
  8. Создайте сертификат для сервера, выполнив:

    ./build-key-server server
    

    При запросе пароля оставляйте его пустым, если вы не хотите вводить пароль при каждом запуске сервера (не рекомендуется). Подтвердите подпись сертификата и его совершение. В каталоге появятся два новых файла keys: server.keyи server.crt.

DH и использовать подготовить для TLS-Auth

Генерация параметров Диффи-Хеллмана с использованием:

./build-dh

Для отвердения использовать tls-auth. Для этого сгенерируйте общий секретный ключ, используя:

openvpn --genkey --secret ta.key

Полученный файл ( ta.key) также должен быть распространен среди клиентов, но вы не должны делать его публичным.

Создавайте сертификаты для клиентов

Для каждого клиента эти шаги должны быть повторены:

  1. Введите каталог, в котором вы создали свой CA и сертификат сервера:

    cd ~/openvpn-admin/easy-rsa
    
  2. Если вы пропустили этап создания CA, потому что он у вас уже есть, вам сначала нужно загрузить переменные:

    . vars
    
  3. Если вы создаете новые сертификаты из-за того, что старые сертификаты утеряны или истекли , вам нужно сначала отозвать старый ./revoke-full you. В противном случае вы получите ошибку базы данных.
  4. Создайте сертификат клиента you.keyи соответствующий сертификат you.crt:

    ./build-key you
    

    CommonNameДолжен быть уникальным. Оставьте пароль пустым, если вы используете KDE, так как он не поддерживается на 10.10. Как и при создании сертификата сервера, подтвердите подпись сертификата и принятие изменений.

3. Настройте сервис OpenVPN

По умолчанию OpenVPN запускается от имени root при приеме соединений. Не очень хорошая идея, если услуга доступна из злого Интернета.

  1. Создайте выделенного пользователя для OpenVPN, скажем openvpn:

    sudo useradd openvpn
    
  2. Скопируйте файлы server.key, server.crt, ca.crtи dh1024.pem(или dh2048.pemесли вы изменили размер ключа) из каталога ключей в /etc/openvpn. Разрешение 400 (только для чтения для владельца) в порядке.

    sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
    sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
    
  3. Скопируйте файл ta.keyтакже:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Создайте файл /etc/openvpn/server.confи вставьте в него следующие строки:

    proto udp
    dev tap
    ca ca.crt
    cert server.crt
    key server.key
    dh dh1024.pem
    server 10.8.0.0 255.255.255.0
    push "redirect-gateway def1"
    ifconfig-pool-persist ipp.txt
    keepalive 10 120
    tls-auth ta.key 0
    # Compress data to save bandwidth
    comp-lzo
    user openvpn
    group openvpn
    persist-key
    persist-tun
    # Logs are useful for debugging
    log-append openvpn-log
    verb 3
    mute 10
    
  5. Установите соответствующие разрешения для этого, это не должно быть секретным, но я предпочитаю не пропускать детали конфигурации так:

    sudo chmod 640 /etc/openvpn/server.conf
    

4. Завершение сервера

Если вы создали сертификаты на сервере, рекомендуется зашифровать их или перенести с сервера. В любом случае не теряйте ca.keyи server.key. В первом случае другие смогут подключиться к вашему серверу. В последнем MITM возможен.

клиент

Помимо IP-адреса сервера администратор сервера должен передать следующие файлы:

  • ca.crt: для проверки сертификатов
  • server.crt: для проверки сервера и связи с ним
  • ta.key: для усиления безопасности
  • you.crt: идентифицировать себя с сервером
  • you.key: это как ваш пароль, права доступа к файлу должны быть 400 (только для чтения для владельца)

1. Установка

Установите OpenVPN и плагин NetworkManager (подходит для KDE и Gnome):

sudo apt-get install openvpn network-manager-openvpn

network-manager-openvpn находится в хранилище вселенной.

2. Конфигурация

На панели управления используйте следующие данные:

  • Шлюз: IP-адрес сервера
  • Тип: «Сертификаты (TLS)» (Gnome) или «Сертификат X.509» (KDE)
  • Сертификат CA: путь к ca.crt
  • Сертификат пользователя: путь к you.crt
  • Закрытый ключ: путь к you.key

На продвинутом уровне :

  • Порт шлюза: Автоматический (1194) (не требует изменения)
  • Использовать сжатие данных LZO: включено
  • Использовать TCP-соединение: отключено
  • Использовать устройство TAP: включено
  • Шифр: по умолчанию
  • Аутентификация HMAC: по умолчанию
  • Использовать TLS-аутентификацию: включено
    Укажите путь к файлу ключа ta.keyи установите для параметра «Направление ключа» значение 1.
  • ( todo - проверка его ) сервер выдвигает шлюз по умолчанию, так что весь трафик проходит через VPN-соединение. В прошлый раз, когда я проверял, плагин network-manager-openvpn этого не делал.

Если вы не можете заставить работать NetworkManager или не хотите его использовать, поместите файлы ( ca.crt, ...) /etc/openvpnи создайте /etc/openvpn/client.confфайл:

client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20

Если вы не хотите включать этот VPN во время загрузки, отредактируйте /etc/default/openvpnи раскомментируйте следующую строку, удалив #:

#AUTOSTART="none"

Чтобы запустить это соединение, запустите:

sudo /etc/init.d/openvpn start client

clientдолжен быть переименован, если ваш файл конфигурации не назван client.conf. Пример: если вы назвали свой файл конфигурации safe.conf, вам нужно запустить sudo /etc/init.d/openvpn start safe.

Чтобы остановить OpenVPN, вы должны запустить:

sudo /etc/init.d/openvpn stop
Lekensteyn
источник
1
Какова конфигурация сервера для входа в систему на основе имени пользователя / пароля, где мой клиент не обладает знаниями для настройки клиента vpn, и все, что я хочу, чтобы он использовал ip, имя пользователя, пароль сервера.
@YumYumYum Не знаю, как использовать имя пользователя / пароль, взгляните на страницу руководства openvpn ( man openvpn). Последние версии openvpn имеют возможность встраивать сертификаты и файлы ключей, поэтому, возможно, еще проще предоставить этот единственный файл конфигурации с инструкциями для пользователя.
Лекенштейн
Обратите внимание, что более новые версии Ubuntu поставляются с OpenSSL 1.0.1, и выполнение . varsвышеуказанной команды может привести к ошибке, что «файл openssl.cnf может быть найден. Дальнейшие вызовы завершатся неудачно». Вам нужно sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, а затем запустить . varsи другие команды.
Дан Даскалеску
@DanDascalescu Скрипт для меня правильно whichopensslнаходит openssl-1.0.0.cnfфайл (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Лекенштейн
Очень информативный, исчерпывающий ответ. Не могли бы вы ответить на этот вопрос ?
JB0x2D1
8

Вам на самом деле не нужно возиться с какими-либо приложениями. Это работает "так же, как VPN".

  1. Сначала установите tsocksпакет (временные носки):

    sudo apt-get install tsocks
    
  2. Затем отредактируйте /etc/tsocks.confи введите

    server = 127.0.0.1
    server_port = 3333
    
  3. Теперь откройте терминал и введите (это соединяет вас):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Запустить (через другой терминал или ALT-F2):

    tsocks firefox
    

Теперь Firefox передает всю связь через сервер SOCKS на вашем компьютере, который создал SSH. Кроме того, он направляется на ваш домашний компьютер, где он попадает в Интернет. Все, что вам нужно на домашней машине - это SSH-сервер. После первого раза просто повторите шаги 3 и 4.

Работает как часы! Увы, хром не любит цоксов, но эй, Firefox работает.

MarkovCh1
источник
3
Хорошо, посмотрите ваше последнее предложение - я не хочу сначала проверять все мои программы, если они действительно хорошо работают вместе с tsocks, когда это может быть только один щелчок в апплете NetworkManager с OpenVPN.
htorque
ХОРОШО. Мой ответ, вероятно, будет полезен людям, которые хотят получить быстрое решение для доступа к веб-сайтам.
МарковЧ1,
1

Туннельное решение SSH проще, чем вы думаете. Программа типа gSTM запустит / остановит туннели для вас с графическим интерфейсом. Затем просто откройте «Сетевой прокси-сервер» и измените его с «Прямое подключение к Интернету» на «Конфигурирование прокси-сервера вручную», нажмите «Применить для всей системы», и все ваши приложения должны отправлять свои данные по туннелю - не нужно возиться с каждым из них по отдельности.

Феликс
источник