Как установить беспроводную точку доступа с закрытой страницей в Linux с помощью CoovaChilli
На этой странице
- Предпосылки
- Установите зависимости CoovaChilli
- Установить hostapd
- Настроить hostapd
- Свободный радиус
- Настройка таблиц FreeRadius MySQL
- Установить Haserl
- Установить CoovaChilli
- Настройка CoovaChilli
- Тестирование адаптивного портала
- Управление пользователями
Цель этой статьи — продемонстрировать, как вы можете превратить компьютер или ноутбук на базе 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