Портал перехвата, на котором производится авторизация сессий пользователей беспроводной сети, можно реализовать также на Linux-маршрутизаторе. Для этого необходимо, чтобы:

  • этот сервер был маршрутизатором для пользователей беспроводной сети (шлюзом по умолчанию);
  • на этом же сервере функционировала система WNAM;
  • этот же сервер выполнял роль DHCP-сервера для пользователей.

Работа портала перехвата обеспечивается следующими дополнительными компонентами: isc-dhcp-server, iptables, ipset, nginx. Установка и настройка дополнительного ПО приведена ниже. Применение RADIUS-сервера в этом случае не требуется.

Установка и настройка isc-dhcp-server

Установка isc-dhcp-server производится штатным образом из пакета. Дополнительных настроек при этом не требуется. При установке необходимо указать имя интерфейса, на котором принимать запросы, в файле /etc/default/isc-dhcp-server.

Для того, чтобы система WNAM при обращении пользователей к сети могла понять, какому IP-адресу соответствует MAC-адрес устройства абонента (и каково имя устройства), необходим механизм передачи этой информации до сервера системы WNAM. Напомним, что идентификация пользователей основана на определении и учёте МАС-адресов устройств. Использование arp вместо dhcp не решает проблему, так как абоненты могут находиться в маршрутизируемой сети. Необходимо взять скрипт связки по адресу: http://www.netams.com/files/wnam/misc/wnam-leases.pl и положить скрипт в /usr/local/bin.

Затем необходимо добавить права на исполнение: chmod +x /usr/local/bin/wnam-leases.pl.

Далее установить модуль Text::DHCPLeasescpan -i Text::DHCPLeases или apt-get install libtext-dhcpleases-perl.

После установки модуля необходимо проверить работоспособность скрипта: /usr/local/bin/wnam-leases.pl (должен вернуться пустой ответ).

Настройка межсетевого экрана

Для настройки межсетевого экрана необходимо установить следующие пакеты: ipset, netfilter-persistent.
После установки необходимо отредактировать файл правил /usr/share/netfilter-persistent/plugins.d/15-ip4tables таким образом, чтобы он содержал инициализацию ipset: 

 ipset -X
ipset --restore </etc/iptables/ipset.rules
iptables-restore < /etc/iptables/rules.v4 2> /dev/null

Затем необходимо создать файл /etc/iptables/ipset.rules следующего содержания:

create ACCESS hash:ip family inet hashsize 1024 maxelem 65536 counters timeout 1800

Указанный в последнем параметре абсолютный тайм-аут нахождения записи в таблице должен быть чуть больше (например, на 300 секунд) настроенного в системе WNAM параметра длительности сессии (см. ниже) и служит дополнительным защитным механизмом.

Далее необходимо создать файл /etc/iptables/rules.v4 следующего содержания (eth0-внешний интерфейс, eth1 - внутренний интерфейс):

*nat
:PREROUTING ACCEPT [7882:475437]
:INPUT ACCEPT [7333:440931]
:OUTPUT ACCEPT [1214:82126]
:POSTROUTING ACCEPT [275:16624]
-A POSTROUTING -o eth0 -j MASQUERADE
-A PREROUTING -p tcp -m tcp -d внешний_IP_адрес_сервера --dport 80 -j RETURN
-A PREROUTING -p tcp -m tcp -d внутренний_IP_адрес_сервера --dport 80 -j RETURN
-A PREROUTING -p tcp -m tcp --dport 80 -m set --match-set ACCESS src -j RETURN
-A PREROUTING -p tcp -m tcp -i eth1 --dport 80 -j REDIRECT --to-port 81
COMMIT
*filter
:INPUT ACCEPT [712781:180062776]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [812150:164158586]
:ACCESS - [0:0]
:FORWARD_EXT - [0:0]
:INPUT_EXT - [0:0]
-A INPUT -i eth0 -g INPUT_EXT
-A FORWARD -i eth0 -g FORWARD_EXT
-A FORWARD -i eth1 -g ACCESS
-A ACCESS -m set --match-set ACCESS src -j ACCEPT
-A ACCESS -p udp --dport 53 -j ACCEPT
-A ACCESS -j DROP
-A FORWARD_EXT -m state --state INVALID -j DROP
-A FORWARD_EXT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD_EXT -j DROP
-A INPUT_EXT -m state --state INVALID -j DROP
-A INPUT_EXT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT_EXT -p tcp -m state --state NEW -m multiport --dports 22,80 -j ACCEPT
-A INPUT_EXT -j DROP
COMMIT

После произведенных действий следует протестировать работу правил через iptables-apply /etc/iptables/rules.v4. 

Ошибки в настройках межсетевого экрана могут привести к потере управления сервером.

После успешного тестирования работоспособности межсетевого экрана необходимо дать возможность любому пользователю (в частности, пользователю tomcat7) запускать утилиту ipset: chmod a+s /sbin/ipset.

Настройка прокси-сервера

