<!-- $Id$ -->
<chapter id="mgc">
 <title>Generator plików konfiguracyjnych (lms-mgc)</title>
  <para>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)</para>
  <sect1 id="mgc-install">
    <title>Instalacja</title>
    <para>Lms-mgc posiada własny plik konfiguracyjny: <filename>lms-mgc.ini</filename>. Jego instalacja
	polega na przeniesieniu do katalogu <filename>/usr/sbin</filename>. Uruchomienie generatora
	można wykonać na dwa sposoby: wpisać do crona (np. co godzinę)</para>
        <screen>
0 * * * *       /usr/sbin/lms-mgc 1 &gt; /dev/null</screen>
	<para>albo z poziomu LMS skorzystać z menu "Przeładowanie". Druga metoda wymaga użycia 
	<filename>sudo</filename>. Niestety, jedyne wyjście by umożliwić uruchomienie lms-mgc, to
	dopisanie użytkownika do sudo, a następnie ustawienie w sekcji konfiguracyjnej [phpui]:</para>
	<para><prompt>reload_type 	= exec</prompt></para>
	<para><prompt>reload_execcmd 	= sudo /usr/sbin/lms-mgc</prompt></para>
        <para>Lms-mgc posiada następujące opcje uruchomienia:
	<screen>
-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;</screen>
	</para>
  </sect1>
  <sect1 id="mgc-config">
    <title>Konfiguracja</title>    
  <para>Konfigurację dla LMS-MGC przeprowadza się w pliku <filename>lms-mgc.ini</filename></para>
	<sect2 id="mgc-config-db">
	<title>Sekcja [database] - ustawienia bazy danych</title>
   <itemizedlist>
    <listitem>
     <para>type</para>
     <para>Typ bazy danych. Aktualnie w 100% supportowany jest 'mysql', ale jak na razie nie widać większych problemów z 'postgres'. Domyślnie: mysql</para>
     <para>Przykład:	<prompt>type = mysql</prompt></para>
    </listitem>
    <listitem>
     <para>host</para>
     <para>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</para>
     <para>Przykład:	<prompt>host = localhost</prompt></para>
    </listitem>
    <listitem>
     <para>user</para>
     <para>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</para>
     <para>Przykład:	<prompt>user = mysql</prompt></para>
    </listitem>
    <listitem>
     <para>password</para>
     <para>Hasło do bazy danych. Domyślnie puste.</para>
     <para>Przykład:	<prompt>password = tajne_haslo</prompt></para>
    </listitem>
    <listitem>
     <para>database</para>
     <para>Nazwa bazy danych, domyślnie lms.</para>
     <para>Przykład:	<prompt>database = lms</prompt></para>
    </listitem>
   </itemizedlist>
	</sect2>
	<sect2 id="mgc-config-lms">
	<title>Sekcja [mgc] - lista instancji</title>
  	<para>Właściwa konfiguracja dotycząca generatorów poszczególnych plików konfiguracyjnych 
	jest umieszczana w sekcji <emphasis>[mgc]</emphasis> i pochodnych. W samej sekcji 
	<emphasis>[mgc]</emphasis> możemy użyć następującego parametru:
   <itemizedlist>
    <listitem>
     <para>instances</para>
     <para>Lista "instancji" oddzielona spacjami.</para>
     <para>Przykład:	<prompt>instances = dhcp firewall squid</prompt></para>
    </listitem>
   </itemizedlist>
   <note><para>Zmienną <filename>instances</filename> można także umieścić w
   sekcji dowolnej instancji. Patrz niżej.</para></note>
   </para>
	</sect2>
	<sect2 id="mgc-config-instances">
	<title>Sekcja [mgc:xxx] - konfiguracja instancji</title>  
	<para>Każda instancja ma swoją nazwę i jej konfigurację tworzy się umieszczając 
	sekcję o nazwie <emphasis>[mgc:nazwa]</emphasis>, czyli przykładowo: 
	<emphasis>[mgc:mydaemon]</emphasis></para>
  <para>W samych instancjach możemy używać następujących opcji konfiguracyjnych:</para>
   <itemizedlist>
    <listitem>
     <para>instances</para>
     <para>Zmienna, w której możesz podać listę innych instancji, aby następnie
     wywoływać mgc poleceniem '<prompt>lms-mgc -i sekcja</prompt>' zamiast
     '<prompt>lms-mgc -i "sekcja1 sekcja2 sekcja3"</prompt>'. Jeśli zostanie 
     użyta, wszystkie pozostałe zmienne tej sekcji zostaną zignorowane.</para>
     <para>Przykład:	<prompt>instances = dns1 dns2 dns3</prompt></para>
    </listitem>
    <listitem>
     <para>outfile</para>
     <para>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)</para>
     <para>Przykład:	<prompt>outfile = /etc/somefile</prompt></para>
    </listitem>
    <listitem>
     <para>append</para>
     <para>Pozwala ustawić aby wynik działania instancji nie nadpisywał pliku wynikowego, lecz został dopisany na jego końcu</para>
     <para>Przykład:	<prompt>append = 1</prompt></para>
    </listitem>
    <listitem>
     <para>outfile_perm</para>
     <para>Pozwala na ustawienie praw dostępu do pliku wyjściowego (domyślnie 600)</para>
     <para>Przykład:	<prompt>outfile_perm = 700</prompt></para>
    </listitem>
    <listitem>
     <para>outfile_owner</para>
     <para>Pozwala na ustawienie właściciela pliku wyjściowego (domyślnie 0)</para>
     <para>Przykład:	<prompt>outfile_owner = 0</prompt></para>
     <para><warning><para>Właściciel musi być podany numerycznie!</para></warning></para>
    </listitem>
    <listitem>
     <para>outfile_group</para>
     <para>Pozwala na ustawienie grupy pliku wyjściowego (domyślnie 0)</para>
     <para>Przykład:	<prompt>outfile_group = 0</prompt></para>
     <para><warning><para>Grupa musi być podana numerycznie!</para></warning></para>
    </listitem>
    <listitem>
     <para>header_file</para>
     <para>Pozwala na umieszczenie w pliku wynikowym zawartości innego 
     pliku jako nagłówek (domyślnie nie ustawione)</para>
     <para>Przykład:	<prompt>header_file = /etc/lms/myservice_header</prompt></para>
    </listitem>
    <listitem>
     <para>header</para>
     <para>Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako 
     nagłówka (domyślnie puste)</para>
     <para>Przykład:	<prompt>header = option1 = bla\noption2 = blabla</prompt></para>
     <para><note><para>Znak \n został tu użyty jako separator linii. Końcowe \n nie jest 
     wymagane.</para></note></para>
    </listitem>
	<listitem>
		<para>customergroups</para>
		<para>Pozwala ustalić które z grup klienckich będą uwzględniane w pliku konfiguracyjnym (domyślnie wszystkie)</para>
		<para>Przykład:	<prompt>customergroups = grupa1 grupa2</prompt></para>
	</listitem>
	<listitem>
		<para>excluded_customergroups</para>
		<para>Pozwala ustalić które z grup klientów mają zostać wyłączone z pliku konfiguracyjnego (domyślnie żadna)</para>
		<para>Przykład:	<prompt>excluded_customergroups = grupa3 grupa4</prompt></para>
	</listitem>
	<listitem>
		<para>networks</para>
		<para>Pozwala ustalić które z naszych sieci będą uwzględniane w pliku konfiguracyjnym (domyślnie wszystkie)</para>
		<para>Przykład:	<prompt>networks = cust1-publ cust2-publ cust3-priv</prompt></para>
	</listitem>
	<listitem>
		<para>excluded_networks</para>
		<para>Pozwala ustalić które z naszych sieci będą wyłączone z pliku konfiguracyjnego (domyślnie żadna)</para>
		<para>Przykład:	<prompt>excluded_networks = cust4-publ cust5-publ</prompt></para>
	</listitem>
   </itemizedlist>    
   <para>Teraz mgc pobiera kolejne sieci i wykonuje w kółko następujące czynności:</para>
   <itemizedlist>
    <listitem>
     <para>network_header</para>
     <para>Generuje nagłówek dla każdej sieci (domyślnie puste):</para>
     <para>Przykład:	<prompt>network_header = network %ADDR/%MASK { # Config section for %NAME</prompt></para>
    </listitem>
    <listitem>
     <para>dst_networks</para>
     <para>Pozwala ustawić sieci docelowe, czyli takie dla których będzie przetwarzany parametr: dst_network_header (domyślnie wszystkie):</para>
     <para>Przykład:	<prompt>dst_networks = main coalloc</prompt></para>
    </listitem>
    <listitem>
     <para>dst_network_header</para>
     <para>Pozwala ustawić nagłówek dla sieci docelowych</para>
     <para>Przykład:	<prompt>dst_network_header = \tallow to %DADDR/%DMASK;</prompt></para>
    </listitem>
    <listitem>
     <para>network_body</para>
     <para>Parametr jest przetwarzany po wysłaniu nagłówków dla sieci, a przed rozpoczęciem analizy adresów IP</para>
     <para>Przykład:	<prompt>network_body = \tnodes {</prompt></para>
    </listitem>
   </itemizedlist>
   <para>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:</para>
    <itemizedlist>
    <listitem>
     <para>ignore</para>
     <para>Pozwala na ustawienie listy adresów w postaci adres/prefix lub adres/maska oddzielanej spacjami dla której ma być ignorowane generowanie</para>
     <para>Przykład:	<prompt>ignore = 192.168.0.100/32</prompt></para>
    </listitem>
    <listitem>
     <para>node(IP)</para>
     <para>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.</para>
     <para>Przykład:	<prompt>node(192.168.0.20) = ??</prompt></para>
    </listitem>
    <listitem>
     <para>allnodes</para>
     <para>Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP.</para>
     <para>Przykład:	<prompt>allnodes = ??</prompt></para>
    </listitem>
    <listitem>
     <para>allexistnodes</para>
     <para>Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP który jest używany.</para>
     <para>Przykład:	<prompt>allexistnodes = ??</prompt></para>
    </listitem>
    <listitem>
     <para>netdevnode</para>
     <para>Pozwala na ustawienie regułki przetwarzanej dla każdego kolejnego adresu IP urządzenia sieciowego.</para>
     <para>Przykład:	<prompt>netdevnode = ??</prompt></para>
    </listitem>
    <listitem>
     <para>grantednode_priv</para>
     <para>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)</para>
     <para>Przykład:	<prompt>grantednode_priv = \t\tnode %NAME (%IP/%MAC) unique %ID;</prompt></para>
    </listitem>
    <listitem>
     <para>grantednode_publ</para>
     <para>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)</para>
     <para>Przykład:	<prompt>grantednode_publ = \t\tnode %NAME (%IP/%MAC) unique %ID;</prompt></para>
    </listitem>
    <listitem>
     <para>deniednode_priv</para>
     <para>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)</para>
     <para>Przykład:	<prompt>deniednode_priv = node %NAME (%IP/%MAC) unique %ID deny;</prompt></para>
    </listitem>
    <listitem>
     <para>deniednode_publ</para>
     <para>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)</para>
     <para>Przykład:	<prompt>deniednode_publ = node %NAME (%IP/%MAC) unique %ID deny;</prompt></para>
    </listitem>
    <listitem>
     <para>dhcpnode_priv</para>
     <para>Jest przetwarzana gdy dany adres IP zawiera się w zakresie DHCP (regułka przetwarzana dla adresów prywatnych)</para>
     <para>Przykład:	<prompt>dhcpnode_priv = node unknown (%IP) reject;</prompt></para>
    </listitem>
    <listitem>
     <para>dhcpnode_publ</para>
     <para>Jest przetwarzana gdy dany adres IP zawiera się w zakresie DHCP (regułka przetwarzana dla adresów publicznych)</para>
     <para>Przykład:	<prompt>dhcpnode_publ = node unknown (%IP) reject;</prompt></para>
    </listitem>
    <listitem>
     <para>freeip_priv</para>
     <para>Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów prywatnych)</para>
     <para>Przykład:	<prompt>freeip_priv = node unknown (%IP) lock_as_unused;</prompt></para>
    </listitem>
    <listitem>
     <para>freeip_publ</para>
     <para>Jest przetwarzana gdy dany adres IP nie jest przypisany do żadnego komputera (regułka przetwarzana dla adresów publicznych)</para>
     <para>Przykład:	<prompt>freeip_publ = node unknown (%IP) lock_as_unused;</prompt></para>
    </listitem>
    <listitem>
     <para>default_priv</para>
     <para>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)</para>
     <para>Przykład:	<prompt>default_priv = node unknown (%IP) lock_as_intruder;</prompt></para>
     <para><note><para>lms-mgc sam rozpoznaje który adres należy do puli publicznej, a który do prywatnej.</para></note></para>
    </listitem>
    <listitem>
     <para>default_publ</para>
     <para>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)</para>
     <para>Przykład:	<prompt>default_publ = node unknown (%IP) lock_as_intruder;</prompt></para>
    </listitem>
    </itemizedlist>
    <para>W końcu następuje wygenerowanie końcowej części pliku i wykonanie
    polecenia systemowego.</para>
    <itemizedlist>
    <listitem>
     <para>network_footer</para>
     <para>Pozwala na ustawienie stopki dla właśnie przetwarzanej sieci</para>
     <para>Przykład:	<prompt>network_footer = ??</prompt></para>
    </listitem>
    <listitem>
     <para>footer_file</para>
     <para>Pozwala na umieszczenie w pliku wynikowym zawartości innego pliku jako stopka (domyślnie nie ustawione)</para>
     <para>Przykład:	<prompt>footer_file = /etc/lms/myservice_footer</prompt></para>
    </listitem>
    <listitem>
     <para>footer</para>
     <para>Pozwala na umieszczenie w pliku wynikowym zawartości zmiennej jako stopki (domyślnie puste)</para>
     <para>Przykład:	<prompt>footer = # End.</prompt></para>
    </listitem>
    <listitem>
     <para>post_exec</para>
     <para>Komenda do wywołania po wygenerowaniu pliku konfiguracyjnego</para>
     <para>Przykład:	<prompt>post_exec = killall -HUP mydaemon</prompt></para>
    </listitem>
  </itemizedlist>
	</sect2>
	<sect2 id="mgc-config-vars">
	<title>Zmienne konfiguracyjne</title>
    <para>W opcjach konfiguracyjnych można używać następujących zmiennych, 
    które zostaną podmienione na odpowiednie dane z bazy:</para>
    <para>Zmienne dla komputerów:
   <itemizedlist>
    <listitem>
     <para>%IP - adres IP komputera</para>
    </listitem>
    <listitem>
     <para>%PUBIP - drugi (publiczny) adres IP komputera</para>
    </listitem>
    <listitem>
     <para>%PIN - pin klienta posiadającego dany komputer</para>
    </listitem>
    <listitem>
     <para>%ID - ID komputera w bazie</para>
    </listitem>
    <listitem>
     <para>%MAC - adres MAC karty sieciowej</para>
    </listitem>
    <listitem>
     <para>%SMAC - adres MAC pisany małymi literami z usuniętymi dwukropkami</para>
    </listitem>
    <listitem>
     <para>%CMAC - adres MAC pisany w formacie CISCO (FFFF.FFFF.FFFF)</para>
    </listitem>
    <listitem>
     <para>%OWNER - ID właściciela komputera</para>
    </listitem>
    <listitem>
     <para>%CUSTOMER - nazwisko i imię właściciela komputera</para>
    </listitem>
    <listitem>
     <para>%NAME - nazwa komputera dużymi znakami</para>
    </listitem>
    <listitem>
     <para>%name - nazwa komputera małymi znakami</para>
    </listitem>
    <listitem>
     <para>%INFO - opis komputera</para>
    </listitem>
    <listitem>
     <para>%PASSWD - hasło komputera</para>
    </listitem>
    <listitem>
     <para>%PORT - port urządzenia, do którego podłączony jest komputer</para>
    </listitem>
    <listitem>
     <para>%UPRATE - gwarantowany transfer dla danych wychodzących</para>
    </listitem>
    <listitem>
     <para>%NUPRATE - gwarantowany transfer dla danych wychodzących (dla godzin nocnych)</para>
    </listitem>
    <listitem>
     <para>%DOWNRATE - gwarantowany transfer dla danych przychodzących</para>
    </listitem>
    <listitem>
     <para>%NDOWNRATE - gwarantowany transfer dla danych przychodzących (dla godzin nocnych)</para>
    </listitem>
    <listitem>
     <para>%UPCEIL - maksymalny transfer dla danych wychodzących</para>
    </listitem>
    <listitem>
     <para>%NUPCEIL - maksymalny transfer dla danych wychodzących (dla godzin nocnych)</para>
    </listitem>
    <listitem>
     <para>%DOWNCEIL - maksymalny transfer dla danych przychodzących</para>
    </listitem>
    <listitem>
     <para>%NDOWNCEIL - maksymalny transfer dla danych przychodzących (dla godzin nocnych)</para>
    </listitem>
    <listitem>
     <para>%CLIMIT - limit równoczesnych połączeń</para>
    </listitem>
    <listitem>
     <para>%NCLIMIT - limit równoczesnych połączeń (dla godzin nocnych)</para>
    </listitem>
    <listitem>
     <para>%PLIMIT - limit pakietów</para>
    </listitem>
    <listitem>
     <para>%NPLIMIT - limit pakietów (dla godzin nocnych)</para>
    </listitem>
    <listitem>
     <para>%1 %2 %3 %4 - kolejne oktety (od lewej) adresu IP</para>
    </listitem>
    <listitem>
     <para>%NID - ID sieci, do której należy komputer</para>
    </listitem>
    <listitem>
     <para>%NNAME - nazwa sieci dużymi znakami</para>
    </listitem>
    <listitem>
     <para>%nname - nazwa sieci małymi znakami</para>
    </listitem>
    <listitem>
     <para>%NADDR - adres sieci</para>
    </listitem>
    <listitem>
     <para>%NIFACE - interfejs sieci</para>
    </listitem>
    <listitem>
     <para>%NMASK - maska sieci</para>
    </listitem>
    <listitem>
     <para>%NGATE - adres bramy</para>
    </listitem>
    <listitem>
     <para>%NDNS - adres serwera DNS</para>
    </listitem>
    <listitem>
     <para>%NDNS2 - adres drugiego serwera DNS</para>
    </listitem>
    <listitem>
     <para>%NDOMAIN - domena sieci</para>
    </listitem>
    <listitem>
     <para>%NWINS - adres serwera WINS dla tej sieci</para>
    </listitem>
    <listitem>
     <para>%NDHCPS - pierwszy adres DHCP sieci</para>
    </listitem>
    <listitem>
     <para>%NDHCPE - ostatni adres DHCP sieci</para>
    </listitem>
   </itemizedlist>
    </para>
    <para>Zmienne dla sieci (w opcjach dotyczących tylko sieci):
   <itemizedlist>
    <listitem>
     <para>%ID - ID sieci w bazie</para>
    </listitem>
    <listitem>
     <para>%NAME - nazwa sieci dużymi znakami</para>
    </listitem>
    <listitem>
     <para>%name - nazwa sieci małymi znakami</para>
    </listitem>
    <listitem>
     <para>%ADDR - adres sieci</para>
    </listitem>
    <listitem>
     <para>%IFACE - interfejs</para>
    </listitem>
    <listitem>
     <para>%MASK - maska</para>
    </listitem>
    <listitem>
     <para>%GATE - brama sieci</para>
    </listitem>
    <listitem>
     <para>%DNS - serwer DNS tej sieci</para>
    </listitem>
    <listitem>
     <para>%DNS2 - drugi serwer DNS tej sieci</para>
    </listitem>
    <listitem>
     <para>%DOMAIN - domena tej sieci</para>
    </listitem>
    <listitem>
     <para>%WINS - adres serwera WINS dla tej sieci</para>
    </listitem>
    <listitem>
     <para>%DHCPS - pierwszy adres DHCP tej sieci</para>
    </listitem>
    <listitem>
     <para>%DHCPE - ostatni adres DHCP tej sieci</para>
    </listitem>
   </itemizedlist>
    <note><para>W opcji konfiguracyjnej <prompt>dst_network_header</prompt> można
    ponadto użyć powyższych zmiennych ale poprzedzonych literą D (np. %DADDR, %dname)
    jako parametry sieci docelowych.</para></note>
   </para>
   <para>Zmienne które można stosować we wszystkich opcjach:
   <itemizedlist>
   <listitem>
     <para>%DATE - data w formacie YYYYMMDD;</para>
    </listitem>
    <listitem>
     <para>%TIME - czas w formacie HHMM;</para>
    </listitem>
    <listitem>
     <para>%TIMES - czas w formacie HHMMSS;</para>
    </listitem>
    <listitem>
     <para>%UTIME - czas w formacie unix timestamp;</para>
    </listitem>
    </itemizedlist>
   </para>
	</sect2>
  </sect1>
  <sect1 id="mgc-example">
	<title>Przykład zastosowania lms-mgc</title>
	<para>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).</para>
	<example id="instance-example">
	<title>Lms-mgc: Przykład instancji</title>
	<para>Zacznij od utworzenia nowej sekcji mgc w <filename>lms-mgc.ini</filename>, 
	nazywając ją 'ipchains' i stwórz w tej sekcji prostą maskaradę per adres IP z lanu:
	<screen>
[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</screen>
	Dopiszmy także do sekcji głównej mgc informację żeby mgc uruchamiał tą sekcję:
	<screen>
[mgc]
instances         = ipchains</screen>
	</para><para>Teraz próba odpalenia lms-mgc powinna zaowocować wygenerowaniem
	<filename>/etc/rc.d/rc.masq</filename>, oraz jego odpaleniem.</para>
	</example>
  </sect1>
</chapter>
