6.2. Moduły

Sam demon potrafi tylko uruchamiać moduły i to one odwalają całą robotę. Większość modułów jest przeznaczona do określonego zastosowania, jedynie 'hostfile' można używać do różnych konfigów (usług), np. różnych typów firewalli. Parametry konfiguracyjne modułów umieszcza się w sekcjach instancji je wywołujących.

6.2.1. Lista dostępnych modułów

Tabela 6-1. Lista modułów demona lmsd

NazwaOpis
systemWywoływanie poleceń powłoki
parserParser uniwersalnych skryptów T-Script
dhcpKonfiguracja serwera dhcpd
cutoffOdłączanie klientów z zaległościami w opłatach
dnsKonfiguracja serwera dns
ethersTworzenie pliku /etc/ethers
hostfileModuł uniwersalny (np. tworzenie reguł iptables)
notifyPowiadamianie klientów o zaległościach w opłatach pocztą elektroniczną
ggnotifyPowiadamianie klientów o zaległościach w opłatach przez gadu-gadu
paymentsNaliczanie opłat abonamentowych
oidentKonfiguracja oident
tcTworzenie reguł TC
tc-ngTworzenie reguł TC
trafficStatystyki wykorzystania łącza
pingerBadanie aktywności klientów
ewx-ptKonfiguracja EtherWerX PPPoE Terminatora
ewx-stmKonfiguracja EtherWerX Standalone Traffic Managera

6.2.2. System

6.2.2.1. Opis

Jedyne co robi ten moduł to wykonanie zadanego polecenia (listy poleceń) powłoki i/lub komendy SQL. Może się przydać gdy chcesz podczas przeładowania konfiguracji wykonać jakąś komendę lub uruchomić zewnętrzny skrypt, na przykład jeden z tych, które możesz znaleźć w katalogu /bin. W pierwszej kolejności jest wykonywane polecenie SQL.

6.2.2.2. Konfiguracja

W związku z powyższym możesz zdefiniować jedynie treść polecenia SQL lub shella. Powłoka powinna sobie także poradzić z listą poleceń oddzielonych średnikami:

  • sql

    Polecenie SQL. Domyślnie: puste.

    Przykład: sql = 'DELETE FROM stats WHERE dt < %NOW% - 365*86400'

  • command

    Polecenie powłoki. Domyślnie: puste.

    Przykład: command = 'echo -n "tu moduł "; echo "system"'

6.2.3. Payments

6.2.3.1. Opis

Moduł nalicza opłaty abonamentowe klientów oraz opłaty stałe. Należy go uruchamiać codziennie. Opłaty naliczane na podstawie przypisanych klientowi taryf zapisywane są do bazy wraz z komentarzem określonym zmienną 'comment'. Po naliczeniu opłat tworzone są faktury. Komentarz do opłaty stałej to zlepek składający się z jej nazwy oraz wierzyciela. Na końcu usuwane są z bazy nieaktualne obciążenia klientów.

6.2.3.2. Konfiguracja

Dla tego modułu są dostępne następujące zmienne kofiguracyjne:

  • comment

    Komentarz do operacji. '%period' zostanie zamienione na daty od-do należnego abonamentu, np. '2003/10/10 - 2003/11/09', a '%tariff' na nazwę odpowiedniej taryfy. Domyślnie: 'Subscription: '%tariff' for period: %period'.

    Przykład: comment = 'Abonament miesięczny za okres %period'

  • settlement_comment

    Komentarz do operacji wyrównania. '%period' zostanie zamienione na daty od-do okresu wyrównania, np. '2003/10/20 - 2003/11/09', a '%tariff' na nazwę odpowiedniej taryfy. Domyślnie odpowiada opcji comment.

    Przykład: settlement_comment = 'Wyrównanie za okres %period'

  • up_payments

    "Naliczanie z góry", czyli czy okres w komentarzu ma być liczony do przodu, czy do tyłu w stosunku do daty naliczenia opłaty. Domyślnie: yes.

    Przykład: up_payments = no

  • expiry_days

    Określa liczbę dni od daty wygaśnięcia przypisanych klientowi zobowiązań, po której dane tego zobowiązania zostaną usunięte z bazy. Przy ustawieniu na '0' dane zostaną usunięte natychmiast po dacie, do której obowiązywało zobowiązanie. Domyślnie: 30.

    Przykład: expiry_days = 365

  • deadline

    Termin płatności podany w dniach. Domyślnie: 14.

    Przykład: deadline = 21

  • paytype

    Rozdzaj płatności. Domyślnie: 'TRANSFER'.

    Przykład: paytype = 'GOTÓWKA'

6.2.4. Notify

6.2.4.1. Opis

Moduł 'notify' służy do informowania klientów o zaległościach w opłatach za pomocą poczty elektronicznej. Aktualne saldo klienta porównywane jest ze zmienną 'limit', jeśli jest niższe - wiadomość zostaje wysłana. Treść wiadomości pobierana jest z przygotowanego szablonu, w którym można stosować następujące zmienne:

  • %saldo - aktualne saldo klienta (także %B)

  • %b - wartość bezwzględna aktualnego salda klienta

  • %pin - PIN klienta

  • %name - imię klienta

  • %lastname - nazwisko/nazwa klienta

  • %last_10_in_a_table - wyciąg ostatnich 10 operacji na kocie klienta

