В этой статье я хочу рассказать о новом VPN клиенте WireGuard®. Так уж совпало, что вышел релиз Debian 11 Bullseye с новым ядром 5.10, так что устанавливать WireGuard® мы будем на VPS, где уже установлен Debian 11.
Как заявлено на сайте https://wireguard.com он:
- простой и легкий в использовании;
- использует современную криптографию;
- имеет компактный, читаемый код, которые легко исследовать на уязвимости;
- высокопроизводительный;
- тщательно продуман и хорошо спроектирован.
В качестве сетевого экрана я буду использовать nftables. Несмотря на то, что nftables был включен в состав ядра Linux еще в 2014 году, его популярность стала расти лишь в последнее время, так как в мире Linux изменения происходят довольно медленно. Я думаю, что сейчас его можно можно смело рекомендовать для построения брандмауэра.
Содержание статьи
- Установка Wireguard на Debian 11 и мобильны телефон
- Настройка брандмауэра с использованием nftables
Установка WireGuard на Debian 11 Bullseye и мобильный телефон
Установка пакетов
Выполнять настройку и установку WireGuard будем от пользователя root. Для этого выполните команду, указанную ниже и введите пароль.
su -
Далее установим пакеты, необходимые для работы WireGuard и пакет для формирования QR-кода, который нам понадобится при настройке клиента WireGuard на мобильном телефоне.
apt install -y wireguard wireguard-dkms wireguard-tools qrencode
Настройка сервера Wireguard
Итак, если все прошло без ошибок, то можно приступать к настройке сервера. Давайте создадим папку для работы, ключи шифрования для нашего сервера и разрешим доступ к секретному ключу только пользователю root.
cd ~ mkdir -p wireguard && cd wireguard wg genkey | tee server.key | wg pubkey > server.pub chmod 600 server.key
Для запуска сервера нам необходимо создать для него конфигурационный файл, настроить права доступа и внести в него необходимые настройки. Для редактирования созданного файла конфигурации вы можете использовать редактор nano или любой другой, который вам нравится.
mkdir -p /etc/wireguard touch /etc/wireguard/wg0.conf chmod 600 /etc/wireguard/wg0.conf nano /etc/wireguard/wg0.conf
Внесите в конфигурационный файл следующие данные:
[Interface] Address = XXX.XXX.XXX.1/24 ListenPort = YYYYY SaveConfig = true PrivateKey = abcdefghijklmnopqrstuvwxyz0123456789=
Замените XXX на значения нужной вам подсети, а YYYYY на выбранный номер порта. Понятно, что адрес сети следует выбирать из следующих диапазонов — 10.0.0.0/8
, 172.16.0.0/8
и, если хотите, 192.168.0.0/16
, а номер порта выше диапазона известных и динамически назначаемых портов. Например, 10.20.30.1
и 54321
.
Возьмите закрытый ключ из файла ~/wireguard/server.key
, который мы создали ранее и сохраните наш файл конфигурации нажав Ctrl + X
.
После этого давайте проверим, что наш сервер работает. Выполните в консоли следующую команду:
wg-quick up wg0
Вы должны увидеть вывод подобный этому:
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.20.30.1/24 dev wg0 [#] ip link set mtu 1420 up dev wg0
Чтобы убедиться, что интерфейс wireguard поднялся и получил ip-адрес наберите команду ip a
. Вы должны увидеть что-то подобное:
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.20.30.1/24 scope global wg0 valid_lft forever preferred_lft forever
Таким образом мы убедились, что наш сервер работает и ожидает подключения клиентов.
Настройка клиента Wireguard на мобильном телефоне
Осталось создать конфигурационный файл для клиента WireGuard, который мы установим на наш мобильный телефон. Сказать клиент WireGuard вы можете по этим ссылкам.
Итак, приступим к созданию ключевой пары и конфигурационного файла для нашего клиента. Выполните в консоли следующие команды:
cd ~/wireguard wg genkey | tee client.key | wg pubkey > client.pub chmod 600 client.key touch client.conf nano client.conf
И внесите в созданный файл конфигурации такие данные:
[Interface] Address = XXX.XXX.XXX.XXX/24 PrivateKey = abcdefghijklmnopqrstuvwxyz0123456789= DNS = 8.8.8.8 [Peer] PublicKey = abcdefghijklmnopqrstuvwxyz0123456789= AllowedIPs = 0.0.0.0/0 Endpoint = ZZZ.ZZZ.ZZZ.ZZZ:YYYYY
Выберите ip-адрес для клиента с учетом сети сервера, например, 10.20.30.2
. Если вы на своем VPS сервере настроили службу DNS, то можете указать ее адрес, в противном случае — любой публичный DNS, например Google. В строке PrivateKey нужно вставить данные из созданного нами секретного ключа клиента — client.key, а в строке PublicKey открытый ключ нашего сервера — server.pub. В Endpoint вам необходимо указать ip-адрес вашего VPS сервера и порт, который вы выбрали при настройке сервера.
Ну и в заключение настройки необходимо добавить данные о нашем клиенте в конец конфигурационного файла сервера — nano /etc/wireguard/wg0.conf
. Секция [Peer] отвечает за описание клиента и их может быть несколько. В PublicKey мы указываем содержимое файла client.pub, а в AllowedIPs VPN адрес клиента. В нашем случае — это 10.20.30.2
.
[Interface] Address = XXX.XXX.XXX.1/24 ListenPort = YYYYY SaveConfig = true PrivateKey = abcdefghijklmnopqrstuvwxyz0123456789= [Peer] PublicKey = abcdefghijklmnopqrstuvwxyz0123456789= AllowedIPs = ZZZ.ZZZ.ZZZ.ZZZ/32
Итак, все настройки сделаны. Осталось лишь сформировать из клиентского файла конфигурации QR-код для удобной настройки мобильного приложения на телефоне. Тут нам и пригодится установленный ранее пакет qrencode. Приступим:
qrencode -t ansiutf8 < ~/wireguard/client.conf
В результате, все что нам нужно сделать для настройки мобильного приложения — это считать этот QR код.
Обратите внимание, что в конфигурационном файле, на основе которого сформирован QR-код, содержится секретный ключ, а следовательно с ним нужно обращаться с соблюдением правил безопасности. Не показывайте его посторонним и не пересылайте по открытым каналам связи!
Настройка сетевого экрана на сервере
А вот этим мы займемся в следующей статье. Я покажу конфигурацию nftables для VPS которую вы сможете изменить под свои потребности.
Как всегда, готов обсудить с вами эту статью и ответить на ваши вопросы. Удачи.