У меня есть точный вопрос несколько месяцев назад, но, кроме того, я хотел иметь подключение IPv6, если это возможно. Вас могут заинтересовать мои вопросы по Serverfault:
У меня был только один сетевой адаптер («сетевой интерфейс») на моем сервере для использования. В моей настройке NetworkManager было недостаточно, потому что мне нужно запустить собственный скрипт для поддержки IPv6. Однако для простоты я буду использовать NetworkManager здесь и опускать поддержку IPv6.
Сначала просто примите решение о методе аутентификации. Я буду использовать более безопасный метод сертификата, который работает как SSL: во время рукопожатия выбирается общий секрет, который будет использоваться для сеанса. Другие методы являются общим ключом; имя пользователя и пароль.
сервер
1. Подготовить
Сначала установите сервер openvpn. Это так же просто, как sudo apt-get install openvpn
. Сложная часть - это настройка. Конфигурация присутствует в /etc/openvpn
.
2. Настройте аутентификацию
Серверу нужны сертификаты для идентификации себя и своих клиентов. Эти сертификаты извлекаются из CA (Common Authority). Создание сертификатов и соответствующих закрытых ключей может быть выполнено на любой машине, это не обязательно должно выполняться на сервере. Если вы действительно параноик, вы должны сделать это на машине, которая не подключена к сети, и использовать карту памяти для передачи сертификатов.
Создайте CA и сертификаты для сервера
Этот шаг должен быть выполнен один раз, если закрытый ключ вашего ЦС не был скомпрометирован. В этом случае могут быть созданы действительные сертификаты, которые будут приняты сервером, что приведет к нарушению безопасности.
Официальная документация предполагает сделать администрацию /etc/openvpn
. Я не большой поклонник запуска всего как root, поэтому я помещу его в другой каталог.
Создайте каталог администрирования и скопируйте в него файлы, выполнив:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- При необходимости измените значения по умолчанию
vars
, например, настройки, KEY_SIZE=2048
потому что вы параноик.
Загрузите переменные и создайте каталог ключей, выполнив:
. vars
Если вы получили сообщение об ошибке No ... openssl.cnf file could be found
Further invocations will fail
, запустите ln -s openssl-1.0.0.cnf openssl.cnf
, а затем . vars
снова.
Если вы впервые используете этот центр сертификации, подготовьте среду ключей. Вы не запускать эту команду , если вы хотите сохранить свой ранее созданный CA. Для этого вам потребуется развернуть новый ca.crt
.
./clean-all
- Создайте CA, выполнив
./build-ca
. Вы можете заполнить любую информацию по своему усмотрению, но обратите внимание, что эта информация будет видна в файлах журналов, когда клиенты подключаются к серверу. Это создаст файлы ca.key
и ca.crt
в подпапке keys
. Храните ca.key
файл в секрете при любых обстоятельствах . В противном случае любой пользователь, имеющий ключ, сможет подключиться к вашему серверу.
- Если у вас есть предыдущий сертификат, который утерян или просрочен, вам нужно сначала отозвать старый
./revoke-full server
. В противном случае вы получите ошибку базы данных.
Создайте сертификат для сервера, выполнив:
./build-key-server server
При запросе пароля оставляйте его пустым, если вы не хотите вводить пароль при каждом запуске сервера (не рекомендуется). Подтвердите подпись сертификата и его совершение. В каталоге появятся два новых файла keys
: server.key
и server.crt
.
DH и использовать подготовить для TLS-Auth
Генерация параметров Диффи-Хеллмана с использованием:
./build-dh
Для отвердения использовать tls-auth
. Для этого сгенерируйте общий секретный ключ, используя:
openvpn --genkey --secret ta.key
Полученный файл ( ta.key
) также должен быть распространен среди клиентов, но вы не должны делать его публичным.
Создавайте сертификаты для клиентов
Для каждого клиента эти шаги должны быть повторены:
Введите каталог, в котором вы создали свой CA и сертификат сервера:
cd ~/openvpn-admin/easy-rsa
Если вы пропустили этап создания CA, потому что он у вас уже есть, вам сначала нужно загрузить переменные:
. vars
- Если вы создаете новые сертификаты из-за того, что старые сертификаты утеряны или истекли , вам нужно сначала отозвать старый
./revoke-full you
. В противном случае вы получите ошибку базы данных.
Создайте сертификат клиента you.key
и соответствующий сертификат you.crt
:
./build-key you
CommonName
Должен быть уникальным. Оставьте пароль пустым, если вы используете KDE, так как он не поддерживается на 10.10. Как и при создании сертификата сервера, подтвердите подпись сертификата и принятие изменений.
3. Настройте сервис OpenVPN
По умолчанию OpenVPN запускается от имени root при приеме соединений. Не очень хорошая идея, если услуга доступна из злого Интернета.
Создайте выделенного пользователя для OpenVPN, скажем openvpn
:
sudo useradd openvpn
Скопируйте файлы 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}
Скопируйте файл ta.key
также:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
Создайте файл /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
Установите соответствующие разрешения для этого, это не должно быть секретным, но я предпочитаю не пропускать детали конфигурации так:
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