OpenVPN — на сегодня одна из лучших технологий для постройки безопасной VPN-сети с шифрованием, и клиентами для всех популярных ОС.
Здесь я расскажу как настроить OpenVPN сервер на Debian 9, подключить клиент, и пустить через него весь клиентский траффик.
Все действия будем производить от рута, для чего пишем в терминал:
su
Теперь, с помощью менеджера пакетов устанавливаем openvpn
apt-get install openvpn
Создание сертификатов
Переходим к настройке. Конфиги лежат в /etc/openvpn, поэтому идём туда
cd /etc/openvpn
Сперва, сгенерируем ключи с помощью easy-rsa. Для этого создадим директорию сразу со ссылками на необходимые скрипты:
make-cadir rsa
cd rsa
Прежде всего — копируем openssl.cnf последней доступной версии, в моем случае это openssl-1.0.0.cnf, в директорию rsa, и называем его openssl.cnf:
cp /etc/openvpn/rsa/openssl-1.0.0.cnf /etc/openvpn/rsa/openssl.cnf
Далее — редактируем конфигурационный файл 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
Теперь создаем корневой сертификат:
./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
Внимание! При перезагрузке ОС — правила фаерволла не сохраняются. Поэтому, после настройки фаерволла необходимо сохранить правила в файл:
iptables-save > /etc/iptables.rules
Сохранили, теперь их нужно загружать при загрузке операционной системы. Для этого — дописываем необходимые стройки в конец файла с конфигом сети:
echo -e "\npost-up /sbin/iptables-restore < /etc/iptables.rules" >> /etc/network/interfaces
Уведомление: ovpn compiler | Уютный бложек Томаса
Уведомление: ovpn generator | Уютный бложек Томаса