Internet IPoE

Предоставление некоммутируемых услуг Internet

Контроль доступа и нарезка трафика

При включении сессии выполняется правило указанное в конфигурационном файле (config.pl) $conf{INTERNET_IPOE_START} при завершении $conf{INTERNET_IPOE_STOP}. Система данным командам передаёт следующие атрибуты

%IP IP адрес клиента
%MASK битная маска (32,24)
%NUM номер правила ($conf{INTERNET_IPOE_FIRST_RULE} + (PORT или последняя цифра IP адреса) )
%LOGIN Логин
%SPEED_IN входящая скорость
%SPEED_OUT исходящая скорость

а также переменные окружения

NAS_IP_ADDRESS IP адрес сервера доступа
NAS_MNG_USER Пользователь для управления сервером доступа
NAS_MNG_IP_PORT IP:PORT управления сервером доступа
NAS_ID Номер сервера доступа
NAS_TYPE Тип сервера доступа

В качестве шейпера удобно использовать /usr/abills/libexec/linkupdown.

  1. Пример правила открытия доступа

abills/libexec/config.pl

$conf{INTERNET_IPOE_START}='SUDO=/usr/local/bin/sudo;
CMD="${SUDO} /usr/abills/libexec/linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&1";
if [ "${NAS_TYPE}" = "mikrotik" ]; then CMD="/usr/abills/libexec/linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} NAS_ADMIN=${NAS_MNG_USER}";
elif [ "${NAS_MNG_IP_PORT}" != "" ]; then CMD="/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"${CMD}\""; fi;
eval "${CMD}"';

$conf{INTERNET_IPOE_STOP}='SUDO=/usr/local/bin/sudo;
CMD="${SUDO} /usr/abills/libexec/linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&1";
if [ "${NAS_TYPE}" = "mikrotik" ]; then CMD="/usr/abills/libexec/linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} NAS_ADMIN=${NAS_MNG_USER}";
elif [ "${NAS_MNG_IP_PORT}" != "" ]; then CMD="/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"${CMD}\""; fi;
eval "${CMD}"';

Для типа сервера - mikrotik-dhcp:

$conf{INTERNET_IPOE_START_RULE}='SUDO=/usr/local/bin/sudo;
CMD="${SUDO} /usr/abills/libexec/linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&1";
if [ "${NAS_TYPE}" = "mikrotik_dhcp" ]; then CMD="/usr/abills/libexec/linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT}
NAS_ADMIN=${NAS_MNG_USER}";
elif [ "${NAS_MNG_IP_PORT}" != "" ]; then CMD="/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.${NAS_MNG_USER}
${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"${CMD}\""; fi;
eval "${CMD}"';

$conf{INTERNET_IPOE_STOP_RULE}='SUDO=/usr/local/bin/sudo;
CMD="${SUDO} /usr/abills/libexec/linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&1";
if [ "${NAS_TYPE}" = "mikrotik_dhcp" ]; then CMD="/usr/abills/libexec/linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT}
NAS_ADMIN=${NAS_MNG_USER}";
elif [ "${NAS_MNG_IP_PORT}" != "" ]; then CMD="/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.${NAS_MNG_USER}
${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"${CMD}\""; fi;
eval "${CMD}"';

Также внизу указано настройка дополнительных параметров для разных операционных систем и удалённых серверов доступа

FreeBSD

Управление доступом, шейпером и переинициализация сессий при перезагрузке сервера осуществляется программой /usr/local/etc/rc.d/shaper_start.sh

параметры /etc/rc.conf

abills_shaper_enable=«YES» Поднятие правил шейпера при перезапуске системы
abills_ipn_nas_id=«Номер IPN наса» Номер сервера доступа. Обязательный параметр
abills_ipn_if=«интерфейс к которому подключаются пользователи» Интерфейс к которому подключаются клиенты
abills_ipn_allow_ip=«разрешённые ип адреса» Разрешённые без авторизации IP адреса. Разделяются запятой
abills_nat=«xx.xx.xx.xx:10.0.0.0/16:interface» Если нужно использовать NAT

При использовании шейпера ipfw система по умолчанию использует правила с номера 20000 по 40000. Для изменения номера начального правила можно воспользоваться опцией $conf{IPN_FW_FIRST_RULE}.

sudo

Установка sudo, для запуска правил фаервола от имени пользователя, под которым работает WEB сервер. freebsd:

# cd /usr/ports/security/sudo
# make
# make install

/usr/local/etc/sudoers

#Allow ABillS shapper
www   ALL = NOPASSWD: /usr/abills/libexec/linkupdown
www   ALL = NOPASSWD: /sbin/ipfw

Linux

Скрипт которые подготавливает интерфейс для использования шейпера и устанавливает контроль доступа .
/etc/rc.d/init.d/shaper_start.sh

/etc/rc.conf

abills_shaper_enable="YES"
abills_ipn_if="eth0,eth2"
abills_nat_enable=":192.168.0.0/24:eth1"
eth0,eth2 интерфейс в локальную сеть к которому подключены пользователи
eth1 интерфейс наружу
192.168.0.1 локальный IP сервера
192.168.0.0/255.255.255.0 локальная сеть

или альтернативный скрипт


#!/bin/sh
# При использовании нескольких интерфейсов указываем их через пробел
INTERFACES='eth0 eth2';
TC="/sbin/tc"

for INTERFACE in ${INTERFACES}; do
  TCQA="${TC} qdisc add dev ${INTERFACE}"
  TCQD="${TC} qdisc del dev ${INTERFACE}"

  $TCQD root &>/dev/null
  $TCQD ingress &>/dev/null

  $TCQA root handle 1: htb
  $TCQA handle ffff: ingress

  echo "Shaper UP ${INTERFACE}"
done

# Доступ к странице авторизации
/sbin/iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 80
/sbin/iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 80

# Закрыть доступ неактивизированым хостам
/sbin/iptables -A FORWARD -j DROP
sudo

/etc/sudoers

#Allow ABillS shapper
apache   ALL = NOPASSWD: /usr/abills/libexec/linkupdown
apache   ALL = NOPASSWD: /sbin/iptables