6.2.4.2. Konfiguracja

Poniżej przedstawiono dostępne opcje konfiguracyjne modułu 'notify':

  • template

    Lokalizacja pliku z szablonem wiadomości. Domyślnie: pusty

    Przykład: template = modules/notify/sample/mailtemplate

  • file

    Lokalizacja pliku tymczasowego. Domyślnie: /tmp/mail

    Przykład: file = /tmp/mail.txt

  • command

    Polecenie powłoki wysyłające e-maila. '%address' zostanie zastąpione adresem e-mail klienta. Domyślnie: 'mail -s "Liabilities Information" %address < /tmp/mail'.

    Przykład: command = 'mail %address -s "musisz zapłacić, bo jak nie..." < /tmp/mail.txt'

  • limit

    Wiadomość o zaległościach zostaje wysłana jeśli saldo klienta spadnie poniżej kwoty określonej zmienną limit. Domyślnie: 0

    Przykład: limit = -20

  • debug_mail

    Określa adres na który zostaną wysłane wszystkie wiadomości, przydatne podczas testów. Domyślnie: puste.

    Przykład: debug_mail = localhost@moja.net

6.2.5. Ggnotify

6.2.5.1. Opis

Odpowiednik modułu 'notify' służący do wysyłania wiadomości gadu-gadu. Aktualne saldo klienta porównywane jest ze zmienną 'limit', jeśli jest niższe - wiadomość zostaje wysłana. Treść wiadomości pobierana jest z przygotowanego szablonu, w którym można stosować zmienne takie jak dla modułu 'notify' (może to być też ten sam szablon).

Moduł wymaga zainstalowanej biblioteki libgadu oraz źródeł programu ekg. Odpowiednie ścieżki do nich należy ustawić w modules/ggnotify/Makefile przed kompilacją modułu.

6.2.5.2. Konfiguracja

Podobnie jak w 'notify' masz do dyspozycji następujące zmienne:

  • template

    Lokalizacja pliku z szablonem wiadomości. Domyślnie: pusty.

    Przykład: template = modules/ggnotify/sample/mailtemplate

  • uin

    Identyfikator gadu-gadu użytkownika wysyłającego wiadomości. Domyślnie: pusty.

    Przykład: uin = 1234567

  • password

    Hasło dla konta określonego zmienną 'uin'. Domyślnie: puste.

    Przykład: password = "moje_trudne__hasło"

  • limit

    Wiadomość o zaległościach zostaje wysłana jeśli saldo klienta spadnie poniżej kwoty określonej zmienną limit. Domyślnie: 0

    Przykład: limit = -20

  • debug_uin

    Jeśli ustawione, na to konto zostaną wysłane wszystkie wiadomości. Domyślnie: puste.

    Przykład: debug_uin = 7654321

6.2.6. Cutoff

6.2.6.1. Opis

Cutoff zmienia status komputerów na 'odłączony' i/lub włącza ostrzeżenia klientom, którzy mają na koncie zaległości większe niż określony limit. Ponadto odłącza komputery klientów, którym wygasły wszystkie zobowiązania. Ten moduł nie zajmuje się fizycznym blokowaniem dostępu do sieci.

6.2.6.2. Konfiguracja

Dla modułu 'cutoff' mamy następujące opcje:

  • limit

    Odłączenie następuje jeśli saldo klienta spadnie poniżej kwoty określonej tą zmienną. Domyślnie: 0.

    Przykład: limit = -20

  • command

    Określa komendę systemową, która zostanie wywołana jeżeli co najmniej jeden klient zostanie odłączony lub zostanie włączone ostrzeżenie. Domyślnie: nieustawiona.

    Przykład: command = 'lmsd -qi firewall'

  • warning

    Włącza ostrzeżenie dla odłączanego klienta i przypisuje mu określoną w tej opcji treść. Jeżeli pusta, ostrzeżenie nie będzie włączane. Data w ostrzeżeniu ukryta jest pod zmienną '%time'. Domyślnie: 'Blocked automatically due to payment deadline override at %time".

    Przykład: warning = ""

  • expired_warning

    Włącza ostrzeżenie dla odłączanego klienta i przypisuje mu określoną w tej opcji treść. Jeżeli pusta, ostrzeżenie nie będzie włączane. Dotyczy klientów, którym wygasły zobowiązania. Data w ostrzeżeniu ukryta jest pod zmienną '%time'. Domyślnie: 'Blocked automatically due to tariff(s) expiration at %time".

    Przykład: expired_warning = ""

  • warnings_only

    Ta opcja pozwala zdecydować, czy chcemy użyć naszego modułu wyłącznie do włączania ostrzeżeń. Działa tylko w stosunku do klientów, którzy posiadają aktywne zobowiązania. Klienci, którym wygasły zobowiązania, zostaną odłączeni mimo włączenia tej opcji. Domyślnie: wyłączona.

    Przykład: warnings_only = true

  • use_nodeassignments

    Jeśli stosujesz powiązywanie komputerów z zobowiązaniami powinieneś włączyć tą opcję. W przeciwnym wypadku będą sprawdzane powiązania taryf z klientami. Domyślnie: wyłączona.

    Przykład: use_nodeassignments = true

6.2.7. Dhcp

6.2.7.1. Opis

