Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації щодо оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

linux_isg

Linux ISG на Debian 7.7.0 Wheezy

Система призначена для аутентифікації, авторизації, обліку та застосування політик до трафіку користувачів, що проходить через маршрутизатор під управлінням ядра Linux. Є спробою реалізувати частину функціоналу Cisco ISG в рамках ОС Linux.

Встановлення

Процес встановлення описано на сторінці проєкту, але ми про всяк випадок напишемо і тут. Усі команди виконуємо від імені суперкористувача root.

  • Задовольняємо залежності
# aptitude install linux-headers-$(uname -r) iptables-dev build-essential
# cpan -i Net::Radius::Packet
  • Завантажуємо останню версію Linux ISG та розпаковуємо
# wget --no-check-certificate https://bitbucket.org/sysoleg/lisg/get/master.tar.gz
# tar zxf master.tar.gz
  • Збираємо, встановлюємо модуль ядра та модулі iptables
# cd sysoleg-lisg-*/kernel
# ./configure
# make
# make install
  • Підвантажуємо модуль ядра
# modprobe ipt_ISG
  • Встановлюємо підтримку на стороні userspace (скрипти демона і управління на Perl)
# cd ..
# cp -r ISG /opt
# /opt/ISG/bin/ISGd.pl

Додатково

  • Автоматичне завантаження модуля ядра під час старту системи
# echo ipt_ISG >> /etc/modules
  • Створюємо скрипт автоматичного запуску демона ISGd.pl під час старту системи в /etc/init.d/linux-isg
/etc/init.d/linux-isg
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          linux-isg
# Required-Start:    $networking
# Required-Stop:     $networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin;
 
. /lib/lsb/init-functions
 
case "$1" in
  start)
    log_daemon_msg "Starting Linux ISG daemon" "linux-isg"
    if /opt/ISG/bin/ISGd.pl; then
      log_end_msg 0
    else
      log_end_msg 1
    fi
  ;;
  restart)
    log_daemon_msg "Restarting Linux ISG daemon" "linux-isg"
    start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/ISGd.pid
    if /opt/ISG/bin/ISGd.pl; then
      log_end_msg 0
    else
      log_end_msg 1
    fi
  ;;
  stop)
    log_daemon_msg "Stopping Linux ISG daemon" "linux-isg"
    start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/ISGd.pid
    log_end_msg 0
  ;;
  *)
    log_success_msg "Usage: /etc/init.d/linux-isg {start|stop|restart}"
    exit 1
  ;;
esac
 
exit 0 
# chmod a+x /etc/init.d/linux-isg
# update-rc.d linux-isg defaults

Налаштування Linux ISG

Припустимо:

  1. Адреса сервера доступу - 192.168.0.252;
  2. Адреса білінгу/FreeRADIUS - 192.168.0.250;
  3. На сервері доступу налаштований DHCP-сервер або DHCP-relay. Або користувачам адреси вбиваються вручну.
  4. У нас є мережа 10.0.0.0.0/24, якій потрібно надати доступ:
    • До локальних мереж (RFC1918) на швидкості 100 Мбіт/сек. не залежно від його стану в білінгу
    • До глобальної мережі (GLOBAL) на швидкості 10 Мбіт/сек., якщо абонент активний
    • Завернути в особистий кабінет, якщо абонент не активний (OFF-LINE), відключений примусово (DOWN) або заморожений (PASSIVE).
    • Оскільки ми дуже ледачі і не маємо власного DNS, потрібен постійний доступ до DNS серверів Google: 8.8.8.8 и 8.8.4.4

Попереднє налаштування самого Linux ISG здійснюється в /opt/ISG/etc/config.pl. Головне, що тут потрібно - це налаштувати зв'язок із сервером FreeRADIUS. Робиться це приведенням опцій до такого вигляду:

/opt/ISG/etc/config.pl
$cfg{radius_auth}{0} = { server => "192.168.0.250:1812", timeout => 5, secret => "90d65aea5b99" };
$cfg{radius_acct}{0} = { server => "192.168.0.250:1813", timeout => 5, secret => "90d65aea5b99" };
 
### CoA-related settings
$cfg{coa_server} = "192.168.0.250";  ## Accept requests only from this IP (comment to accept from all)
$cfg{coa_secret} = "90d65aea5b99";   ## Shared secret
$cfg{coa_port} = 3799;               ## Local UDP port to listen for CoA requests

Також приведемо файл /etc/rc.local до такого вигляду, щоб запрацювали iptables:

/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
 
# Flush
iptables --flush
iptables --flush -t nat
 
# NAT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.252
 
# L4 Redirects
iptables -t nat -A PREROUTING -p tcp --dport 80 -m isg --service-name OFF-LINE -j DNAT --to-destination  192.168.0.250
iptables -t nat -A PREROUTING -p tcp --dport 80 -m isg --service-name PASSIVE -j DNAT --to-destination  192.168.0.250
iptables -t nat -A PREROUTING -p tcp --dport 80 -m isg --service-name DOWN -j DNAT --to-destination  192.168.0.250
 
