Настройка OpenVPN сервера на Debian 9

OpenVPN — на сегодня одна из лучших технологий для постройки безопасной VPN-сети с шифрованием, и клиентами для всех популярных ОС.

Здесь я расскажу как настроить OpenVPN сервер на Debian 9, подключить клиент, и пустить через него весь клиентский траффик.

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

su

Теперь, с помощью менеджера пакетов устанавливаем openvpn

apt-get install openvpn

Создание сертификатов

Переходим к настройке. Конфиги лежат в /etc/openvpn, поэтому идём туда

cd /etc/openvpn

Сперва, сгенерируем ключи с помощью easy-rsa. Для этого создадим директорию сразу со ссылками на необходимые скрипты:

make-cadir rsa
cd rsa

Далее — редактируем конфигурационный файл vars

nano vars

В файле редактируем эти строки:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

Сразу же под ними вставляем ещё одну строку:

export KEY_ALTNAMES="something"

Также необходимо раскомментировать строку с параметром KEY_CN, в которую лучше всего вписать свой домен.

export KEY_CN="thomas.pp.ua"

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

Сохраняем файл с помщью Ctrl+x, y, enter. И подгружаем переменные из файла:

. vars

Выполняем очистку от старых сертификатов (на всякий случай):

./clean-all

Дальше нам нужен создать корневой сертификат, но перед этим скопировать openssl.cnf последней доступной версии в директорию rsa:

cp /etc/openvpn/rsa/openssl-1.0.0.cnf /etc/openvpn/rsa/openssl.cnf

Теперь создаем корневой сертификат:

./build-ca

Дальше — создаем ключ и сертификат сервера:

./build-key-server server

После этого создаем сертификат и ключ для клиента:

./build-key client

Следующий шаг — создать ключ Диффи-Хеллмана:

./build-dh

Теперь создаем ключ для аутентификации tls:

openvpn --genkey --secret /etc/openvpn/ta.key

Дальше — копируем свежесгенерированные серверные ключи в директорию с конфигурацией OpenVPN:

cp keys/ca.crt keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/

И для безопасности выставляем права 600 на эти файлы:

chmod 0600 /etc/openvpn/ca.crt /etc/openvpn/server.crt /etc/openvpn/server.key /etc/openvpn/dh2048.pem /etc/openvpn/ta.key

А клиентские файлы (client.crt, client.key, ca.crt, ta.key) — скопируйте себе на компьютер.

Настройка сервера

Копируем и разархивируем стандартную конфигурацию OpenVPN в /etc/openvpn/:

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

Далее — правим стандартный конфиг, чтобы внести свои настройки:

nano /etc/openvpn/server.conf

Нас интересуют параметры

port 225

Либо любой другой порт. Также укажем путь к серверным ключам и сертификатам (они должны быть в /etc/openvpn/, иначе нужно указывать полный путь):

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

Также нужно найти и раскомментировать строку:

push «redirect-gateway def1 bypass-dhcp»

Указываем DNS-серверы для клиентов:

push «dhcp-option DNS 213.183.57.55»
push «dhcp-option DNS 87.98.175.85»

Для настройки tls — находим и раскомментируем

tls-auth ta.key 0

В конфиге указан шифр cipher AES-256-CBC. Они избыточен, для снижения нагрузки на оборудование (особенно актуально если слабый сервер, или клиент — домашний роутер) — редактируем:

cipher AES-256-CBC

И сразу под этим снизу добавляем строку

auth SHA512

И в конце файла добавляем строку

tls-version-min 1.2

Также, OpenVPN по умолчанию работает от root. Чтобы повысить безопасность — не стоит использовать его от рута, поэтому раскомментируем строки:

user nobody
group nogroup

И добавим логирование происходящего:

log /var/log/openvpn.log

Готово! Можно сохранять конфиг. А также включать и перезапускать службу OpenVPN:

systemctl enable openvpn
service openvpn restart

Настройка маршрутизации

Для того, чтобы клиент мог выходить в сеть через OpenVPN сервер — недостаточно просто настроить OpenVPN сервер. Нужно также разрешить Debian’у форвардить траффик, и добавить пару правил в фаерволл, для маршрутизации между сетями VPN и реальной.

Добавляем строку в /etc/sysctl.conf, разрешающую форвардить траффик:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

И загружаем новый конфиг с этим правилом:

sysctl -p

Теперь добавляем правила в фаерволл:

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Здесь, возможно, придётся что-то поменять. Чтобы очистить фаерволл полностью — можно воспользоваться iptables -F и добавить правила заново.
tun0 — сетевой интерфейс сервера OpenVPN (можно посмотреть имя с помощью ip a)
eth0 — реальный сетевой интерфейс, через который Debian ходит в интернет
10.8.0.0/24 — подсеть, используемая для OpenVPN, указывается в /etc/openvpn/server.conf

Внимание! При перезагрузке ОС — правила фаерволла не сохраняются. О том, как их сохранить — я напишу позже.

Об авторе Thomas

Как вы лодку назовете, так на ней и напишите
Запись опубликована в рубрике linux. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *