Модуль dev_linux

Материал из Felix2
Перейти к: навигация, поиск


Модуль взаимодействует с подсистемой netfilter ядра ОС Linux для управления правилами, разрешающими пользователям доступ во внешнюю сеть.
Также модуль dev_linux взаимодействует с различными модулями ядра через интерфейс netlink для реализации эффективного шейпинга трафика.
Модуль взаимодействует с ядром ОС Linux напрямую, и не требует обязательного наличия каких-либо дополнительных программ. Модуль может работать в режиме роутера.



Параметры конфигурации модуля

  • nat_subnet – список адресов подсетей, для которых применяется NAT(по умолчанию - 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12).
  • lan_router – флаг позволяет указать, что система, на которой запущен dev_linux, должна также работать в качестве роутера локальной сети (по умолчанию – 0). Если указан данный флаг, то локальный трафик (трафик между адресами, указанными в параметре nat_subnet) не ограничивается, не считается, не шейпится, и не натится.
  • start_script – скрипт, вызываемый перед запуском модуля (по умолчанию – не используется).
  • stop_script – скрипт, вызываемый после остановки модуля (по умолчанию – не используется).
  • skip_nf_init – флаг позволяет пропустить начальную инициализацию netfilter (по умолчанию – 0).
  • max_inactivity_time – максимальное время отсутствия команд (по умолчанию – 60 секунд). Используется для режима контроля активности.
    Суть режима контроля активности в том, что при длительном отсутствии управляющих команд включается так называемый режим «халява» при котором всем пользователям разрешается доступ во внешнюю сеть. При возобновлении потока команд, режим «халява» автоматически выключается.
    Режим контроля активности реализуется периодическим вызовом функции dev_linux.check_activity (например, из планировщика).
  • redirect_nonpayer - опция включает режим редиректа всех запросов пользователя по протоколу HTTP (порт 80/tcp) на специальную страницу при невозможности доступа во внешнюю сеть (по умолчанию – не используется). Чтобы включить данный режим, нужно указать IP адрес и порт (через двоеточие) страницы для перенаправления HTTP запросов пользователей. Более подробную информацию см ниже.


Дополнительные (вложенные) элементы конфигурации

  • <traffic_control> - управление трафиком.
    • shaper – шейпер трафика (по умолчанию – HTB).
    • scheduler – планировщик трафика (по умолчанию – SFQ).
  • <network> - сетевая конфигурация.
    • if_wan – сетевые интерфейсы, подключенные к внешней сети (по умолчанию – auto).
    • if_lan – сетевые интерфейсы, подключенные к внутренней сети (по умолчанию – auto). Если вместо имени сетевого интерфейса указано «auto», то сетевые интерфейсы будут назначены в следующем порядке: if_lan – eth0, if_wan – eth1.
  • <port_filter> - управляемый фильтр портов.
    • in_port – блокируемые порты для входящих соединений.
    • out_port – блокируемые порты для исходящих соединений.
  • <forbidden> - список "запрещенных" сайтов.
    • file - файл в котором находится список "запрещенных" сайтов.
    • format - формат файла.

Пример конфигурации

<module name="dev_linux" file="modules/dev_linux.so" />
...
<scheduler>
    ...
    <entry cmd="dev_linux.check_activity" period="60 sec" start_delay="5 sec" />
    ...
</scheduler>
...
<dev_linux lan_router="1" nat_subnet="10.0.0.0/8"
    redirect_nonpayer="10.1.100.1:81" redirect_forbidden="10.1.100.1:82"
    start_script="/etc/felix2/start.sh" stop_script="/etc/felix2/stop.sh" >

    <network if_wan="eth0.1000 eth0.1001" if_lan="eth1.100 eth1.101 eth1.102 eth1.103 eth1.104" />
    <traffic_control shaper="HTB" scheduler="SFQ" />
    <port_filter out_port="25/tcp" />
    <forbidden file="/etc/felix2/dump.xml" format="rkn" />

</dev_linux>

В данном примере используется два физических сетевых интерфейса: eth0 - для внешней сети, eth1 - для внутренней (локальной) сети. На сетевых интерфейсах созданы VLANы: 1000, 1001 - для внешней сети (два вышестоящих провайдера); 100-104 для внутренней сети (внутренняя сеть поделена на 5 сегментов).
Модуль сконфигурирован для работы в режиме роутера (lan_router="1"). Трансляция адресов (NAT) производится только для подсети 10.0.0.0/8 (nat_subnet="10.0.0.0/8").
Порт 25/tcp для исходящих соединений по умолчанию закрыт (пользователь может открыть его из Личного Кабинета (через настройки услуги "Доступ в Интернет"), согласившись с ответственностью за распространение спама).
Скрипты оболочки /etc/felix2/start.sh и /etc/felix2/stop.sh запускаются перед запуском модуля и после остановки модуля соответственно.
Все неплательшики (или неавторизованные) перенаправляются на 10.1.100.1:81
Все обращения к "запрещенным" сайтам перенаправляются на 10.1.100.1:82
Список "запрещенных" сайтов находится в файле "/etc/felix2/dump.xml" в формате "rkn" (Формат выгрузки из "Единого реестра запрещенных сайтов").
Каждую минуту проверяется состояние соединения с биллингом.

