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

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


Сайдбар

Розділи

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

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