Moduł zarządzający serwerem DHCP, tworzy plik konfiguracyjny oraz restartuje usługę. Zmienna 'command' umożliwia również wykonywanie innych czynności (programów).

6.2.7.2. Konfiguracja

Większość parametrów konfiguracyjnych odpowiada fragmentom pliku konfiguracyjnego dhcpd, które w typowych zastosowaniach nie wymagają zmiany:

  • file

    Określa lokalizację pliku konfiguracyjnego serwera dhcp. Domyślnie: /etc/dhcpd.conf.

    Przykład: file = /etc/dhcpd.conf

  • command

    Polecenie wykonywane po utworzeniu pliku konfiguracyjnego. Domyślnie: 'killall dhcpd; /usr/sbin/dhcpd'.

    Przykład: command = 'service dhcp restart'

  • begin

    Nagłówek pliku. Domyślnie: pusty.

    Przykład: begin = "authoritative;"

  • end

    Stopka pliku. Domyślnie: pusty.

    Przykład: end = ""

  • subnet_start

    Nagłówek podsieci. '%a' - nazwa, '%m' - maska. Domyślnie: "subnet %a netmask %m {\ndefault-lease-time 86400;\nmax-lease-time 86400;".

    Przykład: subnet_start = "subnet %a netmask %m {default-lease-time 3600;"

  • subnet_end

    Stopka podsieci. Domyślnie: "}".

    Przykład: subnet_end = '\t}'

  • subnet_gateway

    Brama podsieci. '%i' zostanie zamienione na adres ip. Domyślnie: 'option routers %i;'.

    Przykład: subnet_gateway = "option routers %i"

  • subnet_dns

    DNS'y podsieci. '%i - adresy dns'ów. Domyślnie: "option domain-name-servers %i;".

    Przykład: subnet_dns = "option domain-name-servers 192.168.0.1"

  • subnet_domain

    Nazwa domenowa podsieci. '%n' - nazwa. Domyślnie: "option domain-name %n;".

    Przykład: subnet_domain = "option domain-name test.%n;"

  • subnet_wins

    Serwery wins. '%i' - adres ip serwera. Domyślnie: "option netbios-name-servers %i;".

    Przykład: subnet_wins = ""

  • subnet_range

    Zakres adresów podsieci. '%s' - adres początkowy, '%e' - koniec zakresu. Domyślnie: "range %s %e;".

    Przykład: subnet_range = "range %s %e;"

  • host

    Parametry hostów, gdzie '%n' - nazwa hosta, '%m' - MAC, '%i' - adres ip. Domyślnie: "\thost %n {\n\t\thardware ethernet %m; fixed-address %i; \n\t}".

    Przykład: host = "host %n {hardware ethernet %m; fixed-address %i;}"

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = "lan1 lan2"

  • customergroups

    Lista nazw grup klientów, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).

    Przykład: customergroups = "grupa1 grupa2"

6.2.8. Hostfile

6.2.8.1. Opis

Moduł 'hostfile' jest dość uniwersalnym narzędziem. Ponieważ wykonuje pętlę po wszystkich komputerach w bazie rozróżniając ich status (odłączony/podłączony), sieć do której są podłaczone oraz grupy do których należą ich właściciele, dlatego możliwe jest tworzenie np. reguł dowolnego firewalla, czy też pliku /etc/hosts. Dane zapisuje do pliku i następnie wykonuje określone polecenie powłoki.

6.2.8.2. Konfiguracja

W opcjach 'grantedhost' i 'deniedhost' oraz 'public_deniedhost' i 'public_grantedhost' można stosować specjalne zmienne, które podczas zapisu do pliku zostaną zastąpione odpowiednimi dla danego komputera danymi:

%i - adres IP,
%ipub - publiczny adres IP,
%id - ID komputera,
%m - mac adres,
%n - nazwa komputera,
%p - hasło,
%info - opis komputera,
%domain - domena,
%net - nazwa sieci, do której należy host,
%if - interfejs sieci,
%addr - adres sieci,
%mask - maska sieci,
%gw - adres bramy,
%dns, %dns2 - adresy serwerów DNS,
%wins - adres serwera WINS,
%i16 - ostatni oktet adresu IP w formacie szesnatskowym,
%i16pub - ostatni oktet publicznego adresu IP w formacie szesnatskowym.

