В этой инструкции будет рассказано, как установить и настроить OpenVPN в ArchLinux.
Хотя OpenVPN для аутентификации пользователей/клиентов поддерживает логин/пароли, общие ключи (PSK), SSL сертификаты, я для себя выбрал SSL сертификаты, поскольку они превосходят другие методы аутентификации.
Как обычной, держите под рукой также страницу с официальной документацией. Давайте уже начнём!
1. Убеждаемся, что система обновлена
Залогинтесь на ваш VPS через SSH. Загрузим информацию о новых пакетах и обновимся с помощью pacman. Наберите следующее:
pacman -Syyu
2. Убеждаемся, что в системе поддерживается TUN
Чтобы проверить, работает ли на системе Arch Linux TUN, вы можете использовать следующую команду в одну строку. Если вы используете VPS (виртуальный частный сервер), то некоторые слои виртуализации такие как vServers и OpenVZ требует, чтобы TUN был включен на/из хостовой машине, поэтому если TUN не поддерживается, то свяжитесь со службой поддержки вашего хостинга перед тем, как продолжать.
test ! -c /dev/net/tun && echo openvpn requires tun support || echo tun включен
Если вы на выделенном сервере или используете виртуальный сервер KVM, ESXI или XEN убедитесь, что модуль CONFIG_TUN включён в ядре.
3. Установка OpenVPN
Для установки службы OpenVPN просто наберите:
pacman -S openvpn
4. Установка EASY-RSA
Далее мы установим пакет easy-rsa используя pacman из дополнительного репозитория и установим его в /root/easy-rsa:
pacman -S easy-rsa cp -prv /usr/share/easy-rsa /root/easy-rsa cd /root/easy-rsa cp vars{,.orig}
5. Установка значений по умолчанию в EASY-RSA
Установим значения по умолчанию для использования их скриптами. Чтобы сделать это отредактируйте:
vim ./vars
и добавьте:
KEY_SIZE= 2048 KEY_COUNTRY="TH" KEY_PROVINCE="ChonBuri" KEY_CITY="Pattaya" KEY_ORG="MiAlConsorcium" KEY_EMAIL="webmaster@your_domain_name.com"
Сохраните, закройте и экспортируйте файл:
source ./vars
После окончания экспорта удалите созданные ранее сертификаты:
./clean-all
6. Генерируем сертификат
Генерируем CA сертификат используя скрипт build-ca:
./build-ca
7. Генерируем сертификат сервера
Генерируем сертификат VPN сервера используя скрипт build-key-server:
./build-key-server server
- Sign the certificate? [y/n]:y
- 1 out of 1 certificate requests certified, commit? [y/n]y
8. Генерируем PEM сертификат DIFFIE-HELLMAN
Сгенерируйте PEM сертификат используя скрипт build-dh:
./build-dh
9. Генерируем клиентский сертификат
Генерируем клиентский сертификат используя скрипт build-key:
./build-key client
- Sign the certificate? [y/n]:y
- 1 out of 1 certificate requests certified, commit? [y/n]y
10. Генерируем (HMAC)
Сгенерируйте секретный, основанный на хеш, код сообщения авторизации (HMAC) используя:
openvpn --genkey --secret /root/easy-rsa/keys/ta.key
11. Распределение сертификатов
Скопируйте требуемые сертификаты на определённые машины/устройства (сервер или клиент).
- Публичный сертификат ca.crt нужен на всех серверах и клиентах;
- Приватный ключ ca.key является секретом и нужен только на машине, сгенерировавшей ключ;
- Серверу нужны server.crt, dh4096.pem (публичный), server.key и ta.key (приватный);
- Клиенту нужны client.crt (публичный), client.key и ta.key (приватный).
12. Размещение сертификатов и ключей на сервере
Поместите сертификаты и ключи в директорию /etc/openvpn/certs:
mkdir -p /etc/openvpn/certs cp -pv /root/easy-rsa/keys/{ca.{crt,key},имя-сервера.{crt,key},ta.key,dh2048.pem} /etc/openvpn/certs/
13. Настройка сервера OpenVPN
Конфигурация сервера OpenVPN будет в файле /etc/openvpn/server.conf поэтому откройте его для редактирования:
vim /etc/openvpn/server.conf
и скопируйте туда:
port 1194 proto udp dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server.crt key /etc/openvpn/certs/server.key dh /etc/openvpn/certs/dh2048.pem tls-auth /etc/openvpn/certs/ta.key 0 server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" client-to-client keepalive 1800 4000 cipher DES-EDE3-CBC # Triple-DES comp-lzo max-clients 10 user nobody group nobody persist-key persist-tun log /var/log/openvpn.log status /var/log/openvpn-status.log verb 5 mute 20 #client-config-dir ccd mode server tls-server
Сохраните и закройте файл.
Обратите внимание на строку server 10.8.0.0 255.255.255.0. Вам не нужно менять её под условия вашей сети. Дело в том, что VPN создаёт свою собственную сеть, со своими параметрами и эти значения используются только внутри новой локальной сети VPN.
14. Тестирование и запуск сервера OpenVPN
Протестировать настройки OpenVPN сервера можно примерно так:
openvpn /etc/openvpn/server.conf
и если всё в порядке запустите OpenVPN сервер и добавьте его в автозагрузку
systemctl start openvpn@server.service systemctl enable openvpn@server.service systemctl status openvpn@server
15. Включение перенаправления и IPTABLES
Создайте файл vpn_firewall.sh
vim /root/vpn_firewall.sh
B этот файл скопируйте следующее содержимое, отредактировав его под свои нужды. Обратите внимание на:
- PRIVATE=10.8.0.0/24 – измените подсеть в соответствии с вашими настройками. Если делали по этой инструкции, то менять ничего не нужно.
- имя интерфейса - ens3, у вас может быть другое значение, измените его на своё везде, где оно встречается
- в строке iptables -A INPUT -p tcp --dport 22 -j ACCEPT мы открываем доступ к порту 22, чтобы могли подключиться по SSH, если у вас нестандартный порт, то обязательно отредактируйте его, поскольку может получиться так, что после применения этого файла вы не сможете подключиться к вашему серверу по сети, добавьте нужно количество строк с необходимыми вам портами
#!/bin/sh echo 1 > /proc/sys/net/ipv4/ip_forward # Пример настройки файервола для OpenVPN. # Если нужно, сделайте соответствующие # изменения, сети вашего OpenVPN PRIVATE=10.8.0.0/24 # Петлевой адрес LOOP=127.0.0.1 # Удалить старые правила iptables # и временно заблокировать весь траффик. iptables -P OUTPUT DROP iptables -P INPUT DROP iptables -P FORWARD DROP iptables -F # Установление политик по умолчанию iptables -P OUTPUT ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP # Предотвращаем использование локальных адресов внешними пакетами iptables -A INPUT -i ens3 -s $LOOP -j DROP iptables -A FORWARD -i ens3 -s $LOOP -j DROP iptables -A INPUT -i ens3 -d $LOOP -j DROP iptables -A FORWARD -i ens3 -d $LOOP -j DROP # Всё, что приходит из Интернета, должно иметь реальный адрес iptables -A FORWARD -i ens3 -s 192.168.0.0/16 -j DROP iptables -A FORWARD -i ens3 -s 172.16.0.0/12 -j DROP iptables -A FORWARD -i ens3 -s 10.8.0.0/8 -j DROP iptables -A INPUT -i ens3 -s 192.168.0.0/16 -j DROP iptables -A INPUT -i ens3 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i ens3 -s 10.8.0.0/8 -j DROP # Блокируем исходящий NetBios (если в вашей подсети # есть машины с Windows). Это не окажет влияния на какой-либо # траффик NetBios, который идёт по VPN туннелю, но остановит # локальные машины Windows от самостоятельного # широковещания в Интернет. iptables -A FORWARD -p tcp --sport 137:139 -o ens3 -j DROP iptables -A FORWARD -p udp --sport 137:139 -o ens3 -j DROP iptables -A OUTPUT -p tcp --sport 137:139 -o ens3 -j DROP iptables -A OUTPUT -p udp --sport 137:139 -o ens3 -j DROP # Разрешаем локальные петли iptables -A INPUT -s $LOOP -j ACCEPT iptables -A INPUT -d $LOOP -j ACCEPT # Позволяем входящий пинг (можно отключить) # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Разрешаем такие службы как www и ssh (можно отключить) iptables -A INPUT -p tcp --dport http -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Разрешаем входящие пакеты OpenVPN # Дуплицируйте строку ниже для каждого # туннеля OpenVPN, меняя --dport n # для соответствия порту OpenVPN UDP. # # В OpenVPN номер порта # контролируется опцией --port n. # Если вы разместили эту опцию в конфигурационном # файле, вы можете удалить предшествующие '--' # # If you taking the stateful firewall # approach (see the OpenVPN HOWTO), # then comment out the line below. iptables -A INPUT -p udp --dport 1194 -j ACCEPT # Разрешить пакеты от устройств TUN/TAP. # Когда OpenVPN запущен в безопасном режиме, # он будет проверять подлинность пакетов до # их прибытия на интерфейс # tun или tap. Следовательно нет # необходимости добавлять сюда какие-либо фильтры, # если вы не хотите ограничить # тип пакетов, которые могут проходить # через туннель. iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT iptables -A FORWARD -i tap+ -j ACCEPT # Сохранить состояние подключений от локальной машины и частных сетей iptables -A OUTPUT -m state --state NEW -o ens3 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state NEW -o ens3 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Маскировка локальной сети iptables -t nat -A POSTROUTING -s $PRIVATE -o ens3 -j MASQUERADE
Проверить работу файла:
bash vpn_firewall.sh
ОБЯЗАТЕЛЬНО проверьте работу файла ДО добавления его в автозагрузку. Отключитесь и подключитесь по SSH чтобы убедиться, что всё действительно работает.
Для добавления файла в автозагрузску сделайте следующее.
Сделайте файл исполнимым:
chmod 755 /root/vpn_firewall.sh
Создайте файл
vim /etc/systemd/system/let-openvpn
Со следующим содержимым:
[Unit] Description=Обеспечение работы OpenVPN. [Service] ExecStart=/root/vpn_firewall.sh [Install] WantedBy=multi-user.target
И активируйте запуск при автозагрузке
systemctl enable let-openvpn
16. Настройка клиента OpenVPN
- разместите сгенерированные сертификаты vpn на клиентах/устройствах
- установите клиент OpenVPN на машние/устройствах
Для установки клиента OpenVPN:
pacman -S openvpn
Настройки даны исходя из расположения файлов здесь:
- /etc/openvpn/certs/ca.crt
- /etc/openvpn/certs/client.crt
- /etc/openvpn/certs/client.key
- /etc/openvpn/certs/ta.key
Создайте следующий конфигурационный файл client.conf:
touch /etc/openvpn/client.conf
откройте его для редактирования:
vim /etc/openvpn/client.conf
и скопируйте туда:
client remote 185.117.153.79 ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/client.crt key /etc/openvpn/certs/client.key cipher DES-EDE3-CBC comp-lzo yes dev tun proto udp tls-auth /etc/openvpn/certs/ta.key 1 nobind auth-nocache persist-key persist-tun user nobody group nogroup
Обратите внимание на строку remote 185.117.153.79 – вам обязательно нужно заменить это значение на IP вашего собственного VPN сервера!
Сохраните и закройте файл.
Добавьте группу
groupadd nogroup
Для запуска и проверки статуса:
systemctl start openvpn@client systemctl status openvpn@client
Для добавления в автозагрузку:
systemctl enable openvpn@client
17. Просмотр логов OpenVPN
Для наших настроек это делается так:
cat /var/log/openvpn.log cat /var/log/openvpn-status.log
18. Настройка входа в OpenVPN по логину и паролю
Принцип работы с подключением по логину и паролю следующий:
- OpenVPN не может проверять действительность логина и пароля;
- вместо проверки OpenVPN сохраняет присланные ей логин и пароль в файл со случайным именем в директорию, которую мы указали в tmp-dir (в нашем случае это /tmp).
- после этого OpenVPN запускает скрипт, который мы указали в auth-user-pass-verify (в нашем случае это /etc/openvpn/verify.sh), в качестве аргумента этому скрипту передаётся имя только что сохранённого файла с логином и паролем.
- если от скрипта получен код выхода 0, то OpenVPN авторизует клиента, если 1, то считает, что логин или пароль неверны.
- после этого OpenVPN удаляет временный файл.
Схема работы, мягко говоря, так себе. Поскольку предусматривает хранение паролей в открытом виде и на сервере и на клиенте…
Внесём изменения в конфигурационный файл сервера:
vim /etc/openvpn/server.conf
Добавим туда следующие строки:
auth-user-pass-verify /etc/openvpn/verify.sh via-file client-cert-not-required username-as-common-name tmp-dir /tmp script-security 2
Создаём файл
vim /etc/openvpn/verify.sh
копируем туда следующий код (можете придумать свой механизм аутентификации):
#!/bin/sh USERS=`cat /etc/openvpn/user.pass` for i in $USERS; do if [ "$i" = "`cat $1 | paste -sd ':' -`" ]; then exit 0 fi done echo "С таким паролем пользователей не найдено" exit 1
Делаем файл исполнимым:
chmod 755 /etc/openvpn/verify.sh
Файл с паролями /etc/openvpn/user.pass выглядит так:
user1:pass1 user2:pass2 ...
то есть идёт через пробел пара логин:пароль. Пароль находится в открытом виде!
В конфигурационный файл клиента добавляем такую строку:
auth-user-pass /etc/openvpn/pass.txt
и создаём соответственно файл pass.txt, где будет находится логин и пароль в таком виде:
username password
Примечание: Если в параметре auth-user-pass убрать путь к файлу, будет запрашиваться логин/пароль.
Полные конфигурационные файлы в моём случае. Для сервера:
port 1194 proto udp dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server.crt key /etc/openvpn/certs/server.key dh /etc/openvpn/certs/dh2048.pem #tls-auth /etc/openvpn/certs/ta.key 0 server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" client-to-client keepalive 1800 4000 cipher DES-EDE3-CBC # Triple-DES comp-lzo max-clients 10 user nobody group nobody persist-key persist-tun log /var/log/openvpn.log status /var/log/openvpn-status.log verb 5 mute 20 #client-config-dir ccd mode server tls-server auth-user-pass-verify /etc/openvpn/verify.sh via-file client-cert-not-required username-as-common-name tmp-dir /tmp script-security 2
Для клиента:
client remote 185.117.153.79 ca /etc/openvpn/certs/ca.crt #cert /etc/openvpn/certs/client.crt #key /etc/openvpn/certs/client.key cipher DES-EDE3-CBC comp-lzo yes dev tun proto udp #tls-auth /etc/openvpn/certs/ta.key 1 nobind auth-nocache persist-key persist-tun user nobody group nogroup auth-user-pass /etc/openvpn/pass.txt
Проверяем конфигурационный файл
openvpn /etc/openvpn/server.conf
Перезапускаем службу и проверяем её статус:
systemctl restart openvpn@server.service systemctl status openvpn@server
Близкие статьи
- Как настроить свой собственный почтовый сервер на Arch Linux (100%)
- Настройка SSH в BlackArch (57.7%)
- Установка MongoDB в BlackArch (57.7%)
- Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP8 и phpMyAdmin) в Arch Linux / BlackArch (57.7%)
- Настройка статического IP адреса в Arch Linux / BlackArch (57.7%)
- Установка BlackArch, часть четвёртая: Установка инструментов BlackArch (RANDOM - 50%)
Орган по сертификации
Надо какой-то пример на практике привести, зачем это все и как пользоваться. А так одна теоррия.
например, есть офис с интернетом на модеме, и есть клиенты - домашние компы и смартфоны - задача их свести в офисную локалку.
Я с этим согласен. Поэтому, когда я переводил статью об установке OpenVPN на Debian, я начал с ответов на вопросы, что такое VPN и чего позволяет достичь его использование.
Со статьёй для Arch Linux я поступил по-другому, потому что пользователи Arch, на мой взгляд, по определению более продвинуты в понимании работы сетей и ОС Linux. Т.е. для них эта информация была бы «водой».
Обидно про «теорию»: я собрал материал из нескольких источников, исправил косяки других авторов, переписал нерабочий скрипт для аутентификации по паролю, два раза проверил на своём VDS, чтобы убедиться, что всё точно работает – для меня это не теория.
Я понимаю, что вы имеете ввиду пример прикладного использования. Если бы я занимался настройкой корпоративной сети, то мог бы подробнее о чём-то таком рассказать. Но рассуждать о чём-то, что я не могу проверить, мне не хочется. Если доведётся решать прикладные задачи, связанные с VPN, то напишу об этом.
Где взять мануал на русском по блак арч ?
«Мануал чтобы стать хакером», такой? BlackArch — это Arch Linux + инструменты для пентестинга. Изучите основы работы Arch Linux, изучите инструменты (даже если они называются «Инструменты Kali Linux», в специализированных дистрибутивах используются одни и те же программы).
И самое важное: если изучать инструменты без понимания основ работы сети, серверов, приложений, то это мало что даст. То есть вообще-то правильный порядок такой:
1. Глубокое изучение IT, компьютерных сетей, работы операционных систем, работы (веб) приложений и служб, сетевых протоколов
2. Изучения основы выбранного дистрибутива — для Kali Linux это Debian, для BlackArch это Arch Linux, чтобы стать уверенным пользователем Linux и не теряться из-за ошибок «команда не найдена» и подобных.
3. Изучение инструментов с полным пониманием, какой аспекты сетей/ОС/приложений/служб/протоколов они эксплуатируют.
Здесь онлайн-книги по данным вопросам: https://hackware.ru/?page_id=1735
Здесь огромная подборка статей: https://hackware.ru/?page_id=10
А если вам «чтобы такое прочитать за пару вечеров, чтобы стать хакером», то это вам в телеграмм-каналы с копипастой и на Ютуб )))))) все школоло хакеры уже там.
Нет ссылок на скрипты, упоминания которых внезапно откудато взялись в тексте