Список всегда доступных сайтов

Довольно часто требуется разрешить доступ на какой-либо сайт заблокированному пользователю. Это может быть сайт самого оператора связи, или, например, сайт платежной системы.

Чтобы сделать это, нужно создать скрипт, запускаемый сразу после инициализации модуля (или демона), и добавить в нем все необходимые правила через iptables. Разрешающие правила добавляются в таблицу filter, в начало цепочки FORWARD. Нежелательно добавлять сюда очень много правил, т.к. каждый пакет будет проходить через эти правила. Можно также для снижения нагрузки поместить правила касающиеся только доступа по HTTP в отдельную цепочку.

Если включен режим redirect_nonpayer, необходимо также добавить разрешающее правило для IP адреса сайта в таблицу nat, цепочка CHECK_REDIRECT.

Пример стартового скрипта:

#!/bin/bash

# устанавливаем параметры ядра
sysctl -p /etc/felix2/sysctl.conf 1>/dev/null

# разрешаем доступ к личному кабинету
iptables -I FORWARD -s 10.1.100.1 -j ACCEPT
iptables -I FORWARD -d 10.1.100.1 -j ACCEPT
iptables -t nat -I CHECK_REDIRECT -d 10.1.100.1 -j ACCEPT

# разрешаем доступ к сайту сети
iptables -I FORWARD -s 1.1.1.1 -j ACCEPT
iptables -I FORWARD -d 1.1.1.1 -j ACCEPT
iptables -t nat -I CHECK_REDIRECT -d 1.1.1.1 -j ACCEPT

# разрешаем доступ к сервису платежей ROBOKASSA
iptables -I FORWARD -s 212.24.63.64/28 -j ACCEPT
iptables -I FORWARD -d 212.24.63.64/28 -j ACCEPT
iptables -t nat -I CHECK_REDIRECT -d 212.24.63.64/28 -j ACCEPT

# разрешаем доступ к сервису платежей QIWI
iptables -I FORWARD -s 91.232.230.0/23 -j ACCEPT
iptables -I FORWARD -d 91.232.230.0/23 -j ACCEPT
iptables -t nat -I CHECK_REDIRECT -d 91.232.230.0/23 -j ACCEPT

# разрешаем проверку SSL сертификатов для HTTPS ( Thawte DV SSL CA )
iptables -I FORWARD -s 173.194.32.0/24 -j ACCEPT
iptables -I FORWARD -d 173.194.32.0/24 -j ACCEPT
iptables -t nat -I CHECK_REDIRECT -d 173.194.32.0/24 -j ACCEPT

Перенаправление HTTP запросов

Если задана опция redirect_nonpayer, то при невозможности доступа пользователя во внешнюю сеть, все запросы по протоколу HTTP (порт 80/tcp) будут перенаправлены на специальную страницу. При попадании пользователя на данную страницу производится анализ причины (закончился платеж, нет авторизации итд) и потом выдается соответствующее сообщение (скрипт no_access.pl).

Данные для анализа берутся из динамически обновляемого кэша, расположенного в оперативной памяти (модуль auth_basic), что позволяет не переживать о перегрузке базы данных при большом количестве запросов.

По умолчанию после установки АСР Felix2 страница для редиректа неплательщиков доступна на 81/tcp порту.

Рекомендуется добавить IP адрес Личного кабинета в список всегда доступных сайтов.


Скриншоты страницы редиректа для различных ситуаций:

Пользователь не авторизован
Недостаточно средств для платежа по тарифу
Услуга "Доступ в Интернет" отсутствует в тарифном плане
Неверные сетевые настройки. Пользователь с данным IP адресом не зарегистрирован в системе.


Ссылка для перехода к способам оплаты берется отсюда: Система -> Настройки интерфейса -> Личный кабинет абонента -> Внешние ссылки -> Способы оплаты (ссылка).

Телефоны техподдержки указываются здесь: Система -> Настройки интерфейса -> Личный кабинет абонента -> Служба техподдержки.