Poniżej opcje udostępniane przez ten moduł:

  • file

    Lokalizacja pliku tymczasowego. Domyślnie: /tmp/hostfile

    Przykład: file = /etc/rc.d/rc.firewall

  • command

    Polecenie powłoki wyk. po utworzeniu pliku 'file'. Domyślnie: puste

    Przykład: command = '/bin/sh /etc/rc.d/rc.firewall'

  • begin

    Nagłówek pliku tymczasowego. Domyślnie: "/usr/sbin/iptables -F FORWARD\n"

    Przykład: begin = "IPT=/usr/sbin/iptables \n$IPT -F FORWARD\n"

  • end

    Stopka pliku tymczasowego. Domyślnie: "/usr/sbin/iptables -A FORWARD -J REJECT\n"

    Przykład: end = "$IPT -A FORWARD -J REJECT\n"

  • grantedhost

    Tekst dla hosta podłączonego. Domyślnie: "/usr/sbin/iptables -A FORWARD -s %i -m mac --mac-source %m -j ACCEPT\n"

    Przykład: grantedhost = "$IPT -A FORWARD -s %i -m mac --mac-source %m -j ACCEPT\n"

  • deniedhost

    Tekst dla hosta odłączonego. Domyślnie: "/usr/sbin/iptables -A FORWARD -s %i -m mac --mac-source %m -j REJECT\n"

    Przykład: deniedhost = "$IPT -A FORWARD -s %i -m mac --mac-source %m -j REJECT\n"

  • public_grantedhost

    Tekst dla hosta podłączonego, który posiada adres publiczny. Domyślnie reguła określona opcją 'grantedhost'.

    Przykład: public_grantedhost = "$IPT -A FORWARD -s %i -m mac --mac-source %m -j ACCEPT\n$IPT -t nat -A PREROUTING -p tcp -d %ipub -j DNAT --to-destination %i\n$IPT -t nat -A POSTROUTING -s %i -j SNAT --to-source %ipub\n"

  • public_deniedhost

    Tekst dla hosta odłączonego, który posiada adres publiczny. Domyślnie reguła określona opcją 'deniedhost'.

    Przykład: public_deniedhost = ""

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = "lan1 lan2"

  • customergroups

    Lista nazw grup klientów, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).

    Przykład: customergroups = "grupa1 grupa2"

  • skip_dev_ips

    Jeśli ustawiona na tak (yes, true) pominięte zostaną adresy urządzeń sieciowych. Domyślnie: tak

    Przykład: skip_dev_ips = no

6.2.9. Traffic

6.2.9.1. Opis

'Traffic' to odpowiednik perlowego lms-traffic, zapisujący do bazy statystyki wykorzystania łącza z pliku utworzonego przez użytkownika. Plik taki powinien mieć format: ip_hosta upload download . Więcej informacji (w tym jak utworzyć taki plik) można znaleźć w rozdziale dotyczącym lms-traffic.

6.2.9.2. Konfiguracja

Jedyny dostępny parametr jest jednocześnie obowiązkowy:

  • file

    Lokalizacja pliku ze statystykami firewalla. Domyślnie: /var/log/traffic.log

    Przykład: file = /tmp/log

6.2.10. Tc (HTB)

6.2.10.1. Opis

Moduł generujący skrypt zawierający polecenia iptables i tc służące do ograniczania pasma i limitowania połączeń klientom. Regułki dla komputerów można dowolnie zdefiniować i wykorzystać nie tylko do "traffic control". Zasada działania skryptu przedstawia się następująco: Najpierw z bazy pobierane są dane dla wszystkich klientów. Obliczane są sumy ograniczeń (uprate, downrate, upceil, downceil, limity połączeń) dla każdego klienta Następnie wykonywana jest pętla ze sprawdzeniem przynależności do grupy klientów i sieci (jeśli określono). Jeśli wartości ograniczeń są różne od zera następuje zapis reguł do pliku z podmianą zmiennych. W regułkach można stosować następujące zmienne: %name - nazwa hosta, %i - adres IP, %m - MAC, %if - interfejs, %uprate, %downrate, %upceil, %downceil, %plimit, %climit, %i16 - ostatni oktet adresu IP w formacie szesnastkowym oraz %x - licznik o wartości początkowej 100 zwiększany o jeden dla każdego komputera (lub klienta, w zależności od ustawienia opcji one_class_per_host).

Domyślna polityka tworzenia klas htb zakłada utworzenie jednej klasy dla wszystkich komputerów klienta. Może to być zmienione za pomocą opcji 'one_class_per_host'.

Konfiguracja domyślna zakłada, że twój system jest przystosowany do zastosowania htb oraz iptables z modułami limit, connlimit, mark i ipp2p. Możesz sam spatchować jądro lub skorzystać ze źródeł dostępnych na stronie www.inet.one.pl.

6.2.10.2. Konfiguracja

