Поиск по сайту:

Как установить беспроводную точку доступа с закрытой страницей в Linux с помощью CoovaChilli


На этой странице

  1. Предпосылки
  2. Установите зависимости CoovaChilli
  3. Установить hostapd
  4. Настроить hostapd
  5. Свободный радиус
  6. Настройка таблиц FreeRadius MySQL
  7. Установить Haserl
  8. Установить CoovaChilli
  9. Настройка CoovaChilli
  10. Тестирование адаптивного портала
  11. Управление пользователями

Цель этой статьи — продемонстрировать, как вы можете превратить компьютер или ноутбук на базе Linux в беспроводную точку доступа, где пользователи могут проходить аутентификацию через авторизованную страницу портала. Для этой задачи основным программным обеспечением контроллера будет CoovaChilli. Это программное обеспечение является идеальным решением для управления точками доступа в отелях, ресторанах, супермаркетах, парках и в любом месте, где есть Wi-Fi Интернет.

Предпосылки

  • Распределение Linux. В этой статье я буду использовать Fedora 20. Более поздние версии 21/22 должны работать нормально.
  • Библиотеки разработки, необходимые для компиляции пакетов с исходным кодом.
  • Рабочая установка сервера MySQL.
  • Проводное сетевое устройство, подключенное к Интернету.
  • Возможность запускать команды sudo.
  • Беспроводное сетевое устройство, поддерживающее режим точки доступа. Чтобы узнать, поддерживает ли ваше беспроводное устройство режим точки доступа, запустите:
    sudo iw phy |grep -A 5 -i Поддерживаемые режимы интерфейса | грэп *

Установите зависимости CoovaChilli

yum install libnl3-devel libtalloc-devel iptables

Установить hostapd

Hostapd позволяет вашему компьютеру функционировать как точка доступа (AP) WPA/WPA2 Authenticator. Другие функции включают в себя службы аутентификации Radius, хотя здесь мы их не используем.

Большинство дистрибутивов Linux (включая Fedora) имеют предварительно упакованные версии hostapd и могут быть установлены с помощью программного обеспечения для управления пакетами. Например, в Fedora, CentOS и других дистрибутивах Linux на базе Red-Hat этот пакет будет установлен простой командой:

yum install hostapd

Однако для установки последней версии hostpad нам потребуется скачать и скомпилировать исходники. Это можно легко сделать следующим образом:

cd /usr/src
sudo git clone git://w1.fi/hostap.git

Это загрузит как hostapd демон сервера, так и исходники wpa_supplicant. Нас интересует первое, поэтому перейдем к исходникам hostapd:

cd hostap/hostapd

Hostapd не имеет команды configure, поэтому перед компиляцией hostapd нам нужно изменить префикс установки. Быстрый и простой способ изменить каталог установки по умолчанию — использовать sed:

sed -i “s:export BINDIR ?= /usr/local/bin/:export BINDIR ?= /usr/sbin:g” Makefile

Затем скопируйте файл конфигурации по умолчанию:

cp -v defconfig .config

ну нужно изменить некоторые значения по умолчанию в файле конфигурации:

vim .config

Раскомментируйте следующие параметры:

CONFIG_LIBNL32=y # Use libnl 3.2 libraries
CONFIG_IEEE80211N=y # Enables IEEE 802.11n support
CONFIG_WNM=y # Enables Network Management support
CONFIG_IEEE80211AC=y # Enables IEEE 802.11ac support
CONFIG_DEBUG_FILE=y # Support for writing debug log to file

Запускаем make и устанавливаем:

make
sudo make install

Чтобы проверить, правильно ли установлен hostapd, запустите:

hostapd -v

Приведенная выше команда покажет вам версию и кредиты

Настроить hostapd

Создайте файл конфигурации hostapd, используя пример файла:

sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.conf

Измените следующие параметры в файле hostapd.conf:

driver=nl80211
interface=wlan0 # Change this to your wireless device
ssid=KAMPALA-3 # Change this to your SSID
hw_mode=g
channel=6 # Enter your desired channel
ieee80211n=1 # Enable IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

Создайте каталог для сокетов hostapd:

sudo mkdir /var/run/hostapd

Установите статус интерфейса WiFi на UP и разблокируйте Wifi, если программный переключатель включен:

sudo rfkill unblock wifi
sudo ip link set dev wlan0 up

Протестируйте и запустите hostapd:

sudo hostapd -d /etc/hostapd/hostapd.conf

Если все пойдет хорошо, демон hostapd должен запуститься, а не завершить работу.

Затем создайте служебный файл systemd. К настоящему времени большинство дистрибутивов Linux используют systemd для управления службами:

