LMS-MGC to „magiczny” generator plików konfiguracyjnych. Przy odrobinie wysiłku można stworzyć przy jego pomocy dowolnego rodzaju plik konfiguracyjny (np. generujący odpowiednie strefy dla DNS)
5.1. Instalacja
Lms-mgc posiada własny plik konfiguracyjny: lms-mgc.ini. Jego instalacja polega na przeniesieniu do katalogu /usr/sbin. Uruchomienie generatora można wykonać na dwa sposoby: wpisać do crona (np. co godzinę)
0 * * * * /usr/sbin/lms-mgc 1 > /dev/null
albo z poziomu LMS skorzystać z menu „Przeładowanie”. Druga metoda wymaga użycia sudo. Niestety, jedyne wyjście by umożliwić uruchomienie lms-mgc, to dopisanie użytkownika do sudo, a następnie ustawienie w sekcji konfiguracyjnej [phpui]:
reload_type = exec
reload_execcmd = sudo /usr/sbin/lms-mgc
Lms-mgc posiada następujące opcje uruchomienia:
-C, --config-file=/path/lms-mgc.ini alternatywny plik konfiguracyjny (default: /etc/lms/lms-mgc.ini); -i, --instances=name nazwa (lub numer) instancji do uruchomienia, bez czytania konfiguracji z lms-mgc.ini, np. -i "name1 name2" -h, --help wyświetla pomoc; -v, --version wyświetla numer wersji; -q, --quiet tylko komunikaty o błędach; -d, --debug informacje szczegółowe dla każdego IP;
5.2. Konfiguracja
Konfigurację dla LMS-MGC przeprowadza się w pliku lms-mgc.ini
5.2.1. Sekcja [database] - ustawienia bazy danych
- type
Typ bazy danych. Aktualnie w 100% supportowany jest 'mysql', ale jak na razie nie widać większych problemów z 'postgres'. Domyślnie: mysql Przykład: type = mysql
- host
Host gdzie zainstalowana jest baza danych. Najczęściej, localhost, ale można tutaj wstawić cokolwiek (ipek, domena, path to socketa w formacie 'localhost:/path/to/socket'). Domyślnie: localhost Przykład: host = localhost
- user
Użytkownik do bazy danych. W wielu wypadkach (jeżeli postępowałeś zgodnie ze wskazówkami w doc/INSTALL) będzie to 'lms'. Jeżeli chcesz używać konta uprzywilejowanego, prawdopodobnie wpiszesz 'root' (MySQL na większości *nixów), 'mysql' (na PLD) bądź 'postgres' (PostgreSQL). Domyślnie: root Przykład: user = mysql
- password
Hasło do bazy danych. Domyślnie puste. Przykład: password = tajne_haslo
- database
Nazwa bazy danych, domyślnie lms. Przykład: database = lms
5.2.2. Sekcja [mgc] - lista instancji
Właściwa konfiguracja dotycząca generatorów poszczególnych plików konfiguracyjnych jest umieszczana w sekcji [mgc] i pochodnych. W samej sekcji [mgc] możemy użyć następującego parametru:
- instances
Lista „instancji” oddzielona spacjami. Przykład: instances = dhcp firewall squid Zmienną instances można także umieścić w sekcji dowolnej instancji. Patrz niżej.
5.2.3. Sekcja [mgc:xxx] - konfiguracja instancji
Każda instancja ma swoją nazwę i jej konfigurację tworzy się umieszczając sekcję o nazwie [mgc:nazwa], czyli przykładowo: [mgc:mydaemon]
W samych instancjach możemy używać następujących opcji konfiguracyjnych:
- instances
Zmienna, w której możesz podać listę innych instancji, aby następnie wywoływać mgc poleceniem 'lms-mgc -i sekcja' zamiast 'lms-mgc -i „sekcja1 sekcja2 sekcja3”'. Jeśli zostanie użyta, wszystkie pozostałe zmienne tej sekcji zostaną zignorowane. Przykład: instances = dns1 dns2 dns3
- outfile
Definiuje plik do którego ma być zapisany wynik działania bieżącej instancji (jeżeli ta zmienna będzie nie ustawiona, instancja się zakończy) Przykład: outfile = /etc/somefile
- append
Pozwala ustawić aby wynik działania instancji nie nadpisywał pliku wynikowego, lecz został dopisany na jego końcu Przykład: append = 1
- outfile_perm
Pozwala na ustawienie praw dostępu do pliku wyjściowego (domyślnie 600) Przykład: outfile_perm = 700
- outfile_owner
Pozwala na ustawienie właściciela pliku wyjściowego (domyślnie 0) Przykład: outfile_owner = 0
Właściciel musi być podany numerycznie!
- outfile_group
Pozwala na ustawienie grupy pliku wyjściowego (domyślnie 0) Przykład: outfile_group = 0
Grupa musi być podana numerycznie!
- header_file
Pozwala na umieszczenie w pliku wynikowym zawartości innego pliku jako nagłówek (domyślnie nie ustawione) Przykład: header_file = /etc/lms/myservice_header
- header
Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako nagłówka (domyślnie puste) Przykład: header = option1 = bla\noption2 = blabla Znak \n został tu użyty jako separator linii. Końcowe \n nie jest wymagane.
- customergroups
Pozwala ustalić które z grup klienckich będą uwzględniane w pliku konfiguracyjnym (domyślnie wszystkie) Przykład: customergroups = grupa1 grupa2
- excluded_customergroups
Pozwala ustalić które z grup klientów mają zostać wyłączone z pliku konfiguracyjnego (domyślnie żadna) Przykład: excluded_customergroups = grupa3 grupa4
- networks
Pozwala ustalić które z naszych sieci będą uwzględniane w pliku konfiguracyjnym (domyślnie wszystkie) Przykład: networks = cust1-publ cust2-publ cust3-priv
- excluded_networks
Pozwala ustalić które z naszych sieci będą wyłączone z pliku konfiguracyjnego (domyślnie żadna) Przykład: excluded_networks = cust4-publ cust5-publ
Teraz mgc pobiera kolejne sieci i wykonuje w kółko następujące czynności:
- network_header
Generuje nagłówek dla każdej sieci (domyślnie puste): Przykład: network_header = network %ADDR/%MASK { # Config section for %NAME
- dst_networks
Pozwala ustawić sieci docelowe, czyli takie dla których będzie przetwarzany parametr: dst_network_header (domyślnie wszystkie): Przykład: dst_networks = main coalloc
- dst_network_header
Pozwala ustawić nagłówek dla sieci docelowych Przykład: dst_network_header = \tallow to %DADDR/%DMASK;
- network_body
Parametr jest przetwarzany po wysłaniu nagłówków dla sieci, a przed rozpoczęciem analizy adresów IP Przykład: network_body = \tnodes {
Teraz MGC rozpocznie przetwarzanie regułek dla kolejnych adresów IP. Robi to w dosyć specyficzny sposób. Tzn. oblicza kolejny adres IP i sprawdza czy zdefiniowano regułę dla hosta i wykonuje pierwszą. Sprawdzanie jest wykonywane w następującej kolejności:
- ignore
Pozwala na ustawienie listy adresów w postaci adres/prefix lub adres/maska oddzielanej spacjami dla której ma być ignorowane generowanie Przykład: ignore = 192.168.0.100/32
- node(IP)
Przy pomocy tej opcji można zdefiniować regułę dla wybranego komputera. W nawiasie podaje się jego adres IP. Każda sekcja instancji może zawierać dowolną ilość takich opcji. Przykład: node(192.168.0.20) = ??
- allnodes
Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP. Przykład: allnodes = ??
- allexistnodes
Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP który jest używany. Przykład: allexistnodes = ??
- netdevnode
Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP urządzenia sieciowego. Przykład: netdevnode = ??
- grantednode_priv
Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status „podłączony” (regułka przetwarzana dla adresów prywatnych) Przykład: grantednode_priv = \t\tnode %NAME (%IP/%MAC) unique %ID;
- grantednode_publ
Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status „podłączony” (regułka przetwarzana dla adresów publicznych) Przykład: grantednode_publ = \t\tnode %NAME (%IP/%MAC) unique %ID;
- deniednode_priv
Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status „odłączony” (regułka przetwarzana dla adresów prywatnych) Przykład: deniednode_priv = node %NAME (%IP/%MAC) unique %ID deny;
- deniednode_publ
Jest przetwarzana gdy dany adres komputer z danym adresem IP istnieje, ale w lms-ui ma status „odłączony” (regułka przetwarzana dla adresów publicznych) Przykład: deniednode_publ = node %NAME (%IP/%MAC) unique %ID deny;
- dhcpnode_priv
Jest przetwarzana gdy dany adres IP zawiera się w zakresie DHCP (regułka przetwarzana dla adresów prywatnych) Przykład: dhcpnode_priv = node unknown (%IP) reject;
- dhcpnode_publ
Jest przetwarzana gdy dany adres IP zawiera się w zakresie DHCP (regułka przetwarzana dla adresów publicznych) Przykład: dhcpnode_publ = node unknown (%IP) reject;
- freeip_priv
Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów prywatnych) Przykład: freeip_priv = node unknown (%IP) lock_as_unused;
- freeip_publ
Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów publicznych) Przykład: freeip_publ = node unknown (%IP) lock_as_unused;
- default_priv
Regułka domyślna. Jest przetwarzana gdy adres nie zostanie przetworzony przez żadną regułkę grantednode lub deniednode (regułka przetwarzana dla adresów prywatnych) Przykład: default_priv = node unknown (%IP) lock_as_intruder;
lms-mgc sam rozpoznaje który adres należy do puli publicznej, a który do prywatnej.
- default_publ
Regułka domyślna. Jest przetwarzana gdy adres nie zostanie przetworzony przez żadną regułkę grantednode lub deniednode (regułka przetwarzana dla adresów publicznych) Przykład: default_publ = node unknown (%IP) lock_as_intruder;
W końcu następuje wygenerowanie końcowej części pliku i wykonanie polecenia systemowego.
- network_footer
Pozwala na ustawienie stopki dla właśnie przetwarzanej sieci Przykład: network_footer = ??
- footer_file
Pozwala na umieszczenie w pliku wynikowym zawartości innego pliku jako stopka (domyślnie nie ustawione) Przykład: footer_file = /etc/lms/myservice_footer
- footer
Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako stopki (domyślnie puste) Przykład: footer = # End.
- post_exec
Komenda do wywołania po wygenerowaniu pliku konfiguracyjnego Przykład: post_exec = killall -HUP mydaemon
5.2.4. Zmienne konfiguracyjne
W opcjach konfiguracyjnych można używać następujących zmiennych, które zostaną podmienione na odpowiednie dane z bazy:
Zmienne dla komputerów:
- %IP - adres IP komputera
- %PUBIP - drugi (publiczny) adres IP komputera
- %PIN - pin klienta posiadającego dany komputer
- %ID - ID komputera w bazie
- %MAC - adres MAC karty sieciowej
- %SMAC - adres MAC pisany małymi literami z usuniętymi dwukropkami
- %CMAC - adres MAC pisany w formacie CISCO (FFFF.FFFF.FFFF)
- %OWNER - ID właściciela komputera
- %CUSTOMER - nazwisko i imię właściciela komputera
- %NAME - nazwa komputera dużymi znakami
- %name - nazwa komputera małymi znakami
- %INFO - opis komputera
- %PASSWD - hasło komputera
- %PORT - port urządzenia, do którego podłączony jest komputer
- %UPRATE - gwarantowany transfer dla danych wychodzących
- %NUPRATE - gwarantowany transfer dla danych wychodzących (dla godzin nocnych)
- %DOWNRATE - gwarantowany transfer dla danych przychodzących
- %NDOWNRATE - gwarantowany transfer dla danych przychodzących (dla godzin nocnych)
- %UPCEIL - maksymalny transfer dla danych wychodzących
- %NUPCEIL - maksymalny transfer dla danych wychodzących (dla godzin nocnych)
- %DOWNCEIL - maksymalny transfer dla danych przychodzących
- %NDOWNCEIL - maksymalny transfer dla danych przychodzących (dla godzin nocnych)
- %CLIMIT - limit równoczesnych połączeń
- %NCLIMIT - limit równoczesnych połączeń (dla godzin nocnych)
- %PLIMIT - limit pakietów
- %NPLIMIT - limit pakietów (dla godzin nocnych)
- %1 %2 %3 %4 - kolejne oktety (od lewej) adresu IP
- %NID - ID sieci, do której należy komputer
- %NNAME - nazwa sieci dużymi znakami
- %nname - nazwa sieci małymi znakami
- %NADDR - adres sieci
- %NIFACE - interfejs sieci
- %NMASK - maska sieci
- %NGATE - adres bramy
- %NDNS - adres serwera DNS
- %NDNS2 - adres drugiego serwera DNS
- %NDOMAIN - domena sieci
- %NWINS - adres serwera WINS dla tej sieci
- %NDHCPS - pierwszy adres DHCP sieci
- %NDHCPE - ostatni adres DHCP sieci
Zmienne dla sieci (w opcjach dotyczących tylko sieci):
- %ID - ID sieci w bazie
- %NAME - nazwa sieci dużymi znakami
- %name - nazwa sieci małymi znakami
- %ADDR - adres sieci
- %IFACE - interfejs
- %MASK - maska
- %GATE - brama sieci
- %DNS - serwer DNS tej sieci
- %DNS2 - drugi serwer DNS tej sieci
- %DOMAIN - domena tej sieci
- %WINS - adres serwera WINS dla tej sieci
- %DHCPS - pierwszy adres DHCP tej sieci
- %DHCPE - ostatni adres DHCP tej sieci
W opcji konfiguracyjnej dst_network_header można ponadto użyć powyższych zmiennych ale poprzedzonych literą D (np. %DADDR, %dname) jako parametry sieci docelowych.
Zmienne które można stosować we wszystkich opcjach:
- %DATE - data w formacie YYYYMMDD;
- %TIME - czas w formacie HHMM;
- %TIMES - czas w formacie HHMMSS;
- %UTIME - czas w formacie unix timestamp;
5.3. Przykład zastosowania lms-mgc
Konfiguracja i zasada działania lms-mgc może się wydawać dość zawiła, dlatego posłużymy się przykładem. Poniżej przedstawiono sposób generowania i uruchamiania firewalla ipchains (bardzo prostego).
Przykład 5-1. Lms-mgc: Przykład instancji
Zacznij od utworzenia nowej sekcji mgc w lms-mgc.ini, nazywając ją 'ipchains' i stwórz w tej sekcji prostą maskaradę per adres IP z lanu:
[mgc:ipchains] outfile = /etc/rc.d/rc.masq outfile_perm = 700 header = #!/bin/sh\n/sbin/ipchains -F\n/sbin/ipchains -X\n/sbin/ipchains -P forward DENY grantednode_priv = /sbin/ipchains -A forward -s %IP -j MASQ post_exec = /etc/rc.d/rc.masq
Dopiszmy także do sekcji głównej mgc informację żeby mgc uruchamiał tą sekcję:
[mgc] instances = ipchains
Teraz próba odpalenia lms-mgc powinna zaowocować wygenerowaniem /etc/rc.d/rc.masq, oraz jego odpaleniem.