Masz do dyspozycji standardowe parametry takie jak customergroups, file, command, networks i dodatkowo opcje definiujące treść regułek tc i firewalla. Domyślna konfiguracja przeznaczona jest dla łącz 512/128 kbit i 100mbit.

  • file

    Lokalizacja pliku tymczasowego. Domyślnie: /etc/rc.d/rc.htb.

    Przykład: file = /tmp/rc.htb

  • command

    Polecenie powłoki wykonywane po utworzeniu pliku. Domyślnie: "sh /etc/rc.d/rc.htb start".

    Przykład: command = "chmod 700 /tmp/rc.htb; /tmp/rc.htb start"

  • begin

    Nagłówek skryptu. Domyślnie:

    "#!/bin/sh
    IPT=/usr/sbin/iptables
    TC=/sbin/tc
    LAN=eth0
    WAN=eth1
    BURST="burst 30k"
    
    stop ()
    {
    $IPT -t mangle -D FORWARD -i $WAN -j LIMITS >/dev/null 2>&1
    $IPT -t mangle -D FORWARD -o $WAN -j LIMITS >/dev/null 2>&1
    $IPT -t mangle -F LIMITS >/dev/null 2>&1
    $IPT -t mangle -X LIMITS >/dev/null 2>&1
    $IPT -t mangle -F OUTPUT
    $IPT -t filter -F FORWARD
    $TC qdisc del dev $LAN root 2> /dev/null
    $TC qdisc del dev $WAN root 2> /dev/null
    }
    
    start ()
    {
    stop
    $IPT -t mangle -N LIMITS
    $IPT -t mangle -I FORWARD -i $WAN -j LIMITS
    $IPT -t mangle -I FORWARD -o $WAN -j LIMITS
    # incomming traffic
    $IPT -t mangle -A OUTPUT -j MARK --set-mark 1
    $TC qdisc add dev $LAN root handle 1:0 htb default 3 r2q 1
    $TC class add dev $LAN parent 1:0 classid 1:1 htb rate 99000kbit ceil 99000kbit quantum 1500
    $TC class add dev $LAN parent 1:1 classid 1:2 htb rate   500kbit ceil   500kbit
    $TC class add dev $LAN parent 1:1 classid 1:3 htb rate 98500kbit ceil 98500kbit prio 9 quantum 1500
    $TC qdisc add dev $LAN parent 1:3 esfq perturb 10 hash dst
    # priorities for ICMP, TOS 0x10 and ports 22 and 53
    $TC class add dev $LAN parent 1:2 classid 1:20 htb rate 50kbit ceil 500kbit $BURST prio 1 quantum 1500
    $TC qdisc add dev $LAN parent 1:20 esfq perturb 10 hash dst
    $TC filter add dev $LAN parent 1:0 protocol ip prio 2 u32 match ip sport 22 0xffff flowid 1:20
    $TC filter add dev $LAN parent 1:0 protocol ip prio 2 u32 match ip sport 53 0xffff flowid 1:20
    $TC filter add dev $LAN parent 1:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 1:20
    $TC filter add dev $LAN parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:20
    # serwer -> LAN
    $TC filter add dev $LAN parent 1:0 protocol ip prio 4 handle 1 fw flowid 1:3
    
    # outgoing traffic
    $TC qdisc add dev $WAN root handle 2:0 htb default 11 r2q 1
    $TC class add dev $WAN parent 2:0 classid 2:1 htb rate 120kbit ceil 120kbit
    # priorities for ACK, ICMP, TOS 0x10, ports 22 and 53
    $TC class add dev $WAN parent 2:1 classid 2:10 htb rate 60kbit ceil 120kbit prio 1 quantum 1500
    $TC qdisc add dev $WAN parent 2:10 esfq perturb 10 hash dst
    $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip protocol 6 0xff \
    match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 1 match u8 0x10 0xff at 33 flowid 2:10
    $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip dport 22 0xffff flowid 2:10
    $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip dport 53 0xffff flowid 2:10
    $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 2:10
    $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:10
    # serwer -> Internet
    $TC class add dev $WAN parent 2:1 classid 2:11 htb rate 30kbit ceil 120kbit prio 2 quantum 1500
    $TC qdisc add dev $WAN parent 2:11 esfq perturb 10 hash dst
    $TC filter add dev $WAN parent 2:0 protocol ip prio 3 handle 1 fw flowid 2:11
    $TC filter add dev $WAN parent 2:0 protocol ip prio 9 u32 match ip dst 0/0 flowid 2:11

    Przykład: begin = "#!/bin/bash\n$TC=/usr/local/sbin/tc\n"

  • end

    Stopka skryptu. Domyślnie:

    }
    
    case "$1" in
        'start')
    	start
        ;;
        'stop')
    	stop
        ;;
        'status')
    	echo "WAN Interface"
    	echo "============="
    	$TC class show dev $WAN | grep root
    	$TC class show dev $WAN | grep -v root | sort | nl
    	echo "LAN Interface"
    	echo "============="
    	$TC class show dev $LAN | grep root
    	$TC class show dev $LAN | grep -v root | sort | nl
        ;;
        *)
    	echo -e "\nUsage: rc.htb start|stop|status"
        ;;
    esac

    Przykład: end = ""

  • one_class_per_host

    Określa politykę tworzenia klas htb. W ustawieniu domyślnym wszystkie komputery klienta zostaną wrzucone do jednej klasy. Ustawienie tej opcji na 'true' spowoduje, że reguły określone w host_htb_up i host_htb_down zostaną wygenerowane dla wszystkich komputerów klienta (z inną wartością '%x'). Reguły z host_mark_down, host_mark_up, host_plimit i host_climit generowane są dla każdego komputera niezależnie od ustawień tej zmiennej. Domyślnie: false

    Przykład: one_class_per_host = 1

  • host_mark_down

    Reguła markująca dla każdego komputera. Domyślnie:

    # %n
    $IPT -t mangle -A LIMITS -d %i -j MARK --set-mark %x

    Przykład: host_mark_down = ""

  • host_mark_up

    Reguła markująca dla każdego komputera. Domyślnie:

    $IPT -t mangle -A LIMITS -s %i -j MARK --set-mark %x

    Przykład: host_mark_up = ""

  • host_htb_down

    Zestaw reguł dla każdego komputera, wykonywanych gdy uprate i downrate są różne od zera. Domyślnie:

    $TC class add dev $LAN parent 1:2 classid 1:%x htb rate %downratekbit ceil %downceilkbit $BURST prio 2 quantum 1500
    $TC qdisc add dev $LAN parent 1:%x esfq perturb 10 hash dst
    $TC filter add dev $LAN parent 1:0 protocol ip prio 5 handle %x fw flowid 1:%x

    Przykład: host_htb_down = ""

  • host_htb_up

    Zestaw reguł dla każdego komputera, wykonywanych gdy uprate i downrate są różne od zera. Domyślnie:

    $TC class add dev $WAN parent 2:1 classid 2:%x htb rate %upratekbit ceil %upceilkbit $BURST prio 2 quantum 1500
    $TC qdisc add dev $WAN parent 2:%x esfq perturb 10 hash dst
    $TC filter add dev $WAN parent 2:0 protocol ip prio 5 handle %x fw flowid 2:%x

    Przykład: host_htb_up = ""

  • host_climit

    Regułka z ograniczeniem ilości równoczesnych połączeń tcp. Wykonywana gdy climit w bazie jest różny od zera. Domyślnie:

    $IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above %climit -m ipp2p --ipp2p -j REJECT

    Przykład: host_climit = "$IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above -j REJECT"

  • host_plimit

    Regułka z ograniczeniem ilości pakietów w jednostce czasu (tutaj sekunda). Wykonywana gdy plimit w bazie jest różny od zera. Domyślnie:

    $IPT -t filter -I FORWARD -p tcp -d %i -m limit --limit %plimit/s -m ipp2p --ipp2p -j ACCEPT
    $IPT -t filter -I FORWARD -p tcp -s %i -m limit --limit %plimit/s -m ipp2p --ipp2p -j ACCEPT

    Przykład: host_plimit = ""

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = "lan1 lan2"

  • customergroups

    Lista nazw grup klientów, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).

    Przykład: customergroups = "grupa1 grupa2"

