Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
openvpn [2014/03/10 12:58] metallic [Настройка сервера] |
openvpn [2022/03/25 17:00] (текущий) |
||
---|---|---|---|
Строка 63: | Строка 63: | ||
Перед тем как выполнять какие-либо действия с сертификатами нужно загрузить переменные среды: | Перед тем как выполнять какие-либо действия с сертификатами нужно загрузить переменные среды: | ||
- | . ./vars | + | |
Запустим скрипт очистки сертификатов, | Запустим скрипт очистки сертификатов, | ||
- | ./clean-all | + | |
В результате должы появиться следующие файлы: | В результате должы появиться следующие файлы: | ||
Строка 79: | Строка 79: | ||
# ./build-ca | # ./build-ca | ||
+ | В результате у нас появятся конревой сертификат и корневой ключ, которым будут подписываться остальные сертификаты. Корневой ключ - это самый большой секрет, | ||
+ | |||
+ | Далее генерим сертификат сервера, | ||
+ | |||
+ | # ./ | ||
+ | |||
+ | Дальше ключ DH(Diffie Hellman): | ||
+ | |||
+ | # ./build-dh | ||
+ | |||
+ | Также в качестве дополнительной защиты(HMAC-firewall) сгенерим еще один ключик: | ||
+ | |||
+ | # openvpn --genkey --secret / | ||
+ | |||
+ | Осталось сгенерить клиентские сертификаты. Генерим такое кол-во, | ||
+ | |||
+ | ./build-key client1 | ||
+ | ./build-key client2 | ||
+ | ./build-key client3 | ||
+ | |||
+ | <note tip> | ||
+ | При генерации клиентских ключей можно дополнительно защитить их паролем на случай их кражи или потери. Вместо скрипта build-key нужно использовать build-key-pass, | ||
+ | </ | ||
+ | |||
+ | Конфигурационный файл сервера / | ||
+ | |||
+ | # Адрес на котором слушать, | ||
+ | local 7.7.7.7 | ||
+ | port 1194 | ||
+ | proto udp | ||
+ | dev tun | ||
+ | | ||
+ | # Корневой сертификат сервера | ||
+ | ca keys/ca.crt | ||
+ | # Сертификат сервера | ||
+ | cert keys/ | ||
+ | # Закрытый ключ сервера | ||
+ | key keys/ | ||
+ | # БД отозванных сертификатов, | ||
+ | #crl-verify / | ||
+ | # Статический ключ для дополнительной защиты(на стороне сервера вторая опция 0, на стороне клиента 1) | ||
+ | tls-auth keys/ta.key 0 | ||
+ | # Ну и ключ протокола DH | ||
+ | dh keys/ | ||
+ | | ||
+ | # Указываем диапазон виртуальных адресов, | ||
+ | server 192.168.0.0 255.255.255.0 | ||
+ | # Эта опция указывает на то, что нужно запоминать какие адреса выдавались каким клиентам, | ||
+ | ifconfig-pool-persist ipp.txt | ||
+ | # И опция указывающая на каталог с персональными настройками клиентов | ||
+ | client-config-dir ccd | ||
+ | | ||
+ | # Посылать пинги каждые 10 сек. и если в течении 60 сек. ни одного не вернулось, | ||
+ | keepalive 10 60 | ||
+ | | ||
+ | # Меняем дефолтный алгоритм симетричного шифрования на более суровый(на клиенте обязательно сделать тоже, иначе не заработает) | ||
+ | cipher AES-256-CBC | ||
+ | | ||
+ | # Включаем сжатие трафика и указываем максимальное кол-во клиентов | ||
+ | comp-lzo | ||
+ | max-clients 10 | ||
+ | | ||
+ | # Для повышения безопасности принуждаем сервер работать от имени непривелегированного пользователя | ||
+ | user nobody | ||
+ | group nogroup | ||
+ | | ||
+ | # Не перечитывать ключи и не выполнять up/down скрипты при получении SIGUSR1 или ping-restart | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | | ||
+ | # Настраиваем логирование, | ||
+ | status / | ||
+ | log-append | ||
+ | verb 3 | ||
+ | | ||
+ | # Ну и включаем интерфейс управления через telnet на локалхосте и порту 7505 | ||
+ | management localhost 7505 | ||
+ | |||
+ | Теперь создаем каталог для логов, запускаем сервер и проверяем, | ||
+ | |||
+ | # mkdir / | ||
+ | |||
+ | # / | ||
+ | [ ok ] Starting virtual private network daemon: server. | ||
+ | | ||
+ | # netstat -lnptu | grep 1194 | ||
+ | udp 0 0 7.7.7.7: | ||
+ | |||
+ | Чтобы лог-файл со временем не занял все место создадим такой файл / | ||
+ | |||
+ | / | ||
+ | daily | ||
+ | missingok | ||
+ | copytruncate | ||
+ | rotate 14 | ||
+ | compress | ||
+ | notifempty | ||
+ | } | ||
+ | |||
+ | И в заключении зададим клиенту client1 персональные настройки, | ||
+ | |||
+ | ifconfig-push 192.168.0.241 192.168.0.242 | ||
+ | push " | ||
+ | push "route 0.0.0.0 0.0.0.0" | ||
+ | |||
+ | Тут статически задан адрес клиента 192.168.0.241, | ||
+ | |||
+ | < | ||
+ | Адреса клиентов надо выбирать из этого пула: | ||
+ | |||
+ | [ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] | ||
+ | [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] | ||
+ | [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] | ||
+ | [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] | ||
+ | [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] | ||
+ | [101,102] [105,106] [109,110] [113,114] [117,118] | ||
+ | [121,122] [125,126] [129,130] [133,134] [137,138] | ||
+ | [141,142] [145,146] [149,150] [153,154] [157,158] | ||
+ | [161,162] [165,166] [169,170] [173,174] [177,178] | ||
+ | [181,182] [185,186] [189,190] [193,194] [197,198] | ||
+ | [201,202] [205,206] [209,210] [213,214] [217,218] | ||
+ | [221,222] [225,226] [229,230] [233,234] [237,238] | ||
+ | [241,242] [245,246] [249,250] [253,254] | ||
+ | </ | ||
===== Настройка клиента ===== | ===== Настройка клиента ===== | ||
+ | |||
+ | На стороне клиента также устанавливается OpenVPN. В данном случае в качестве клиента рассмотрим Windows. Устанавливаем OpenVPN с GUI и создаем каталог C:\Program Files\OpenVPN\config. В этом каталоге создаем подкаталог с именем клиента, | ||
+ | |||
+ | # Указываем что мы клиент, | ||
+ | # в этом случае клиент будет последовательно пытаться подключиться к серверам. | ||
+ | client | ||
+ | dev tun | ||
+ | proto udp | ||
+ | remote 7.7.7.7 1194 | ||
+ | nobind | ||
+ | # При указании этой дериктивы, | ||
+ | ; | ||
+ | | ||
+ | # Пытаться установить подключение бесконечно. Удобно на компьютерах с непостоянным доступом в интернет. | ||
+ | resolv-retry infinite | ||
+ | | ||
+ | # Аналогично, | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | | ||
+ | # Может понадобиться раскоментить, | ||
+ | ; | ||
+ | | ||
+ | # Посылать пинги каждые 10 сек. на протяжении минуты, | ||
+ | keepalive 10 60 | ||
+ | | ||
+ | # Пути к сертификатам и ключам относительно каталога config | ||
+ | ca " | ||
+ | cert " | ||
+ | key " | ||
+ | tls-auth " | ||
+ | | ||
+ | # Алгоритм шифрования данных | ||
+ | cipher AES-256-CBC | ||
+ | | ||
+ | # Включаем сжатие | ||
+ | comp-lzo | ||
+ | | ||
+ | # И уровень логирования | ||
+ | verb 3 | ||
+ | |||
+ | Теперь можно запустить GUI и попробовать подключиться. | ||
+ | |||
+ | ===== Отзыв сертификатов ===== | ||
+ | |||
+ | Иногда может случиться такая ситуация, | ||
+ | |||
+ | # . ./vars | ||
+ | | ||
+ | # ./ | ||
+ | Using configuration from / | ||
+ | Revoking Certificate 02. | ||
+ | Data Base Updated | ||
+ | Using configuration from / | ||
+ | client1.crt: | ||
+ | error 23 at 0 depth lookup: | ||
+ | |||
+ | Не смотря на то, что в последнем сообщении содержится "error 23", на самом деле это значит, | ||
+ | |||
+ | crl-verify / | ||
+ | |||
+ | И перезагрузить конфигурационный файл: | ||
+ | |||
+ | # / | ||
+ | |||
+ | С этого момента client1 подключиться не сможет. Если же он уже был подключен, | ||
+ | |||
+ | # telnet localhost 7505 | ||
+ | Trying 127.0.0.1... | ||
+ | Connected to localhost. | ||
+ | Escape character is ' | ||
+ | > | ||
+ | | ||
+ | kill client1 | ||
+ | SUCCESS: common name ' | ||
+ | | ||
+ | ===== Ссылки ===== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// |