Это старая версия документа.
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.
- Пример правила открытия доступа
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