6.2.11. Tc-ng (HTB)

6.2.11.1. Opis

Moduł generujący skrypt zawierający polecenia iptables i tc służące do ograniczania pasma i limitowania połączeń klientom. Działa podobnie do modułu 'tc', lecz obsługuje funkcjonalność pozwalającą na powiązywanie taryf z komputerami. Moduł generuje skrypt z zestawem reguł dla każdego komputera. Pod uwagę są brane tylko taryfy którym zostały przypisane komputery. Jeśli do jednej taryfy przypisano wiele komputerów ich limity obliczane są jako średnia. W przypadku gdy dla jednego komputera zdefiniowano wiele taryf limity (średnie) są sumowane. W regułkach można stosować następujące zmienne: %name - nazwa hosta, %i - adres IP, %m - MAC, %if - interfejs, %uprate, %downrate, %upceil, %downceil, %plimit, %climit, %i16 - ostatni oktet adresu IP w formacie szesnastkowym oraz %x - licznik o wartości początkowej 100 zwiększany o jeden dla każdego komputera.

Poniważ konfiguracja modułu jest bardzo podobna do jego poprzednika, powienieneś zacząć od przeczytania opisu tc.

6.2.11.2. Konfiguracja

Masz do dyspozycji standardowe parametry dostępne dla modułu 'tc' z wyjątkiem opcji one_class_per_host.

6.2.12. Dns

6.2.12.1. Opis

Moduł do konfiguracji stref serwera 'named' jest jednym z bardziej skomplikowanych. Tworzy dla każdej sieci pliki stref oraz odpowiednie wpisy w named.conf w oparciu o szablony tych plików. Przykładowe szablony znajdują się w katalogu /modules/dns/sample.

6.2.12.2. Konfiguracja

  • forward-patterns

    Katalog z szablonami stref. Domyślnie: forward.

    Przykład: forward-patterns = /dns/patterns/forward

  • reverse-patterns

    Katalog z szablonami stref odwrotnych. Domyślnie: reverse.

    Przykład: reverse-patterns = /dns/patterns/revers

  • generic-forward

    Szablon domyślny. Zostanie wykorzystany jeśli w katalogu określonym 'forward-patterns' nie będzie pliku odpowiadającego nazwie domenowej sieci. Domyślnie: modules/dns/sample/forward/generic.

    Przykład: generic-forward = /dns/patterns/forward

  • generic-reverse

    Szablon domyślny. Zostanie wykorzystany jeśli w katalogu określonym 'reverse-patterns' nie będzie pliku odpowiadającego numerowi IP sieci. Domyślnie: modules/dns/sample/reverse/generic.

    Przykład: generic-reverse = /dns/patterns/forward

  • forward-zones

    Katalog na pliki wynikowe stref. Domyślnie: modules/dns/sample/out/forward.

    Przykład: forward-zones = /dns/forward

  • reverse-zones

    Katalog na pliki wynikowe stref odwrotnych. Domyślnie: modules/dns/sample/out/reverse.

    Przykład: reverse-zones = /dns/reverse

  • host-reverse

    Linia w pliku strefy odwr. odpowiadająca każdemu komputerowi w dane sieci. Domyślnie: "%n IN A %i\n".

    Przykład: host-reverse = "\t %n IN A %i\n"

  • host-forward

    Linia w pliku strefy odpowiadająca każdemu komputerowi w danej sieci. Domyślnie: "%c IN PTR %n.%d.\n".

    Przykład: host-forward = "\t %c IN PTR %n.%d.\n"

  • conf-pattern

    Lokalizacja szablonu głównego pliku konfiguracyjnego serwera. Domyślnie: modules/dns/sample/named.conf.

    Przykład: conf-pattern = /dns/patterns/named.conf

  • conf-output

    Lokalizacja głównego pliku konfiguracyjnego serwera. Domyślnie: /tmp/named.conf.

    Przykład: conf-output = /etc/named.conf

  • conf-forward-entry

    Wpis dla każdej strefy w głównym pliku konfiguracyjnym. Domyślnie: 'zone "%n" {\ntype master;\n file "forward/%n"; \nnotify yes; \n}; \n'.

    Przykład: conf-forward-entry = 'zone "%n" { \n\ttype master; \n\tfile "forward/%n"; \n\tnotify yes; \n}; \n'

  • conf-reverse-entry

    Wpis dla każdej strefy odwr. w głównym pliku konfiguracyjnym. Domyślnie: 'zone "%c.in-addr.arpa" { \ntype master; \nfile "reverse/%i"; \nnotify yes; \n}; \n'.

    Przykład: conf-revers-entry = 'zone "%c.in-addr.arpa" { \n\ttype master; \n\tfile "reverse/%i"; \n\tnotify yes; \n}; \n'

  • command

    Polecenie wykonywane po utworzeniu plików konf. Domyślnie: puste.

    Przykład: command = ""

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = "lan1 lan2"

  • custmergroups

    Lista nazw grup klientów, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).

    Przykład: customergroups = "grupa1 grupa2"

