Debian сертификаты openvpn
Описаний установки и настройки системы Open VPN в интернете очень много, но как правило все рекомендации сводятся или к общему описанию того как должна быть организована эта система или пошаговая настройка какого то конкретного дистрибутива Linux или BSD зачастую без толковых описаний своих действий.
Все что здесь будет описано выполнялось на Linux Debian Squeeze. Все действия я буду подробно описывать, что и зачем выполняется, в случае если кто то воспользуется этой статьей для настройки на другом дистрибутиве Linux или операционной системе.
- Первый этап это установка необходимых пакетов, в моем случае из стандартного репозитария: openvpn и openvpn-blacklist, с подтверждением всех необходимых зависимостей которые запросит программа aptitude.
- Вторым этапом установка программы tinyca, с помощью которой мы будем генерировать ключи и сертификаты для своего сервера и клиентов, так же я объясню почему предпочтительнее использование именно этой программы, а не встроенных средств пакета openvpn.
- В каталоге /etc/openvpn/ создаем каталог easy-rsa а в нем keys (тут будут находиться наши ключи):
mkdir /etc/openvpn/easy-rsa mkdir /etc/openvpn/easy-rsa/keys
- Генерируем 2048 битный ключ с помощью алгоритма Диффи Хеллмана в /etc/openvpn/easy-rsa/keys
cd /etc/openvpn/easy-rsa/keys openssl dhparam -out dh2048.pem 2048
- Следующим шагом будет генерация ключей с помощью tinyca, запускаем программу:
- Пример заполнения полей для создания открытого ключа:
tinyca - генерация основного сертификата
- Пример создания сертификатов для сервера и клиента:
tinyca - создание сертификатов для сервера и клиента
- Пример экспорта ключа для сервера и клиента - клик правой кнопкой мышки на сертификат или иконку вверху export:
tinyca - экспорт сертификатов в формате PKCS#12
- tinyca - экспорт сертификатов пароль основного ключа!
- Теперь копируем ключ сервера в /etc/openvpn/easy-rsa/keys и настраиваем /etc/openvpn/server.conf по примеру:
mode server tls-server daemon local 83.221.170.103 port 1194 proto tcp-server # - используемый тип устройства и номер dev tap0 #указываем файл с ключем сервера pkcs12 /etc/openvpn/easy-rsa/keys/server_crt.p12 #указываем файл Диффи Хельман dh /etc/openvpn/easy-rsa/keys/dh2048.pem #задаем IP-адрес сервера и маску подсети ifconfig 10.10.10.1 255.255.255.0 #### clients ip client-config-dir ccd push "route 10.10.10.0 255.255.255.0 10.10.10.1" keepalive 10 120 # пинг каждые 10 секунд для поддержания канала связи client-to-client ######### #auth MD5 # включаем шифрацию пакетов cipher BF-CBC keepalive 10 120 # сжатие трафика comp-lzo # максимум клиентов max-clients 100 # Не перечитывать ключи после получения # SIGUSR1 или ping-restart persist-key # Не закрывать и переоткрывать TUN\TAP # устройство, после получения # SIGUSR1 или ping-restart persist-tun # логгирование (не забудьте создать эту дирректорию /var/log/openvpn/) status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log # Уровень информации для отладки verb 5
- Выполняем команду разрешающую dh 2048
touch /usr/share/openssl-blacklist/blacklist.RSA-2048
- Разрешаем трансляцию ip адресов openvpn
mcedit /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1
- Фиксируем размер MTU не больше основного канала..
echo "1">/proc/sys/net/ipv4/ip_no_pmtu_disc
- Теперь необходимо прописать то, что будут получать клиенты по dhcp, когда пройдет авторизация, файлы должны лежать в /etc/openvpn/ccd
echo >klient.crt mcedit /etc/openvpn/ccd/klient.crt (имя файла - это имя common name сертификата в программе tinyca; по нему и происходит присвоение...) ### далее настройки в файле klient.crt # приcваиваем ip-адрес ifconfig-push 10.10.10.11 255.255.255.0 # присваиваем наш внутренний dns server push dhcp-option DNS 10.10.10.1 # присваиваем dns domain suffix - для win машин очень актуально push dhcp-option DOMAIN org # роутинг на сети центрального офиса push "route 10.10.10.0 255.255.255.0 10.10.10.1" # если необходимо то и на другие сети.. push "route 192.168.5.0 255.255.255.0 10.10.10.1"
- теперь запуск сервера в работу:
/etc/init.d/openvpn start
- следующий этап, настройка клиента openvpn.
Пример конфигурационного файла клиента:
client # Use the same setting as you are using on # the server. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ##;dev tap dev tap0 # Are we connecting to a TCP or # UDP server? Use the same setting as # on the server. #proto udp proto tcp # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. #remote my-server-1 1194 ##;remote my-server-2 1194 remote 83.221.170.103 1194 # Keep trying indefinitely to resolve the # host name of the OpenVPN server. Very useful # on machines which are not permanently connected # to the internet such as laptops. resolv-retry infinite # Most clients don't need to bind to # a specific local port number. nobind # Downgrade privileges after initialization (non-Windows only) #user nobody #group nobody # Try to preserve some state across restarts. persist-key persist-tun # If you are connecting through an # HTTP proxy to reach the actual OpenVPN # server, put the proxy server/IP and # port number here. See the man page # if your proxy server requires # authentication. #;http-proxy-retry # retry on connection failures #;http-proxy [proxy server] [proxy port #] # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. #;mute-replay-warnings # SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key dh dh2048.pem ### - сертификат клиента! pkcs12 client-crt.p12 # Verify server certificate by checking # that the certicate has the nsCertType # field set to "server". This is an # important precaution to protect against # a potential attack discussed here: # http://openvpn.net/howto.html#mitm # # To use this feature, you will need to generate # your server certificates with the nsCertType # field set to "server". The build-key-server # script in the easy-rsa folder will do this. ns-cert-type server # If a tls-auth key is used on the server # then every client must also have the key. #;tls-auth ta.key 1 # Select a cryptographic cipher. # If the cipher option is used on the server # then you must also specify it here. #;cipher x #cipher AES-128-CBC # Enable compression on the VPN link. # Don't enable this unless it is also # enabled in the server config file. comp-lzo # Set log file verbosity. verb 4 # Silence repeating messages mute 20
и на последок, канал внутри канала необходимо также настраивать, например если у вас MTU на внешнем 1500, значит внутренний канал VPN MTU не должен быть больше, а рекомендуемый параметр в данном случае 1496 или 1442 выставляется на клинете параметром tun-mtu
tun-mtu 1496
опыт показывает, что при соединении по 3G MTU канала как правило не выше 1400, чаще 962 - 1276 соответственно берем параметр внешнего канала и отнимаем 62. полученное значение присваиваем подключаемому клиенту.