Безопасный и минималистичный менеджер wifi-подключений

Описание проблемы

Под Linux существует довольно скудное кол-во готовых решений по управлению Wifi-соединениями. Самые популярные из них - Network-manager и Wicd. Первый вариант обладает огромным функционалом, который не всегда нужен и иногда довольно непредсказуемо себя ведёт; второй более минималистичен, но обделён жизненно необходимыми функциями (нет поддержки VPN, весьма странно ведёт себя реконнект).
Однако существует огромное кол-во консольных вариантов с минимальными зависимостями, которые в связке работают весьма неплохо, но ими не всегда удобно управлять по отдельности. Именно поэтому эта проблема решилась написанием небольшого скрипта, который объединяет всё воедино.

Перед каждым новым соединением с wifi-точкой скрипт minsecwifi меняет MAC-адрес wifi-устройства на случайный, активирует устройство, пробует подключиться к указанным в конфиге точкам доступа, получает по DHCP IP-адрес, прописывает указанные в конфиге адреса DNS-серверов и соединяется с VPN-сервером.

Установка

Для запуска скрипта необходимо поставить следующие пакеты, скачать репозиторий со скриптом и запустить инсталлер (если нет необходимости ставить скрипт в систему глобально, то запуск install.sh нужно опустить):

$ apt-get install openvpn wpasupplicant macchanger rfkill
$ git clone https://github.com/cryptopunks/minsecwifi && cd minsecwifi
$ sudo ./install.sh

Настройка конфига minsecwifi

На данный момент конфиг скрипта состоит из нескольких полей описывающих интерфейс устройства, путь к конфигу wps_supplicant.conf, путь к конфигу openvpn и адресам используемых DNS-серверов. Все доступные параметры приведены в файле minsecwifi.conf.sample.

Либо просмотреть их можно выполнив:

$ minsecwifi --example-minsecwifi
# Wifi device (run `ifconfig -a`)
WIFI_DEV="wlp3s0"
# Wpa_supplicant configuration file
WPA_CONF="/etc/wpa_supplicant/wpa_supplicant.conf"
# DNS-servers
DNS="nameserver 208.67.222.222\nnameserver 208.67.220.220"
# OpenVPN configuration file (for client)
OVPN_CONF="/etc/openvpn/client.ovpn"
# for run to all services (argument -r)
START_SEQUENCE="killallprocess unblock interface_down change_mac interface_up fixperm connect_hotspot get_dhcp_address rewrite_dns connect_vpn"

Копируем пример конфигурационного файла в систему (напомню что скриптом можно пользоваться и локально, тогда никаких /etc/minsecwifi.conf - конфиг должен лежать локально в директории с репозиторием ./minsecwifi --example-minsecwifi > minsecwifi.conf ):

$ minsecwifi --example-minsecwifi | sudo tee --append /etc/minsecwifi.conf

Редактируем его командой:

$ sudo minsecwifi -em

Настройка wpa_supplicant

Настройка wpa_supplicant сводится к довольно простому конфигу вида:

network={
    ssid="access point 1"
        psk="password"
}
network={
        ssid="access point 2"
        psk="password"
}

он обычно лежит в /etc/wpa_supplicant/wpa_supplicant.conf.

Создать конфиг с примером можно следующей командой:

$ minsecwifi --example-wpasupplicant | sudo tee --append /etc/wpa_supplicant/wpa_supplicant.conf

Рекомендуется выставить правильные права доступа к конфигу, т.к. прочитав этот файл можно получить пароли от используемых вами wifi-точек:

$ sudo minsecwifi --fix-permissions

Использование minsecwifi

Запускаем без аргументов, чтобы ознакомиться с возможностями:

$ minsecwifi
Usage:
./minsecwifi [OPTION] 
  -s, --scan                    scan networks
  -r, --run                     run all services 
                                (variable START_SEQUENCE in minsecwifi.conf)
  -k, --killall                 kill all services
  -ew, --edit-wpasupplicant     edit wpa_supplicant.conf
  -em, --edit-minsecwifi        edit minsecwifi.conf
  -ub, --unblock                unblock wifi adaptor
  -iu, --interface-up           wifi interface down
  -id, --interface-down         wifi interface up
  -cm, --change-mac             change mac address
  -ch, --connect-hotspot        connect to hotspot
  -gd, --get-dhcp               get dhcp address
  -rd, --rewrite-dns            rewrite dns servers
  -cv, --connect-vpn            connect to vpn server
  -xw, --example-wpasupplicant  show example config for wpa_supplicant
  -xm, --example-minsecwifi     show example config for minsecwifi
  -fp, --fix-permissions        fix permissions for wpa_supplicant.conf

Сканируем сети:

$ sudo minsecwifi -s

редактируем конфиг, дописав новую точку доступа и пароль к ней:

$ sudo minsecwifi -ew

Подключаемся если необходимо пошагово, либо используем ключ -r, который запускает последовательно действия описанные в переменной конфига START_SEQUENCE:

$ sudo minsecwifi -r

По умолчанию переменная START_SEQUENCE просит minsecwifi запущенным с ключом -r выполнить последовательно следующие действия:

  • убить предыдущие процессы wpa_supplicant/openvpn;
  • произвести unlock устройства;
  • выключить интерфейс;
  • поменять MAC-адрес устройства на случайный;
  • поднять интерфейс;
  • изменить права доступа к wpa_supplicant.conf;
  • подключиться к точки доступа;
  • получить по DHCP адрес;
  • перезаписать DNS-сервера и залочить для перезаписи /etc/resolv.conf;
  • подключиться к vpn.

В заключении

Следите за обновлениями и выполняйте периодически git pull в директории с проектом. Если скрипт установлен в систему глобально, то не забывайте повторно выполнять sudo ./install.sh для перезаписи старого скрипта новым.
Для удаления скрипта из системы используйте sudo ./uninstall.sh.
Предложения по улучшению и багрепорты принимаются.