# Linux ISG rules
iptables -A FORWARD -s 10.0.0.0/24 -j ISG --session-init
iptables -A FORWARD -d 10.0.0.0/24 -j ISG
 
exit 0

Додаємо класи трафіку

Перед додаванням сервісів, які будуть прив'язані до користувачів, необхідно визначити класи трафіку у файлі /opt/ISG/etc/tc.conf. Ось його вміст для нашого випадку:

/opt/ISG/etc/tc.conf
## Traffic classes for lISG
## Format: Class name   IPv4 prefix (subnet)
RFC1918         10.0.0.0/8
RFC1918         192.168.0.0/16
RFC1918         172.16.0.0/12
 
DNS             8.8.8.8/32
DNS             8.8.4.4/32
 
GLOBAL          0.0.0.0/0

Важливо! Якщо вказуєте якийсь конкретний IP додавайте маску /32

Додаємо сервіси

Сервіси встановлюються у файлі /opt/ISG/etc/config.pl у секції, обмеженій коментарями:

/opt/ISG/etc/config.pl
...
####################### Services description #######################
 Тут зазначаємо сервіси
#################### End services description ######################
...

Для нашої ситуації сервіси матимуть приблизно такий вигляд:

/opt/ISG/etc/config.pl
...
####################### Services description #######################
 
# Local networks access service
$cfg{srv}{"LOCAL"}{type} = "policer";
$cfg{srv}{"LOCAL"}{rate_info} = "QD;100000000;3125000;U;100000000;3125000";
$cfg{srv}{"LOCAL"}{traffic_classes} = [ "RFC1918", "DNS" ];
 
# Mark packets from '{user[state]}' whet they are trying to go
# to addresses from 'GLOBAL'
$cfg{srv}{"ON-LINE"}{type} = "policer";
$cfg{srv}{"ON-LINE"}{rate_info} = "QD;10000000;312500;U;10000000;312500";
$cfg{srv}{"ON-LINE"}{traffic_classes} = [ "GLOBAL" ];
 
$cfg{srv}{"OFF-LINE"}{type} = "tagger";
$cfg{srv}{"OFF-LINE"}{traffic_classes} = [ "GLOBAL" ];
 
$cfg{srv}{"PASSIVE"}{type} = "tagger";
$cfg{srv}{"PASSIVE"}{traffic_classes} = [ "GLOBAL" ];
 
$cfg{srv}{"DOWN"}{type} = "tagger";
$cfg{srv}{"DOWN"}{traffic_classes} = [ "GLOBAL" ];
 
#################### End services description ######################
...

Налаштування FreeRADIUS

  • Налаштовуємо FreeRADIUS за цієї документації.
  • Додаємо нову мережу, з “Використовувати RADIUS”
  • Прибиваємо мережу до сервера доступу з типом “local”
  • Перепризначаємо атрибут User-Name в модулі “Редагування RADIUS-атрибутів для мережі”:

  • Додаємо такі атрибути для мережі (для прикладу)

Обмеження щодо тарифних планів

Через особливості самої системи Linux ISG ми не можемо просто так узяти і передати атрибути швидкості для користувача. Але це обмеження легко обійти. Усе, що потрібно - це додати сервіси, назви яких відповідатимуть тарифним планам із зазначенням швидкостей. Наприклад для тарифу “Unlim-500” із симетричною швидкістю 10 Мбіт/сек. параметри будуть такими:

$cfg{srv}{"Unlim-500"}{rate_info} = "QD;10000000;312500;U;10000000;312500";
$cfg{srv}{"Unlim-500"}{traffic_classes} = [ "GLOBAL" ];

Після, додаємо до списку атрибутів мережі наступний:

Після чого користувачі почнуть отримувати додатково сервіс з тарифом користувача, і швидкість буде обмежуватись згідно з тарифом…

Тестування

Якщо все пройшло добре, то після спроби користувача вийти в інтернет, команда /opt/ISG/bin/ISG.pl виведе щось таке

# /opt/ISG/bin/ISG.pl
User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in Rate-out Service name Flags
10.0.0.2        0.0.0.0        Virtual1    B87A6BA0D86B93EA 1556   2984      6024       0       0        Main session A

А якщо нам потрібно перевірити сервіси, закріплені за користувачем:

# /opt/ISG/bin/ISG.pl show_services 10.0.0.2
User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in   Rate-out  Service name Flags
10.0.0.2        0.0.0.0        Virtual1    C3D8943C8C193407 0      0         0          100000000 100000000 LOCAL        SO
10.0.0.2        0.0.0.0        Virtual1    609494475903148E 1786   2984      6024       10000000  10000000  ON-LINE      SOU
linux_isg.txt · Востаннє змінено: 2023/06/19 15:33 повз borisov