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

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


linux_isg

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
Остання ревізія По сторонах наступні версії
linux_isg [2014/11/19 04:08]
linux_isg [2023/06/19 15:30]
borisov
Рядок 1: Рядок 1:
 +====== Linux ISG на Debian 7.7.0 Wheezy ======
 +Система призначена для аутентифікації, авторизації, обліку та застосування політик до трафіку користувачів, що проходить через маршрутизатор під управлінням ядра Linux. Є спробою реалізувати частину функціоналу Cisco ISG в рамках ОС Linux.
 +
 +===== Встановлення =====
 +Процес встановлення описано на [[https://bitbucket.org/sysoleg/lisg/wiki/Home|сторінці проєкту]], але ми про всяк випадок напишемо і тут. Усі команди виконуємо від імені суперкористувача //root//.
 +
 +  * Задовольняємо залежності
 +<code>
 +# aptitude install linux-headers-$(uname -r) iptables-dev build-essential
 +# cpan -i Net::Radius::Packet
 +</code>
 +
 +  * Завантажуємо останню версію Linux ISG та розпаковуємо
 +<code>
 +# wget --no-check-certificate https://bitbucket.org/sysoleg/lisg/get/master.tar.gz
 +# tar zxf master.tar.gz
 +</code>
 +
 +  * Збираємо, встановлюємо модуль ядра та модулі iptables
 +<code>
 +# cd sysoleg-lisg-*/kernel
 +# ./configure
 +# make
 +# make install
 +</code>
 +
 +  * Підвантажуємо модуль ядра
 +<code>
 +# modprobe ipt_ISG
 +</code>
 +
 +  * Встановлюємо підтримку на стороні userspace (скрипти демона і управління на Perl)
 +<code>
 +# cd ..
 +# cp -r ISG /opt
 +</code>
 +
 +  * Поправимо /opt/ISG/etc/config.pl на свій смак (опис [[linux_isg#налаштування_linux_isg|нижче за текстом]])
 +  * Запускаємо демон ISGd.pl
 +<code>
 +# /opt/ISG/bin/ISGd.pl
 +</code>
 +===== Додатково =====
 +  * Автоматичне завантаження модуля ядра під час старту системи
 +<code>
 +# echo ipt_ISG >> /etc/modules
 +</code>
 +
 +  * Створюємо скрипт автоматичного запуску демона ISGd.pl під час старту системи в ///etc/init.d/linux-isg//
 +<file bash /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 
 +</file>
 +<code>
 +# chmod a+x /etc/init.d/linux-isg
 +# update-rc.d linux-isg defaults
 +</code>
 +
 +===== Налаштування Linux ISG =====
 +
 +Припустимо:
 +  - Адреса сервера доступу - 192.168.0.252;
 +  - Адреса білінгу/FreeRADIUS - 192.168.0.250;
 +  - На сервері доступу налаштований DHCP-сервер або DHCP-relay. Або користувачам адреси вбиваються вручну.
 +  - У нас є мережа 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. Робиться це приведенням опцій до такого вигляду:
 +<file pl /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
 +</file>
 +
 +Також приведемо файл ///etc/rc.local// до такого вигляду, щоб запрацювали iptables:
 +<file bash /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
 +</file>
 +==== Додаємо класи трафіку ====
 +Перед додаванням сервісів, які будуть прив'язані до користувачів, необхідно визначити класи трафіку у файлі ///opt/ISG/etc/tc.conf//. Ось його вміст для нашого випадку:
 +<file 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
 +</file>
 +
 +**Важливо! ** Якщо вказуєте якийсь конкретний IP додавайте маску /32 
 +==== Додаємо сервіси ====
 +Сервіси встановлюються у файлі ///opt/ISG/etc/config.pl// у секції, обмеженій коментарями:
 +<file pl /opt/ISG/etc/config.pl>
 +...
 +####################### Services description #######################
 + Тут зазначаємо сервіси
 +#################### End services description ######################
 +...
 +</file>
 +
 +Для нашої ситуації сервіси матимуть приблизно такий вигляд:
 +
 +<file pl /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 ######################
 +...
 +</file>
 +
 +===== Налаштування FreeRADIUS =====
 +  * Налаштовуємо FreeRADIUS за [[freeradius| цієї документації]].
 +  * Додаємо нову мережу, з "Використовувати RADIUS"
 +  * Прибиваємо мережу до сервера доступу з типом "local"
 +  * Перепризначаємо атрибут User-Name в модулі "Редагування RADIUS-атрибутів для мережі":
 +
 +{{ :radius_username_reassignment_ip.png?nolink& |}}
 +
 +  * Додаємо такі атрибути для мережі (для прикладу)
 +
 +{{ :linux_isg_minimal_attributes.png?950 |}}
 +
 +===== Обмеження щодо тарифних планів =====
 +ИЧерез особливості самої системи Linux ISG ми не можемо просто так узяти і передати атрибути швидкості для користувача. Але це обмеження легко обійти. Усе, що потрібно - це додати сервіси, назви яких відповідатимуть тарифним планам із зазначенням швидкостей. Наприклад для тарифу "Unlim-500" із симетричною швидкістю 10 Мбіт/сек. параметри будуть такими:
 +<code>
 +$cfg{srv}{"Unlim-500"}{rate_info} = "QD;10000000;312500;U;10000000;312500";
 +$cfg{srv}{"Unlim-500"}{traffic_classes} = [ "GLOBAL" ];
 +</code>
 +
 +Після, додаємо до списку атрибутів мережі наступний:
 +
 +{{ :linux_isg_add_tariff_service.png? |}}
 +
 +Після чого користувачі почнуть отримувати додатково сервіс з тарифом користувача, і швидкість буде обмежуватись згідно з тарифом... 
 +===== Тестування =====
 +Якщо все пройшло добре, то після спроби користувача вийти в інтернет, команда ///opt/ISG/bin/ISG.pl// виведе щось таке
 +<code>
 +# /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                    Main session A
 +</code>
 +
 +А якщо нам потрібно перевірити сервіси, закріплені за користувачем:
 +<code>
 +# /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                  100000000 100000000 LOCAL        SO
 +10.0.0.2        0.0.0.0        Virtual1    609494475903148E 1786   2984      6024       10000000  10000000  ON-LINE      SOU
 +</code>
  
linux_isg.txt · Востаннє змінено: 2023/06/19 15:33 повз borisov