6.2.13. Ethers

6.2.13.1. Opis

Moduł tworzący konfigurację tablicy ARP systemu. Ustawiając opcję 'dummy_macs' można sprawić, aby komputerom odłączonym został przypisany mac-adres 00:00:00:00:00:00.

6.2.13.2. Konfiguracja

Tutaj są tylko standardowe opcje:

  • file

    Lokalizacja pliku wynikowego. Domyślnie: /etc/ethers.

    Przykład: file = /tmp/ethers

  • command

    Polecenie powłoki wykonywane po wygenerowaniu konfiga. Domyślnie: 'arp -f /etc/ethers'.

    Przykład: command = ""

  • dummy_macs

    Jeśli ustawimy na 'yes', to komputerom odłączonym zostanie przypisany mac-adres '00:00:00:00:00:00'. Domyślnie: "no".

    Przykład: dummy_macs = yes

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = "lan1 lan2"

  • customergroups

    Lista nazw grup klientów, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy).

    Przykład: customergroups = "grupa1 grupa2"

6.2.14. Oident

6.2.14.1. Opis

Moduł do konfiguracji oidentd. W zasadzie można to zrobić modułem 'hostfile', ale tutaj masz już gotowe ustawienia domyślne.

6.2.14.2. Konfiguracja

A oto parametry modułu 'oident'

  • begin

    Tekst wstawiany na początku pliku. Domyślnie: puste.

    Przykład: begin = "#Generowany automatycznie\n"

  • end

    Tekst wstawiany na końcu pliku. Domyślnie: puste.

    Przykład: end = ""

  • host

    Linia tekstu dla każdego komputera. Domyślnie: "%i\t%n\tUNIX".

    Przykład: host = "%i %n WINDOWS"

  • file

    Nazwa pliku konfiguracyjnego. Domyślnie: /etc/oidentd.conf.

    Przykład: file = /etc/oident/identd.conf

  • networks

    Lista nazw sieci do uwzględnienia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = 'lan1 lan2'

  • command

    Polecenie do wykonania po utworzeniu pliku. Domyślnie: puste.

    Przykład: command = "killall -HUP midentd"

6.2.15. Pinger

6.2.15.1. Opis

Moduł pinger to odpowiednik perlowego skryptu lms-fping. Różnice są jednak zasadnicze. Nie potrzebuje zewnętrznego programu i działa przy wykorzystaniu protokołu ARP. Powodem tego jest mniej więcej dwukrotnie szybsze wykonanie skanowania sieci. Nie ma także problemów z komputerami mającymi wyłączone odpowiadanie na pingi. Po skanowaniu, wszystkim włączonym komputerom jest ustawiany w bazie danych czas skanowania, wykorzystywany do obrazowania aktywności komputerów np. na mapie sieci.

Notatka

Pinger rozpoznaje interfejsy sieciowe na podstawie nazwy, dlatego (np. gdy do zakładania interfejsów wirtualnych/aliasów wykorzystujesz program ip) musisz nadawać interfejsom etykiety (ip addr add ... label ...). Pamiętaj także, żeby nie używać w nazwach kropek, ani myślników (mimo, że ip na to pozwala), gdyż pinger nie rozpozna poprawnie takiego interfejsu.

6.2.15.2. Konfiguracja

Pinger udostępnia tylko jedną opcję konfiguracyjną:

  • networks

    Lista nazw sieci, które mają być skanowane. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = 'lan1 lan2'

6.2.16. Parser

6.2.16.1. Wstęp

Moduł parser jest oparty na skryptowym języku T-Script, którego głównym zadaniem jest generowanie plików tekstowych. Może być używany do przetwarzania szablonów z danymi pobieranymi z różnych źródeł np. baz SQL lub plików tekstowych. W naszym przypadku treść skryptu (szablon) jest przechowywany w bazie danych, dlatego istnieje możliwość jego edycji poprzez LMS-UI. W przyszłości moduł parser może zastąpić większość modułów demona.

Opis języka T-Script znajduje się w rozdziale T-Script.

