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)
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;
Konfigurację dla LMS-MGC przeprowadza się w pliku lms-mgc.ini
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 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
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
Hasło do bazy danych. Domyślnie puste. Przykład: password = tajne_haslo
Nazwa bazy danych, domyślnie lms. Przykład: database = lms
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:
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.
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:
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
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
Pozwala ustawić aby wynik działania instancji nie nadpisywał pliku wynikowego, lecz został dopisany na jego końcu Przykład: append = 1
Pozwala na ustawienie praw dostępu do pliku wyjściowego (domyślnie 600) Przykład: outfile_perm = 700
Pozwala na ustawienie właściciela pliku wyjściowego (domyślnie 0) Przykład: outfile_owner = 0
Właściciel musi być podany numerycznie!
Pozwala na ustawienie grupy pliku wyjściowego (domyślnie 0) Przykład: outfile_group = 0
Grupa musi być podana numerycznie!
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
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.
Pozwala ustalić które z grup klienckich będą uwzględniane w pliku konfiguracyjnym (domyślnie wszystkie) Przykład: customergroups = grupa1 grupa2
Pozwala ustalić które z grup klientów mają zostać wyłączone z pliku konfiguracyjnego (domyślnie żadna) Przykład: excluded_customergroups = grupa3 grupa4
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
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:
Generuje nagłówek dla każdej sieci (domyślnie puste): Przykład: network_header = network %ADDR/%MASK { # Config section for %NAME
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
Pozwala ustawić nagłówek dla sieci docelowych Przykład: dst_network_header = \tallow to %DADDR/%DMASK;
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:
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
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) = ??
Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP. Przykład: allnodes = ??
Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP który jest używany. Przykład: allexistnodes = ??
Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP urządzenia sieciowego. Przykład: netdevnode = ??
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;
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;
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;
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;
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;
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;
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;
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;
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.
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.
Pozwala na ustawienie stopki dla właśnie przetwarzanej sieci Przykład: network_footer = ??
Pozwala na umieszczenie w pliku wynikowym zawartości innego pliku jako stopka (domyślnie nie ustawione) Przykład: footer_file = /etc/lms/myservice_footer
Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako stopki (domyślnie puste) Przykład: footer = # End.
Komenda do wywołania po wygenerowaniu pliku konfiguracyjnego Przykład: post_exec = killall -HUP mydaemon
W opcjach konfiguracyjnych można używać następujących zmiennych, które zostaną podmienione na odpowiednie dane z bazy:
Zmienne dla komputerów:
Zmienne dla sieci (w opcjach dotyczących tylko 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:
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.