sudo vim /etc/systemd/system/hostapd.service
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=dnsmasq.service

[Service]
Type=forking
PIDFile=/var/run/hostapd.pid
ExecStartPre=/bin/mkdir -p /var/run/hostapd
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid -B

[Install]
WantedBy=multi-user.target

Включите автоматический запуск службы при загрузке:

sudo systemctl enable hostapd.service

Фрирадиус

Поскольку нам потребуется, чтобы клиенты аутентифицировались перед доступом в Интернет, необходима установка сервера RADIUS. FreeRadius — это радиус-сервер с открытым исходным кодом. Его также можно установить с помощью вашего любимого менеджера пакетов Linux, такого как yum или apt. Но так как мы хотим установить последнюю версию, то компилируем из исходников.

Скачать бесплатнорадиус:

cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2

Распакуйте исходники и измените место установки:

sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9

Запустите скрипт configure, убедившись, что вы используете правильный префикс и путь к библиотеке для вашей установки:

sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=no

Приступаем к компиляции и установке:

sudo make
sudo make install

Если вы столкнулись со следующей ошибкой

mkdir: невозможно создать каталог ‘/etc/raddb/’: файл существует
сделать: *** [/etc/raddb/] Ошибка 1

Запустите следующее, чтобы исправить это:

rmdir /etc/raddb
make install && make install

Добавьте группу и пользователя radiusd:

sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin

Настроить таблицы FreeRadius MySQL

Запустите сервер MySQL, если он не запущен. Как упоминалось выше, процесс инициализации осуществляется через systemd, поэтому:

sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.service

Убедитесь, что служба запускается даже при загрузке:

sudo systemctl enable mysqld.service

Создайте базу данных радиуса:

mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] create radius

Создайте таблицы базы данных, используя схему MySQL:

sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

Создайте пользователя радиуса MySQL и установите привилегии для базы данных радиуса:

mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';

Настройте модуль радиуса SQL:

sudo vim /etc/raddb/mods-available/sql

Раскомментируйте и/или измените следующие параметры:

driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "FREERADIUS_DB_USER"
password = "FREERADIUS_DB_PASS"
read_clients = yes

Добавьте счетчики Chilispot SQL:

sudo vim /etc/raddb/mods-available/sqlcounter

Добавьте эту строку в конец вышеуказанного файла:

$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.conf

Следующая ссылка sql, sqlcounter на доступные модули:

sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql
sudo ln -s /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-enabled/sqlcounter

Настройка клиентов радиуса

sudo vim /etc/raddb/clients.conf

Измените пароль на пароль, использованный выше для базы данных FreeRadius MySQL:

secret = [FREERADIUS_DB_PASS]

Настройте радиус-сервер:

sudo vim /etc/raddb/radiusd.conf

В разделе безопасности измените имя пользователя и группы на имя, созданное во время установки:

user = radiusd
group = radiusd
allow_vulnerable_openssl = yes
IMPORTANT: Don't do this. You really should update to recent versions of OpenSSL

В разделе создания экземпляров (рядом с строкой 728) добавьте следующие модули счетчиков:

chillispot_max_bytes
noresetcounter

Настройте виртуальный сервер по умолчанию в доступных сайтах:

sudo vim /etc/raddb/sites-available/default

В разделе авторизации:

Прокомментируйте следующее:

#filter_username

Раскомментируйте следующее:

auth_log
unix


Измените следующее:

'-sql' to sql

Добавьте следующее в конце раздела авторизации:

chillispot_max_bytes
noresetcounter

Далее в разделе бухгалтерского учета раскомментируйте следующее:

radutmp

Измените следующее:

'-sql' to sql

Далее в разделе сеанса раскомментируйте следующее:

radutmp
sql

Далее в разделе post-auth раскомментируйте следующее:

reply_log

Измените следующее:

'-sql' to sql

Настройте виртуальный сервер запросов внутреннего туннеля в доступных сайтах:

sudo vim /etc/raddb/sites-available/inner-tunnel

В разделе авторизации измените следующее:

'-sql' to sql

Добавьте следующее в конце раздела авторизации:

chillispot_max_bytes
noresetcounter

Затем в разделе сеанса раскомментируйте следующее:

sql

Далее в разделе post-auth раскомментируйте следующее:

reply_log

Измените следующее:

'-sql' to sql

Добавьте следующие счетчики MySQL для Chillispot:

sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf
sqlcounter chillispot_max_bytes {
counter_name = Max-Total-Octets
check_name = ChilliSpot-Max-Total-Octets
reply_name = ChilliSpot-Max-Total-Octets
reply_message = "You have reached your bandwidth limit"
sql_module_instance = sql
key = User-Name
reset = never
query = "SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets)),0) FROM radacct WHERE username = '%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%%b'"
}

Измените владельца каталогов конфигурации и журналов:

sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius

Создайте пользователя-администратора в базе данных radius MySQL:

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

Начальный радиус для инициализации и тестирования

sudo /usr/sbin/radiusd -X

Откройте новое окно терминала для проверки соединений:

radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]

Если вы получили сообщение, подобное этому, значит, вы выполнили минимальную и необходимую настройку радиуса для следующих шагов:

Получен идентификатор доступа 174 из 127.0.0.1:1812 в 0.0.0.0:0 длиной 20

Но прежде чем оставить радиус в стороне, создайте служебный файл systemd для вашего сервера радиуса:

sudo vim /etc/systemd/system/radiusd.service
[Unit]
Description=FreeRADIUS high performance RADIUS server.
After=mysqld.service syslog.target network.target
[Service]
Type=forking
ExecStartPre=-/bin/mkdir /var/log/radius
ExecStartPre=-/bin/mkdir /var/run/radiusd
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/log/radius
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
ExecStartPre=/usr/sbin/radiusd -C
ExecStart=/usr/sbin/radiusd -d /etc/raddb
ExecReload=/usr/sbin/radiusd -C
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

Включите автоматический запуск службы при загрузке:

sudo systemctl enable radiusd.service

Установить Хазерл

Haserl необходим для встроенного минипортала, включенного в CoovaChilli.

Скачать Хазерл:

cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz

Распакуйте архив:

sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/

Скомпилируйте и установите:

./configure --prefix=/usr –libdir=/usr/lib64

(Убедитесь, что вы выбрали правильную библиотеку или нужный префикс)

make
sudo make install

Установить CoovaChilli

CoovaChilli — это программное обеспечение Captive Portal с открытым исходным кодом. Это началось с устаревшего проекта чили. После завершения установки и настройки coovachilli вы сможете перенаправить своих клиентов точки доступа Wi-Fi на страницу входа, то есть на авторизованный портал, где они могут войти в систему и получить доступ к Интернету.

Загрузите последние исходники coovachilli:

cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git

Настройте и скомпилируйте coova:

cd /usr/src/coova-chilli
sh bootstrap
./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/etc --enable-miniportal --with-openssl --enable-libjson --enable-useragent --enable-sessionstate --enable-sessionid --enable-chilliredir --enable-binstatusfile --enable-statusfile --disable-static --enable-shared --enable-largelimits --enable-proxyvsa --enable-chilliproxy --enable-chilliradsec --with-poll

(Убедитесь, что вы выбрали правильную библиотеку или нужный префикс)

make
sudo make install

Настроить CoovaChilli

Все файлы конфигурации находятся в папке: /etc/chilli. Вам нужно будет создать файл конфигурации с модификациями ваших сайтов следующим образом:

sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config

Измените следующие параметры в соответствии со своей средой:

HS_WANIF=eth0 # WAN Interface toward the Internet
HS_LANIF=wlan0 # Subscriber Interface for client devices
HS_NETWORK=10.1.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=10.1.0.1 # HotSpot IP Address (on subscriber network)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Set to be your RADIUS shared secret
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Set to be your UAM secret
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]

Добавьте скрипт Chili ipup.sh. Целью этих сценариев является подготовка системы к работе в качестве маршрутизатора. Вы также можете добавить другие команды, например. Настройка шлюза.

sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# Allow IP masquerading through this box
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ВАЖНО: Измените интернет-устройство на правильное.

Сделать скрипт исполняемым:

sudo chmod 755 /etc/chilli/ipup.sh

Включите coovachilli, чтобы он запускался во время загрузки:

sudo systemctl enable chilli

Начать кувачилли:

sudo systemctl start chilli

Тестирование вашего авторизованного портала

Прежде чем приступить к тестированию, убедитесь, что у вас есть локальный доступ к Интернету.


Затем с помощью беспроводного клиента, например смартфона или ноутбука, откройте свой любимый веб-браузер. Перейдите на любой URL/веб-сайт по вашему выбору.

Если вы выполнили описанные выше шаги, вы будете перенаправлены на страницу авторизованного портала, как показано ниже:

Управление пользователями

Чтобы добавить пользователей, чтобы они могли выходить в Интернет через вашу точку доступа, выполните следующую команду для каждого пользователя. При желании вы можете автоматизировать его с помощью скрипта.

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

Вот и все!

Подписывайтесь на меня: @jzikusooka