Przed kompilacją modułu upewnij się, że posiadasz w systemie pakiety bison (co najmniej w wersji 1.875) oraz flex.

6.2.16.2. Konfiguracja

Parser posiada następujące opcje:

  • script

    Zawartość skryptu (szablonu). Domyślnie: pusta.

    Przykład: script = '{var=1}zmienna var={var}'

  • file

    Lokalizacja pliku wynikowego. Domyślnie: pusta

    Przykład: file = /tmp/parser.out

  • command

    Polecenie powłoki do wykonania po kompilacji skryptu. Domyślnie: pusta

    Przykład: command = "sh /tmp/parser.out"

6.2.17. Ewx-pt

6.2.17.1. Wstęp

Moduł ewx-pt służy do zarządzania urządzeniem PPPoE Terminator marki EtherWerX. Komunikacja odbywa się z wykorzystaniem protokołu SNMP.

Moduł podczas pracy tworzy własną kopię konfiguracji urządzenia. Konfiguracja urządzenia nie jest w żaden sposób weryfikowana, dlatego korzystając z modułu ewx-pt nie można dokonywać zmian bezpośrednio na urządzeniu. W celu rekonfiguracji urządzenia należy wyczyścić konfigurację na urządzeniu oraz usunąć zawartość tabeli ewx_pt_config w bazie LMSa.

Notatka

Pamiętaj o włączeniu opcji konfiguracyjnej ewx_support w sekcji [phpui].

6.2.17.2. Konfiguracja

Moduł ewx-pt udostępnia następujące opcje:

  • snmp_host

    Adres urządzenia EtherWerX. Domyślnie: pusty.

    Przykład: snmp_host = 192.168.0.1

  • snmp_port

    Port urządzenia dla komunikacji SNMP. Domyślnie: 161

    Przykład: snmp_port = 2161

  • community

    Nazwa community SNMP urządzenia. Domyślnie: private

    Przykład: community = public

  • offset

    Liczba całkowita o jaką będą zwiększane identyfikatory komputerów podczas zapisu na urządzeniu EtherWerX. Domyślnie: 0.

    Przykład: offset = 1000

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = 'lan1 lan2'

  • dummy_ip_networks

    Lista nazw sieci, dla których komputerom zostanie przypisany adres IP 0.0.0.0. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: pusta (żadna sieć).

    Przykład: dummy_ip_networks = lan1

  • dummy_mac_networks

    Lista nazw sieci, dla których komputerom zostanie przypisany adres MAC 00:00:00:00:00:00. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: pusta (żadna sieć).

    Przykład: dummy_mac_networks = lan1

6.2.18. Ewx-stm

6.2.18.1. Wstęp

Moduł ewx-stm służy do zarządzania urządzeniem Standalone Traffic Manager marki EtherWerX. Komunikacja odbywa się z wykorzystaniem protokołu SNMP. Do prawidłowej pracy wymagany jest firmware w wersji 1.4.x lub nowszej.

Moduł podczas pracy tworzy własną kopię konfiguracji urządzenia. Konfiguracja urządzenia nie jest w żaden sposób weryfikowana, dlatego korzystając z modułu ewx-stm nie można dokonywać zmian bezpośrednio na urządzeniu. W celu rekonfiguracji urządzenia należy wyczyścić konfigurację na urządzeniu oraz usunąć zawartość tabel ewx_stm_channels oraz ewx_stm_nodes w bazie LMSa.

Notatka

Pamiętaj o włączeniu opcji konfiguracyjnej ewx_support w sekcji [phpui].

Należy także zwrócić uwagę na to, iż moduł uwzględnia ustawienia opcji 'Sprawdzanie MACa' oraz 'Half duplex' w danych komputera.

6.2.18.2. Konfiguracja

Moduł ewx-stm udostępnia następujące opcje:

  • snmp_host

    Adres urządzenia EtherWerX. Domyślnie: pusty.

    Przykład: snmp_host = 192.168.0.1

  • snmp_port

    Port urządzenia dla komunikacji SNMP. Domyślnie: 161

    Przykład: snmp_port = 2161

  • community

    Nazwa community SNMP urządzenia. Domyślnie: private

    Przykład: community = public

  • path

    Numer ścieżki zdefiniowanej na urządzeniu, do której zostaną dopisane komputery i kanały z LMSa. Domyślnie: nieustawiona.

    Przykład: path = 1

  • offset

    Liczba całkowita o jaką będą zwiększane identyfikatory komputerów podczas zapisu na urządzeniu EtherWerX. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: 0.

    Przykład: offset = 1000

  • networks

    Lista nazw sieci, które mają być brane pod uwagę. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: pusta (wszystkie sieci).

    Przykład: networks = 'lan1 lan2'

  • dummy_ip_networks

    Lista nazw sieci, dla których komputerom zostanie przypisany adres IP 0.0.0.0. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: pusta (żadna sieć).

    Przykład: dummy_ip_networks = lan1

  • dummy_mac_networks

    Lista nazw sieci, dla których komputerom zostanie przypisany adres MAC 00:00:00:00:00:00. Uwaga: po zmianie wartości tej opcji zalecana jest rekonfiguracja urządzenia. Domyślnie: pusta (żadna sieć).

    Przykład: dummy_mac_networks = lan1