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

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


linux_isg

Розбіжності

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

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

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
linux_isg [2014/11/19 04:08]
linux_isg [2023/06/19 15:33] (поточний)
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