- Как установить и настроить OpenVPN в ArchLinux / BlackArch
- 1. Убеждаемся, что система обновлена
- 2. Убеждаемся, что в системе поддерживается TUN
- 3. Установка OpenVPN
- 4. Установка EASY-RSA
- 5. Установка значений по умолчанию в EASY-RSA
- 6. Генерируем сертификат
- 7. Генерируем сертификат сервера
- 8. Генерируем PEM сертификат DIFFIE-HELLMAN
- 9. Генерируем клиентский сертификат
- 10. Генерируем (HMAC)
- 11. Распределение сертификатов
- 12. Размещение сертификатов и ключей на сервере
- 13. Настройка сервера OpenVPN
- 14. Тестирование и запуск сервера OpenVPN
- 15. Включение перенаправления и IPTABLES
Как установить и настроить OpenVPN в ArchLinux / BlackArch
В этой инструкции будет рассказано, как установить и настроить OpenVPN в ArchLinux.
Хотя OpenVPN для аутентификации пользователей/клиентов поддерживает логин/пароли, общие ключи (PSK), SSL сертификаты, я для себя выбрал SSL сертификаты, поскольку они превосходят другие методы аутентификации.
Как обычной, держите под рукой также страницу с официальной документацией. Давайте уже начнём!
1. Убеждаемся, что система обновлена
Залогинтесь на ваш VPS через SSH. Загрузим информацию о новых пакетах и обновимся с помощью pacman. Наберите следующее:
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 просто наберите:
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
5. Установка значений по умолчанию в EASY-RSA
Установим значения по умолчанию для использования их скриптами. Чтобы сделать это отредактируйте:
KEY_SIZE= 2048 KEY_COUNTRY="TH" KEY_PROVINCE="ChonBuri" KEY_CITY="Pattaya" KEY_ORG="MiAlConsorcium" KEY_EMAIL="webmaster@your_domain_name.com"
Сохраните, закройте и экспортируйте файл:
После окончания экспорта удалите созданные ранее сертификаты:
6. Генерируем сертификат
Генерируем CA сертификат используя скрипт build-ca:
7. Генерируем сертификат сервера
Генерируем сертификат VPN сервера используя скрипт build-key-server:
8. Генерируем PEM сертификат DIFFIE-HELLMAN
Сгенерируйте PEM сертификат используя скрипт build-dh:
9. Генерируем клиентский сертификат
Генерируем клиентский сертификат используя скрипт build-key:
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/,имя-сервера.,ta.key,dh2048.pem> /etc/openvpn/certs/
13. Настройка сервера OpenVPN
Конфигурация сервера OpenVPN будет в файле /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
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
ОБЯЗАТЕЛЬНО проверьте работу файла ДО добавления его в автозагрузку. Отключитесь и подключитесь по SSH чтобы убедиться, что всё действительно работает.
Для добавления файла в автозагрузску сделайте следующее.