Для того, чтобы трафик неавторизованных пользователей попадал на портал перехвата, необходимо установить обратный прокси-сервер Nginx и настроить его в минимальной конфигурации. Для этого в файле /etc/nginx/sites-enabled/wnam необходимо указать:

server {
listen 81;
server_name wnam;
expires -10s;
keepalive_timeout 0;
rewrite ^(.*)$ http://внутренний_IP_адрес_сервера/cp/linux?dst=$scheme://$host$request_uri redirect;
access_log /var/log/nginx/access-redir.log;
if ($http_user_agent ~* (CaptiveNetworkSupport)) { return 200; }
}
Также необходимо удалить все остальные файлы и ссылки из каталога /etc/nginx/sites-enabled/.

Настройка системы WNAM

В первую очередь необходимо создать сервер доступа типа Linux с адресом 127.0.0.1 (включив сбор NetFlowв разделе "Конфигурация" → "Сервера доступа", а также соответствующую площадку в разделе "Конфигурация" → "Площадки".

Настройка конфигурационного файла

Необходимо настроить время жизни авторизованной сессии (абсолютный/максимальный и неактивной сессий) и путь до скрипта работы с DHCP в файле /etc/wnam.properties. Там же надо указать, что сбор статистики ведётся по NetFlow:

  linuxcp_leasescheck_script=/usr/local/bin/wnam-leases.pl
linuxcp_session_timeout=1500
linuxcp_inactive_timeout=600
is_netflow_acct=true

После внесенных изменений потребуется перезапуск системы WNAM (процесса tomcat7).  

Настройка модуля NetFlow

Для сбора статистики требуется применение NetFlow.

Для получения корректных счётчиков байт необходимо установить модуль ядра ipt_netflow. Дистрибутив с инструкцией по установке можно получить по ссылке: http://sourceforge.net/projects/ipt-netflow/. После установки необходимо прописать авто-запуск модуля в файле /etc/modprobe.d/ipt_NETFLOW.conf :

   options ipt_NETFLOW destination=127.0.0.1:20002 maxflows=0 active_timeout=300  
Затем необходимо добавить в конфигурацию межсетевого экрана в начало цепочки FORWARD запись:
   -A FORWARD -j NETFLOW

После произведенных действий необходимо перезапустить межсетевой экран и запустить модуль ядра ipt_netflow. Он будет собирать статистику по всем потокам трафика, проходящим через сервер, и отправлять её в систему WNAM.

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

При необходимости разрешения доступа ранее авторизованным (т.е. известным системе) пользователям без необходимости запуска браузера и подтверждения на портале перехвата системы WNAM  можно воспользоваться тем фактом, что DHCP-сервер работает на том же сервере, что и портал. Решение основано на запуске скрипта в момент выделения и освобождения абонентом IP-адреса. Необходимо в файл /etc/dhcp/dhcpd.conf добавить следующие строки:

subnet 172.16.70.0 netmask 255.255.255.0 {
.......
   on commit {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
set clhost = pick-first-value(host-decl-name, option fqdn.hostname, option host-name, "");
execute("/usr/local/bin/wnam-dhcpd-bridge.pl", "commit", clip, clhw, clhost);
}
on release {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
execute("/usr/local/bin/wnam-dhcpd-bridge.pl", "release", clip, clhw, host-decl-name);
}
on expiry {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
execute("/usr/local/bin/wnam-dhcpd-bridge.pl", "expiry", clip, clhw, host-decl-name);
}
}

Далее необходимо взять скрипт wnam-dhcpd-bridge.pl по адресу http://www.netams.com/files/wnam/misc/ и переложить его в каталог /usr/local/bin/, сделав исполняемым.

При операции выдачи/возврата адреса DHCP-сервер вызывает скрипт wnam-dhcpd-bridge.pl с соответствующим параметрами, а тот в свою очередь передаёт команду серверу системы WNAM. Если окажется, что подключившийся пользователь уже имеется в БД, для него откроется сессия и создастся запись в таблице ipset. В таком случае рекомендуется указывать время жизни сессии абонента равным 12 часам (linuxcp_session_timeout=43200), а время жизни записи в IPSET чуть большим (43300). В случае успешного подключения в логе /var/log/tomcat7/wnam.log будет создана следующая цепочка записей:
13:18:33.730 DEBUG [c.n.wnam.services.WnamCmdService:240] - Start handling client connection
13:18:33.838 DEBUG [c.n.wnam.services.LinuxCPService:154] - LINUX_CP openAccess IP=172.16.70.12, res='' (0)
13:18:33.845 INFO [c.n.wnam.services.LinuxCPService:172] - LINUX_CP new session 'Linux-172.16.70.12-1453407513816', request MAC=18:AE:64:9A:28:F8, IP=172.16.70.12, cust_clientid=iPhone
13:18:33.854 DEBUG [c.n.wnam.services.WnamCmdService:259] - Finish handling client connection

 

  • No labels