<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog despre resurse educaţionale din IT &#187; Servers</title>
	<atom:link href="http://resurse-educationale.uv.ro/?cat=99&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://resurse-educationale.uv.ro</link>
	<description>Cu informatii pentru dezvoltare personala, dar şi pentru studentţi, elevi, profesori, webmasteri, programatori</description>
	<lastBuildDate>Fri, 27 Jan 2012 01:12:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Cum sa realizezi masquerading, transparent proxy,  forwardare de porturi, si alte forme de NAT pentru kernelurile Linux ver 2.4.</title>
		<link>http://resurse-educationale.uv.ro/?p=173</link>
		<comments>http://resurse-educationale.uv.ro/?p=173#comments</comments>
		<pubDate>Wed, 06 Apr 2011 12:50:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[dnat]]></category>
		<category><![CDATA[forward]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[mapare]]></category>
		<category><![CDATA[masquerading]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[porturi]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[redirectare]]></category>
		<category><![CDATA[snat]]></category>

		<guid isPermaLink="false">http://resurse-educationale.uv.ro/?p=173</guid>
		<description><![CDATA[traducere ver. 0.2 de catre Riddl Multumiri tuturor celor care m-au ajutat, in special lui Gushterul. Observatie f importanta: probabil ca exista unele greseli in acest document. Am tradus si eu cum m-am priceput mai bine, daca descoperiti greseli de &#8230; <a href="http://resurse-educationale.uv.ro/?p=173">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>traducere ver. 0.2 de catre Riddl</p>
<p>Multumiri tuturor celor care m-au ajutat,  in special lui Gushterul.<br />
Observatie f importanta: probabil ca exista unele greseli in acest document.<br />
Am tradus si eu cum m-am priceput mai bine, daca descoperiti greseli de<br />
traducere si pentru observatii pertinente trimiteti-mi mail pentru Riddl la<br />
&#8220;discutzii at gmx dot net&#8221;. Nu uitati sa precizati numele documentului.<br />
Multumesc anticipat.<br />
Aceasta versiune este  putin modificata fata de original, deorece unii termeni<br />
sunau foarte ciudat in ro.<br />
Pentru ultima versiune a acestui document verifica<br />
&lt;http://www.securityorg.net/docs/&gt;.</p>
<p>Lecturare placuta!<br />
______________________________________________________________________<br />
Linux 2.4 NAT HOWTO<br />
Rusty Russell, lista de discutii netfilter@lists.samba.org<br />
$Revision: 1.3 $ $Date: 2002/06/05 13:21:56 $</p>
<p>Acest document descrie cum sa realizezi masquerading, transparent proxy,<br />
forwardare de porturi, si alte forme de NAT pentru kernelurile Linux ver 2.4.</p>
<p>______________________________________________________________________</p>
<p>Cuprins</p>
<p>1. Introducere<br />
2. Care este site-ul oficial si care sunt listele de discutii?<br />
2.1. Ce inseamna NAT?<br />
2.2. De ce as dori sa realizez NAT?<br />
3. Doua tipuri de NAT<br />
4. Trecere rapida de la kernelurile 2.0 si 2.2<br />
4.1. Doresc sa realizez doar masquerading! Help!<br />
4.2. Dar despre ipmasqadm?<br />
5. Controlul a ceea ce dorim sa facem cu NAT?<br />
5.1 Selectare simpla folosind iptables<br />
5.2 Aspecte delicate in privinta selectarii pachetelor ce le dorim<br />
modificate<br />
6. Cum sa modificam pachetele<br />
6.1 Folosirea NAT pentru modificarea adresei sursa (SNAT)<br />
6.1.1 Masquerading<br />
6.2 Folosirea NAT pentru modificarea adresei destinatie (DNAT)<br />
6.2.2 Redirectare<br />
6.3 Mapare complexa<br />
6.3.1. Selectarea de adrese multiple dintr-un sir<br />
6.3.2. Realizarea de mapare NAT nula<br />
6.3.3. Comportamentul NAT standard<br />
6.3.4. Mapare implicita a porturilor sursa<br />
6.3.5. Ce se intampla cand NAT-area nu reuseste<br />
6.3.6. Mapari multiple, Suprapuneri si Conflicte<br />
6.3.7. Schimbarea destinatiei conexiunilor generate local<br />
7. Protocoale speciale<br />
8. Avertizmente privind folosirea NAT<br />
9. Folosirea SNAT si rutarea<br />
10. Folosirea DNAT pentru adrese aflate in aceeasi retea.<br />
11. Multumiri</p>
<p><span id="more-173"></span></p>
<p>______________________________________________________________________</p>
<p>1. Introducere</p>
<p>Bine ai venit!</p>
<p>Esti pe cale sa incepi sa inveti fascinanta (si uneori inspaimantatoare)<br />
lume a NAT-ului: traducerea adreselor de retea. Acest Howto iti va fi<br />
oarecum un ghid precis pentru kernelurile din linux ver. 2.4 si peste.</p>
<p>In kernelul de linux ver. 2.4, a fost introdus suport pentru modificarea<br />
pachetelor, numit &#8220;netfilter&#8221;. Un nivel deasupra acestuia pune la dispozitie<br />
NAT (translatarea adreselor de retea), complet rescris fata de versiunile din<br />
kernelurile anterioare.</p>
<p>(C) 2000 Paul &#8220;Rusty&#8221; Russell.  Sub licenta GNU GPL.</p>
<p>2. Care este site-ul oficial si care sunt listele de discutii?</p>
<p>Sunt trei site-uri oficiale:</p>
<p>o       Multumiri lui Filewatcher &lt;http://netfilter.filewatcher.org/&gt;.<br />
o       Multumiri Echipei Samba si SGI &lt;http://netfilter.samba.org/&gt;.<br />
o       Multumiri lui Harald Welte &lt;http://netfilter.gnumonks.org/&gt;.</p>
<p>Le poti accesa pe toate folosind round-robin DNS la:<br />
&lt;http://www.netfilter.org/&gt; si  &lt;http://www.iptables.org/&gt;</p>
<p>Pentru lista de discutii oficiala de la netfilter, vezi:<br />
&lt;http://www.netfilter.org/contact.html#list&gt;.</p>
<p>2.1. Ce inseamna NAT?</p>
<p>In mod normal, pachetele intr-o retea se deplaseaza de la sursa  (cum ar fi<br />
computerul tau) la destinatia  (cum ar fi www.securityorg.net) prin mai<br />
multe legaturi de retea diferite: de exemplu cam 19 de la locatia in care ma<br />
aflu eu. Nici una din aceste legaturi nu iti modifica pachetul, pur si simplu<br />
este trimis mai departe.</p>
<p>Daca una din aceste legaturi ar fi facut NAT, atunci ar fi modificat sursa sau<br />
destinatia pachetului ce intra. Dupa cum iti imaginezi nu asa a fost conceput<br />
sistemul sa functioneze, si din aceasta cauza NAT este intodeauna ceva<br />
in genul unui infirm. Deobicei legatura care a facut NAT va tine minte cum a<br />
modificat pachetul, si cand un pachet replica vine din cealalta parte, va<br />
realiza modificarea inversa a pachetului replica, asa ca totul va functiona.</p>
<p>2.2. De ce as dori sa realizez NAT?</p>
<p>Intr-o lume perfecta nu ai avea nevoie. Intre timp, principale motive sunt:</p>
<p>Conexiunile prin modem la internet<br />
Cele mai multe ISP-uri iti dau doar o singura adresa IP cand te<br />
conectezi la ei. Poti trimite pachete cu orice adresa sursa pe care o<br />
doresti, dar doar pachetele cu aceasta adresa IP se vor intoarce la<br />
tine. Daca doresti sa folosesti mai multe sisteme (cum ar fi reteaua<br />
de acasa) pentru a le conecta la internet prin aceasta singura<br />
legatura vei avea nevoie de NAT.<br />
Aceasta este de departe cel mai raspandit mod de folosire al NAT-ului<br />
din zilele noastre, cunoscut si sub numele de &#8220;masquerading&#8221; in lumea<br />
Linuxului. Eu numesc aceasta SNAT, deoarece modifici adresa sursa a<br />
primului pachet.</p>
<p>Servere multiple<br />
Uneori doresti sa modifici directia in care sa se indrepte pachetele<br />
ce intra in reteaua ta. In mod frecvent aceasta este (ca si mai sus)<br />
deoarece ai doar o singura adresa IP, dar doresti ca oameni sa poata<br />
sa ajunga la computerele din spatele sistemului cu adresa IP &#8220;reala&#8221;.<br />
Daca rescrii adresa destinatie a pachetelor care intra, poti realiza<br />
acest lucru. Acest tip de NAT a fost numit forwardare (inaintare) de<br />
porturi in versiunile anterioare de Linux.<br />
O variatie des intalnita a acestei aplicatii al NAT-ului este<br />
load-sharing-ul (incarcare partajata), unde se mapeaza mai multe<br />
sisteme, permitand sistemelor sa ajung la aceste sisteme. Daca<br />
realizezi acest lucru la o scara mare, ar fi bine sa te uiti pe<br />
Linux Virtual Server &lt;http://linuxvirtualserver.org/&gt;.</p>
<p>Proxy transparent<br />
Uneori doresti sa para ca fiecare pachet care trece prin sistemul tau<br />
Linux este destinat pentru un program ruland chiar pe sistemul tau.<br />
Acest lucru este folosit pentru a realiza proxy-uri transparente: un<br />
proxy este un program care se interpune intre reteaua ta si lumea<br />
exterioara, mediand comunicarea intre ele. Se numeste transparent<br />
deoarece reteaua ta nici nu va realiza ca foloseste un proxy, doar daca<br />
bineinteles, proxy-ul nu functioneaza.<br />
Squid-ul poate fi configurat sa ruleze in acest mod, si aceasta era<br />
numita redirectare sau realizare de proxy transparent in versiunile<br />
anterioare de linux.</p>
<p>3. Doua tipuri de NAT</p>
<p>Am impartit NAT-ul in doua tipuri: NAT pentru sursa (SNAT) si NAT pentru<br />
destinatie (DNAT).</p>
<p>SNAT este realizat atunci cand modifici adresa sursa al primului pachet:<br />
schimbi sursa de unde porneste conexiunea. SNAT este intodeauna realizat dupa<br />
procesul de rutare al pachetelor, chiar inainte de a pleca pe conexiune<br />
pachetul. Masquerading este o forma particulara de SNAT.</p>
<p>DNAT este realizat cand modifici adresa destinatie al primului pachet: schimbi<br />
destinatia unde va fi facuta conexiunea. DNAT este intodeauna realizat<br />
inainte de rutarea pachetelor, cand pachetul tocmai a venit prin interfata.<br />
Forwardare de porturi, load-sharing-ul, si proxy-ul transparent sunt toate<br />
forme de DNAT.</p>
<p>4. Trecere rapida de la kernelurile 2.0 si 2.2</p>
<p>Imi pare rau pentru aceia dintre dumneavastra socati de trecerea de la<br />
versiunea 2.0 (ipfwadm) la 2.2 (ipchains). Exista vesti bune si vesti proaste.</p>
<p>In primul rand, poti in mod simplu sa folosesti ipchains si ipfwadm ca mai<br />
inainte. Pentru aceasta trebuie sa incarci (insmod) modulele pentru kernel<br />
&#8220;ipchains.o&#8221; sau &#8220;ipfwadm.o&#8221; ce se gasesc in ultima distributie netfilter.<br />
Acestea se exclud reciproc (ai fost avertizat), si nu ar trebui folosite cu<br />
nici un alt modul din netfilter.</p>
<p>Odata ce unul din aceste module a fost incarcat, vei putea folos ipchains si<br />
ipfwadm in mod normal, insa cu unele diferente:</p>
<p>- Setarea de timeout-uri pentru masquerading cu ipchains  -M -S, sau ipfwadm<br />
-M -s nu rezolva nimic. Cum timeout-urile sunt mai mari pentru noua<br />
infrastructura NAT, acest lucru nu ar trebui sa conteze.</p>
<p>- Campurile init_seq, delta si previous_delta in listarea detaliata a<br />
masqueradarii sunt intodeauna zero.</p>
<p>- Resetarea si listarea counter-elor simultana &#8220;-Z -L&#8221; nu mai este posibila:<br />
countere-le nu vor fi resetate.</p>
<p>- Nivelul de compatibilitate nu este foarte bun pentru un numar de conexiuni<br />
foarte mare: nu il folosi pentru gateway-ul corporatiei.</p>
<p>Hackerii pot deasemenea sa observe:</p>
<p>- Acum te poti lega si pe porturile 61000-65095 chiar daca realizezi<br />
masquerading. Codul pentru masqueradare obisnuia sa considere ca nimic in<br />
aceasta raza ar fi fost ceva corect, asa ca programele nu puteau sa o<br />
foloseasca.</p>
<p>- &#8220;Hack-ul&#8221; (nedocumentat) &#8220;getsockname&#8221;, pe care programele ce realizau proxy<br />
transparent il puteau folosi pentru a afla adresa reala a conexiunilor nu<br />
mai este disponibil.</p>
<p>- &#8220;Hack-ul&#8221; (nedocumentat) bind-to-foreign-address (atasare pe o adresa<br />
straina) nu mai este deasemnea implementat; acesta era folosit pentru a<br />
completa iluzia de proxy transparent.</p>
<p>4.1. Doresc sa realizez doar masquerading! Help!</p>
<p>Aceasta este ce vor majoritatea oamenilor. Daca ai o adresa PPP IP dinamica,<br />
vrei in mod simplu sa spui sistemului tau ca toate pachetele ce vin din<br />
reteaua interna ar trebui sa fie modificate astfel incat sa para ca vin de la<br />
sistemul tau.</p>
<p># Incarca modulul NAT (acesta introduce toate modulele necesare)<br />
modprobe iptable_nat</p>
<p># In tabela NAT (-t nat) in chain-ul POSTROUTING adauga o regula<br />
# pentru toate pachetele care ies prin ppp0 (-p ppp0) care precizeaza<br />
# sa masqueradeze conexiunea (-j MASQUERADE).<br />
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</p>
<p># Da drumul la forwardarea IP<br />
echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>Observatie: aici nu faci nici un fel de filtrare a pachetelor: pentru aceasta<br />
citeste Packet Filtering HOWTO: capitolul &#8220;Folosirea impreuna a NAT-ului si a<br />
filtrarii de pachete&#8221;.</p>
<p>4.2. Dar despre ipmasqadm?</p>
<p>Nu este cazul sa ne facem probleme prea mari pentru compatibilitate. Poti<br />
folosi in mod simplu  &#8220;iptables -t nat&#8221; pentru a realiza forwardare de<br />
porturi. De exemplu, in Linux 2.2 ai fi facut:</p>
<p># Linux 2.2<br />
# Forwardeaza pachetele TCP catre portul 8080, adresa 1.2.3.4, spre<br />
# portul 80, adresa 192.168.1.1<br />
ipmasqadm portfw -a -P tcp -L 1.2.3.4 8080 -R 192.168.1.1 80</p>
<p>Acum ar trebui sa faci:</p>
<p># Linux 2.4<br />
# Adauga o regula inainte de procesul rutarii in chain-ul PREROUTING<br />
# (-A PREROUTING) in tabela NAT (-t nat) pentru ca pachetele TCP<br />
# (-p tcp) care vin spre adresa 1.2.3.4 (-d 1.2.3.4), portul 8080<br />
# (&#8211;dport 8080) sa aiba destinatia mapata (-j DNAT) catre<br />
# 192.168.1.1, portul 80 (&#8211;to 192.168.1.1:80)<br />
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 &#8211;dport 8080 \<br />
-j DNAT &#8211;to 192.168.1.1:80</p>
<p>5. Controlul a ceea ce dorim sa facem cu NAT?</p>
<p>Ai nevoie sa scrii reguli NAT pentru a spune kernelului ce conexiuni sa<br />
schimbe, si cum sa le schimbe. Pentru a realiza aceasta folosim comanda<br />
iptables, si precizam ca dorim a schimba tabela NAT prin specificarea optiunii<br />
&#8220;-t nat&#8221;.</p>
<p>Tabela regulilor NAT cuprinde trei liste numite &#8220;chain-uri&#8221;: fiecare regula<br />
este examinata in chain pana cand una se potriveste. Doua chain-uri sunt<br />
numite PREROUTING (pentru DNAT, pentru pachetele care tocmai au intrat) si<br />
POSTROUTING (pentru SNAT, pentru pachetele care sunt pe cale sa iasa). Al<br />
treilea chain (OUTPUT) va fi ignorat in cele ce urmeaza.</p>
<p>Urmatoarea diagrama ilustreaza destul de bine cum stau lucrurile:</p>
<p>_____                                     _____<br />
/     \                                   /     \<br />
PREROUTING &#8211;&gt;[Routing ]&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;POSTROUTING&#8212;&#8211;&gt;<br />
\D-NAT/     [Decision]                    \S-NAT/<br />
|                            ^<br />
|                            |<br />
|                            |<br />
|                            |<br />
|                            |<br />
|                            |<br />
|                            |<br />
&#8212;&#8212;&#8211;&gt; Local Process &#8212;&#8212;</p>
<p>La fiecare dintre punctele de mai sus, cand un pachet trece este determinat<br />
carei conexiuni ii este asociat. Daca este o conexiune noua, este determinat<br />
chain-ul corespunzator in tabela NAT pentru a determina ce sa facem cu acel<br />
pachet. Raspunsul determinat va fi aplicat pentru toate pachetele viitoare<br />
apartinand acelei conexiuni.</p>
<p>5.1 Selectare simpla folosind iptables</p>
<p>iptables admite un numar de optiuni standard dupa cum sunt listate mai jos.<br />
Toate optiunile care incep cu &#8220;&#8211;&#8221; pot fi prescurtate, atat timp cat iptables<br />
poate sa le deosebeasca de alte optiuni. Daca kernelul tau are iptables<br />
compilat ca modul, este necesar sa incarci intai modulul iptables: &#8220;insmod<br />
ip_tables&#8221;.</p>
<p>Cea mai importanta optiune in acest caz este optiunea de selectare a tabelei,<br />
&#8220;-t&#8221;. Pentru toate actiune NAT, vei dori sa folosesti &#8220;-t nat&#8221; pentru tabela<br />
NAT. A doua cea mai importanta optiune este &#8220;-A&#8221; pentru a adauga o noua regula<br />
la sfarsitul unui chain (&#8220;-A POSTROUTING&#8221;), sau &#8220;-I&#8221; pentru a insera o regula<br />
la inceputul unui chain (&#8220;-I PREROUTING&#8221;).</p>
<p>Poti specifia sursa (&#8220;-s&#8221; sau &#8220;&#8211;source&#8221;) si destinatia (&#8220;-d&#8221; sau<br />
&#8220;&#8211;destination&#8221;) pachetelor pe care le doresti sa le prelucrezi prin NAT.<br />
Aceste optiuni pot fi urmate de o singura adresa IP (192.168.1.1), un nume<br />
(www.securityorg.net), sau o adresa de retea (192.168.1.0/24 sau<br />
192.168.1.0/255.255.255.0).</p>
<p>Poti specifica interfata cu care sa se potriveasca regula, de intrare (&#8220;-i&#8221;<br />
sau &#8220;&#8211;in-interface&#8221;) sau de iesire (&#8220;-o&#8221; sau &#8220;&#8211;out-interface&#8221;), dar ceea ce<br />
poti specifica depinde si de chain-ul in care introduci regula: pentru<br />
chain-ul PREROUTING poti selecta numai interfete prin care intra pachetele,<br />
si in chain-ul POSTROUTING poti selecta numai interfete de iesire. Daca<br />
folosesti o interfata gresita iptables iti va da eroare.</p>
<p>5.2 Aspecte delicate in privinta selectarii pachetelor ce le dorim modificate</p>
<p>Am spus mai sus ca poti preciza o adresa sursa si destinatie. Daca vei omite<br />
optiunea privitoare la adresa sursa, atunci regula se va potrivi pentru<br />
orice adresa sursa. Analog, daca omiti optiunea pentru adresa destinatie, atunci<br />
regula se va potrivi pentru orice adresa destinatie.</p>
<p>Poti deasemenea indica un protocol specific (&#8220;-p&#8221; sau &#8220;&#8211;protocol&#8221;), cum ar fi<br />
TCP sau UDP; doar pachetele de acest tip se vor potrivi cu regula. Principalul<br />
motiv pentru a preciza unul dintre aceste protocoale permite apoi folosirea de<br />
noi optiuni: in special optiunile &#8220;&#8211;source-port&#8221; si &#8220;&#8211;destination-port&#8221;<br />
(prescurtate &#8220;&#8211;sport&#8221; si &#8220;&#8211;dport&#8221;).</p>
<p>Aceste optiuni iti permite sa specifici ca numai pachetele cu anumite porturi<br />
destinatie sau porturi sursa se vor potrivi cu regulii. Aceste optiuni sunt<br />
folositoare, de exemplu, pentru redirectarea cererilor web (porturile TCP 80<br />
sau 8080) si nemodificarea celorlalte pachete.</p>
<p>Aceste optiuni trebuie sa fie puse dupa optiunea &#8220;-p&#8221; (care are ca alt efect<br />
incarcarea optiunilor extinse pentru acel protocol). Poti folosi pentru<br />
porturi numere, sau nume cum sunt scrise in fisierul /etc/services.</p>
<p>Toate caracteristicile dupa care poti selecta un pachet sunt detaliate in<br />
pagina de manual pentru iptables (man iptables).</p>
<p>6. Cum sa modificam pachetele</p>
<p>In concluzie, acum stim cum sa selectam pachetele pe care le dorim modificate.<br />
Pentru a scrie regulile complete trebuie sa spunem kernelului cu exactitate<br />
ceea ce dorim sa facem pachetelor.</p>
<p>6.1 Folosirea NAT pentru modificarea adresei sursa</p>
<p>Doresti sa faci SNAT; sa schimbi adresa sursa a conexiunilor cu ceva diferit.<br />
Acesta este realizat in chain-ul POSTROUTING, chiar inainte de a fi trimis<br />
pachetul; acesta este un detaliu important, deoarece inseamna ca orice alceva<br />
in sistemul Linux (rutare, filtrare de pachete) va vedea doar pachetul<br />
neschimbat. Mai inseamna deasemenea ca optiunea &#8220;-o&#8221; (interfata de iesire)<br />
poate fi folosita.</p>
<p>SNAT este specificat folosind optiunea &#8220;-j SNAT&#8221;; si optiunea &#8220;&#8211;to-source&#8221;<br />
specifica o adresa IP, un sir de adrese IP, si un port optional sau un sir de<br />
porturi (doar in cazul protocoalelor UDP si TCP).</p>
<p>## Schimba adresa sursa cu 1.2.3.4<br />
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT &#8211;to 1.2.3.4</p>
<p>## Schimba adresa sursa cu 1.2.3.4, 1.2.3.5 sau 1.2.3.6<br />
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT &#8211;to 1.2.3.4-1.2.3.6</p>
<p>## Schimba adresa sursa cu 1.2.3.4, si porturile intre 1-1023<br />
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT &#8211;to 1.2.3.4:1-1023</p>
<p>6.1.1 Masquerading</p>
<p>Exista un caz particular de SNAT numit masquerading: ar trebui sa fie folosit<br />
numai pentru adrese IP asignate dinamic, cum ar fi in cazul celor ce se<br />
conecteaza prin dial-up (pentru adrese IP statice, foloseste SNAT ca mai sus).</p>
<p>Nu este necesar cand faci masquerading sa specifici adresa sursa: deoarece va<br />
folosi adresa sursa a interfetei prin care va iesi pachetul. Dar ce este mai<br />
importat, daca legatura cu ISP-ul cade, conexiunile (care acum sunt pierdute<br />
oricum) sunt uitate, acest lucru inseamnand mai putine probleme tehnice cand<br />
legatura cu ISP-ul revine cu o noua adresa IP.</p>
<p>## masqueradare pentru ppp0<br />
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</p>
<p>6.2 Folosirea NAT pentru modificarea adresei destinatie (DNAT)</p>
<p>Aceasta se realizeaza  in chain-ul PREROUTING, exact  dupa primirea<br />
pachetului, aceasta insemna ca orice in sistemul Linux (rutare, filtrare de<br />
pachete) va vedea pachetul cu noua adresa destinatie. Mai inseamna ca optiunea<br />
&#8220;-i&#8221; (interfata de intrare) poate fi folosita.</p>
<p>Se specifica folosirea DNAT cu ajutorul optiunii &#8220;-j DNAT&#8221;, iar optiunea<br />
&#8220;&#8211;to-detination&#8221; specifica o adresa IP, un sir de adrese IP, si un port<br />
optional sau un sir de porturi (acest lucru fiind valabil doar pentru<br />
protocoalele UPD si TCP).</p>
<p>## Schimba adresa destinatie cu 5.6.7.8<br />
# iptables -t nat -A PREROUTING -i eth0 -j DNAT &#8211;to 5.6.7.8</p>
<p>## Schimba adresa destinatie cu  5.6.7.8, 5.6.7.9 sau 5.6.7.10.<br />
# iptables -t nat -A PREROUTING -i eth0 -j DNAT &#8211;to 5.6.7.8-5.6.7.10</p>
<p>##Schimba adresa destinatie a traficului spre portul 80 cu 5.6.7.8, port 8080.<br />
# iptables -t nat -A PREROUTING -p tcp &#8211;dport 80 -i eth0 \<br />
-j DNAT &#8211;to 5.6.7.8:8080</p>
<p>6.2.2 Redirectare</p>
<p>Exista un caz particular de DNAT numita redirectare: este o simpla conventie<br />
care este echivalenta cu a realiza DNAT catre adresa interfetei prin care<br />
intra pachetele.</p>
<p>## Trimite traficul care vine pe portul 80 catre squid (proxy-ul<br />
transparent<br />
# iptables -t nat -A PREROUTING -i eth1 -p tcp &#8211;dport 80 \<br />
-j REDIRECT &#8211;to-port 3128</p>
<p>Observatie: squid-ul trebuie sa fie configurat pentru a putea fi folosit ca<br />
proxy transparent!</p>
<p>6.3 Mapare complexa</p>
<p>Sunt cateva lucruri rafinate in folosirea NAT pe care majoritatea oamenilor nu<br />
vor avea nevoie sa le foloseasca. Aceste lucruri sunt documentate mai jos<br />
pentru curiosi.</p>
<p>6.3.1. Selectarea de adrese multiple dintr-un sir</p>
<p>Daca un sir de adrese IP este specificat, adresa IP care va fi folosita este<br />
bazata pe cea mai putin folosita la conexiuni adresa IP de care sistemul stie.<br />
Acest comportament furnizeaza load-balancing primar.</p>
<p>6.3.2. Realizarea de mapare NAT nula</p>
<p>Poti folosi tinta &#8220;-j ACCEPT&#8221; pentru a permite realizarea conexiunii fara sa<br />
fie realizat deloc NAT.</p>
<p>6.3.3. Comportamentul NAT standard</p>
<p>Comportamentul obisnuit este sa modifice conexiunea cat mai putin posibil, cu<br />
exceptia regulilor date de catre utilizator. Aceasta inseamna ca nu vor fi<br />
remapate porturile decat daca suntem obligati sa realizam acest lucru.</p>
<p>6.3.4. Mapare implicita a porturilor sursa</p>
<p>Chiar daca folosirea NAT nu este ceruta pentru o conexiune, translatarea<br />
portului sursa poate fi facut automat, daca o alta conexiune a fost mapata<br />
peste una noua. De exemplu considerati un caz care este comun in masquerading:</p>
<p>1. O conexiune web este realizata de la un sistem cu IP-ul 192.1.1.1 cu portul<br />
sursa 1024 catre www.securityorg.net portul 80.</p>
<p>2. Aceasta conexiune este masqueradata de un sistem care se ocupa cu acest<br />
lucru, pentru a folosi IP-ul sursa al sistemului ce realizeaza masqueradarea<br />
(1.2.3.4)</p>
<p>3. Insusi sistemul ce realizeaza masquerading initiaza o conexiune catre<br />
www.securityorg.net, portul 80, de la 1.2.3.4 (adresa interfetei externe)<br />
portul 1024</p>
<p>4. Codul NAT va modifica portul sursa al celei de-a doua conexiuni cu 1025,<br />
astfel ca sa nu existe conflict intre cele doua conexiuni.</p>
<p>Cand se realizeaza aceasta mapare automata a sursei, porturile sunt impartite<br />
in trei clase:</p>
<p>o Porturile sub 512<br />
o Porturile intre 512 si 1023<br />
o Porturile de la 1024, inclusiv, in sus</p>
<p>Un port nu va fi niciodata mapat automat intr-o clasa diferita.</p>
<p>6.3.5. Ce se intampla cand NAT-area nu reuseste</p>
<p>Daca nu mai este disponibil nici un mod in care sa se relizeze maparea unica a<br />
conexiunii cerute de catre utilizator, conexiunea va fi abandonata. Acest<br />
comportament se aplica ai in cazurile in care pachetele nu au putut fi<br />
clasificate ca parte a unei conexiuni, deoarece sunt malformate, sau sistemul<br />
nu mai are memorie libera, etc.</p>
<p>6.3.6. Mapari multiple, Suprapuneri si Conflicte</p>
<p>Daca ai reguli care folosesc NAT pentru mapare de porturi aflate intr-o raza<br />
comuna; codul NAT este destul de inteligent pentru a evita conflicte. Aceasta<br />
pentru ca, avand doua reguli, este corecta maparea adresei sursa pentru<br />
192.168.1.1 si respectiv 192.168.1.2 in adresa 1.2.3.4.</p>
<p>Mai mult, poti face mapare peste adrese IP reale folosite, atat timp cat<br />
aceste adrese trec deasemenea prin masina care realizeaza maparea. Asa ca daca<br />
ai o retea asignata (1.2.3.0/24), dar ai o retea interna care foloseste<br />
aceasta clasa de IP-uri si inca o retea care foloseste o clasa de adrese IP<br />
private 192.168.1.0/24, poti sa realizezi SNAT pentru adresele cu sursa IP<br />
192.168.1.0/24 peste adresele din reteaua 1.2.3.0, fara sa iti fie teama de<br />
conflicte:</p>
<p># iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 \<br />
-j SNAT &#8211;to 1.2.3.0/24</p>
<p>Aceeasi logica se aplica adreselor folosite de insusi sistemul ce realizeaza<br />
NAT: in acest fel functioneaza si masquerading-ul (prin folosirea impreuna a<br />
adresei interfatei de catre pachetele masqueradate si pachetele &#8220;reale&#8221;<br />
venite de la insusi sistemul ca realizeaza masquerading-ul).</p>
<p>De altfel, poti mapa aceleasi pachete pe mai multe sisteme diferite, si<br />
acestea vor fi folosite in comun. De exemplu, daca nu doresti sa mappezi nimic<br />
peste adresa 1.2.3.5, ai putea sa dai urmatoarea comanda:</p>
<p># iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 \<br />
-j SNAT &#8211;to 1.2.3.0-1.2.3.4 &#8211;to 1.2.3.6-1.2.3.254</p>
<p>6.3.7. Schimbarea destinatiei conexiunilor generate local</p>
<p>Codul NAT iti permite sa introduce reguli in chainul OUTPUT avand ca tinta<br />
DNAT, dar acest lucru nu este in intregime suportat in kernelurile 2.4 (poate<br />
fi programat dar are nevoie de noi optiuni, testari, si putina programare,<br />
asa ca daca nimeni nu il contacteaza pe Rusty pentru al scrie, nu o sa fie<br />
disponibil prea devreme).</p>
<p>Limitarea curenta este faptul ca poti sa schimbi destinatia pachetelor doar<br />
catre sistemul local ( &#8220;-j DNAT &#8211;to 127.0.0.1&#8243;), nu si catre alte sisteme, in<br />
caz contrar replicile nu vor fi primite in mod corect inapoi.</p>
<p>7. Protocoale speciale</p>
<p>Unele protocoale nu accepta sa fie NAT-uite. Pentru fiecare dintre aceste<br />
protocoale, doua module speciale trebuiesc scrie; unul pentru urmarirea<br />
conexiunilor si al doilea pentru operatia de NAT-are propriu-zisa.</p>
<p>In cadrul distributiei netfilter, exista module pentru ftp: ip_conntrack_ftp.o<br />
si ip_nat_ftp.o. Daca le inserezi in kernel (insmod) sau le compilezi in<br />
kernel, atunci realizarea oricarui tip de NAT pentru conexiuni ftp ar trebui<br />
sa functioneze. Daca nu, atunci poti folosi ftp pasiv, si chiar si atunci s-ar<br />
putea sa nu functioneze foarte sigur daca vrei sa realizezi alceva decat SNAT.</p>
<p>8. Avertizmente privind folosirea NAT</p>
<p>Daca realizezi NAT pentru o conexiune, pachetele venind din ambele sensuri<br />
(din afara si din inauntrul retelei) trebuie sa treaca prin sistemul care<br />
realizeaza NAT-area, in caz contrar lucrurile nu vor functiona sigur. In<br />
special, codul urmarii conexiunilor reansambleaza fragmentele, care inseamna<br />
ca nu numai depistarea conexiunilor nu va fi sigura, dar chiar si pachetele<br />
s-ar putea sa nu treaca deloc, ca fragmente fiind retinute.</p>
<p>9. Folosirea SNAT si rutarea</p>
<p>Daca doresti sa realizezi SNAT, vei dori sa fii sigur ca fiecare masina la<br />
care ajung pachete care sunt parte a unei conexiuni SNAT, vor trimite<br />
pachetele replica inapoi la sistemul care realizeaza SNAT-ul.<br />
De exemplu, daca mapezi niste pachete ce ies, cu adresa sursa 1.2.3.4, atunci<br />
ruterul extern trebuie sa stie ca trebuie sa trimita pachetele replica inapoi<br />
(care vor avea adresa destinatie 1.2.3.4) catre acest sistem.<br />
Acest lucru poate fi realizat in urmatoarele moduri:</p>
<p>1. Daca realizezi SNAT peste adresa propriului sistem (pentru care rutarea si<br />
toate celelalte merg deja), nu trebuie sa faci nimic</p>
<p>2. Daca realizezi SNAT peste o adresa nefolosita din propriul LAN (de exemplu,<br />
mappezi peste 1.2.3.99, o adresa IP nefolosita din reteaua ta  1.2.3.0/24),<br />
sistemul ce realizeaza NAT va trebui sa raspunda la cereri ARP pentru aceea<br />
adresa ca si pentru propria sa adresa: cea mai simpla metoda de a rezolva<br />
acest lucru este sa creezi un alias pentru adresa IP, de exemplu:</p>
<p># ip address add 1.2.3.99 dev eth0</p>
<p>3. Daca realizezi SNAT peste o adresa complet diferita, va trebui sa te asiguri<br />
ca masinile la care vor ajunge pachetele SNAT-atate vor ruta aceasta adresa<br />
inapoi catre sistemul pe care se realizeaza SNAT-ul. Aceasta este realizata<br />
deja daca sistemul care realizeaza SNAT-ul este gateway-ul lor default, in caz<br />
contrar va trebui sa adaugi o ruta pe fiecare sistem prin care trec pachetele<br />
modificate.</p>
<p>10. Folosirea DNAT pentru adrese aflate in aceeasi retea.</p>
<p>Daca realizezi forwardare de porturi inapoi in aceeasi retea, trebuie sa fii<br />
sigur ca atat pachetele viitoare cat si pachetele ce vin in replica vor trece<br />
prin sistemul ce realizeaza DNAT-ul (pentru ca acestea sa fie modificate).<br />
Codul NAT va bloca (inca din ver. 2.4.0-test6) pachetele ICMP de redirectare<br />
care rezulta atunci cand pachetele NAT-ate se indreapta catre aceeasi interfata<br />
spre care au venit, dar serverul care primeste acele pachete va incerca in<br />
continuare sa raspunda direct catre client (care nu va recunoaste pachetele<br />
replica).</p>
<p>Cazul clasic este cand un sistem din reteaua interna incearca sa acceseze<br />
serverul www &#8220;public&#8221;, care este defapt DNAT-at de la adresa publica (1.2.3.4)<br />
catre un sistem din reteaua interna (192.168.1.1), astfel:</p>
<p># iptables -t nat -A PREROUTING -d 1.2.3.4 \<br />
-p tcp &#8211;dport 80 -j DNAT &#8211;to 192.168.1.1</p>
<p>O cale este sa rulezi un server de DNS intern care sa stie adresa IP reala<br />
(interna) al site-ului public de web, si sa inainteze toate celelate cereri<br />
catre un server DNS extern. Aceasta inseamna ca va fi folosita o conexiune<br />
directa catre server-ul de web, fara sa mai fie nevoie de a trece prin<br />
sistemul care realizeaza NAT.</p>
<p>Cealalta cale este sa realizezi, pe sistemul care face DNAT, mapparea adresei<br />
sursa spre propria lui adresa pentru conexiunile venind din reteaua interna,<br />
pacalind serverul de web sa trimita pachetele replica spre masina ce se ocupa<br />
cu NAT-area. Pentru acest exemplu vom proceda astfel (presupunem ca adresa IP<br />
al sistemului care realizeaza NAT este 192.168.1.250):</p>
<p># iptables -t nat -A POSTROUTING -d 192.168.1.1 -s 192.168.1.0/24 \<br />
-p tcp &#8211;dport 80 -j SNAT &#8211;to 192.168.1.250</p>
<p>Deoarece regula din chain-ul PREROUTING este executata prima, pachetele vor fi<br />
deja destinate pentru server-ul de web intern: putem preciza care din pachete<br />
sunt din reteaua interna dupa adresa IP sursa.</p>
<p>11. Multumiri</p>
<p>Multumirile sunt in primul rand pentru WatchGuard, si David Bonn, care a<br />
crezut in ideea netfilter destul pentru a ma sustine sa o tranform in<br />
realitate. Si pentru toti ceilalti, care m-au suportat cand faceam pe grozavul<br />
cand am invatat despre uratenia NAT-ului, in special celor ce mi-au citit<br />
jurnalul.</p>
<p>Rusty.</p>
]]></content:encoded>
			<wfw:commentRss>http://resurse-educationale.uv.ro/?feed=rss2&#038;p=173</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Folosirea lui iptables pentru filtrarea pachetelor in kernelurile versiunea 2.4</title>
		<link>http://resurse-educationale.uv.ro/?p=171</link>
		<comments>http://resurse-educationale.uv.ro/?p=171#comments</comments>
		<pubDate>Wed, 06 Apr 2011 12:47:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[filtru de pachete]]></category>
		<category><![CDATA[icmp]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[ipchains]]></category>
		<category><![CDATA[ipfwadm]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[protocol]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://resurse-educationale.uv.ro/?p=171</guid>
		<description><![CDATA[traducere ver. 0.6 de catre Riddl Multumiri tuturor celor care m-au ajutat. Lui Gushterul in special. Deasemenea multumiri si lui Little Dragon. Observatie f importanta: probabil ca exista unele greseli in acest document. Am tradus si eu cum m-am priceput &#8230; <a href="http://resurse-educationale.uv.ro/?p=171">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>traducere ver. 0.6 de catre Riddl</p>
<p>Multumiri tuturor celor care m-au ajutat. Lui Gushterul in special.<br />
Deasemenea multumiri si lui Little Dragon.<br />
Observatie f importanta: probabil ca exista unele greseli in acest document.<br />
Am tradus si eu cum m-am priceput mai bine, daca descoperiti greseli de<br />
traducere si pentru observatii pertinente mail me (Riddl) at<br />
&#8220;discutzii at gmx dot net&#8221;. Nu uitati sa precizati numele documentului.<br />
Multumesc anticipat.<br />
Aceasta versiune este putin modificata fata de original, deorece unii termeni<br />
sunau foarte aiurea in ro.<br />
Pentru ultima versiune a acestui document verifica<br />
&lt;http://www.securityorg.net/docs/&gt;.</p>
<p>Lecturare placuta!</p>
<p>______________________________________________________________________</p>
<p>Linux 2.4 Packet Filtering HOWTO<br />
Rusty Russel, lista de discutii netfilter@lists.samba.org<br />
$Revision: 1.2 $ $Date: 2002/02/19 11:33:43 $</p>
<p>Acest document descrie folosirea lui iptables pentru filtrarea pachetelor in<br />
kernelurile versiunea 2.4.<br />
______________________________________________________________________</p>
<p>Cuprins</p>
<p>1. Introducere<br />
2. Care este site-ul oficial? Exista vreo lista de discutii?<br />
3. Deci, ce inseamna filtru de pachete?<br />
3.1 De ce as vrea sa filtrez pachetele?<br />
3.2 Cum filtrez pachetele sub linux?<br />
3.2.1 iptables<br />
3.2.2 Crearea regulilor permanente<br />
4. Cine dracu esti tu, si de ce te joci cu kernelul meu?<br />
5. Ghidul intr-adevar rapid al lui Rusty pentru filtrarea de pachete<br />
6. Cum traverseaza pachetele filtrele?<br />
7. Folosirea iptables<br />
7.1 Ce vei vedea cand porneste calculatorul<br />
7.2 Operatii pentru o singura regula<br />
7.3 Optiuni de filtrare<br />
7.3.1 Specificarea IP-ului sursa si destinatie<br />
7.3.2 Specificarea inversa<br />
7.3.3 Specificarea protocolului<br />
7.3.4 Specificarea unei interfete<br />
7.3.5 Specificarea fragmentelor<br />
7.3.6 Optiuni extinse la iptables: Noi potriviri<br />
7.3.6.1 Optiuni extinse TCP<br />
7.3.6.1.1 O explicatie pentru flag-urile TCP<br />
7.3.6.2 Optiuni extinse UDP<br />
7.3.6.3 Optiuni extinse ICMP<br />
7.3.6.4 Alte optiuni extinse pentru potrivire<br />
7.3.6.5 Potrivirea dupa stare<br />
7.4 Argumente asupra tintei<br />
7.4.1 Chain-uri definite de utilizator<br />
7.4.2 Optiuni extinse la iptables: Noi tinte<br />
7.4.3 Tinte speciale construite default<br />
7.5 Operatii asupra unui intreg chain<br />
7.5.1 Creearea unui nou chain<br />
7.5.2 Stergerea unui chain<br />
7.5.3 Stergerea tuturor regulilor unui chain<br />
7.5.4 Listarea unui chain<br />
7.5.5 Resetarea counter-elor<br />
7.5.6 Setarea policy-ului</p>
<p>8. Folosirea ipchains si ipfwadm<br />
9. Folosirea impreuna a NAT-ului si a filtrarii de pachete<br />
10. Diferente intre iptables si ipchains<br />
11. Sfaturi asupra designului filtrului de pachete</p>
<p><span id="more-171"></span></p>
<p>______________________________________________________________________</p>
<p>1. Introducere</p>
<p>Bine ai venit, cititorule. (:))</p>
<p>Se presupune ca stii ce este aceea o adresa IP, adresa de retea, netmask,<br />
routare si DNS. Daca nu, se recomanda sa citesti Network Concepts Howto.<br />
Acest HOWTO loveste intre o introducere draguta (care te poate lasa<br />
increzator pentru moment, dar neprotejat in lumea reala) si o dezvaluire<br />
total neprelucrata (care ii vor lasa pe toti, mai putin caracterele tari,<br />
in confuzie, paranoici si in cautarea de arme grele).</p>
<p>Reteaua ta nu este sigura. Problema permiterii comunicarii rapide si<br />
comode, in acelasi timp cu restrictia acesteia numai pentru bine si nu in<br />
mod malefic, este asemanatoare cu alte probleme opuse  cum ar fi permiterea<br />
vorbirii libere in acelasi timp cu refuzarea unui strigat de &#8220;FOC!!&#8221; intr-un<br />
teatru aglomerat. Nu va fi rezolvata aceasta problema in spatiul acestui<br />
HOWTO.</p>
<p>Asa ca doar tu poti sa decizi unde va fi compromisul. Voi incerca sa te<br />
instruiesc in folosirea unor comenzi disponibile si a unor vulnerabilitati<br />
de care sa fii constient, in speranta ca vei folosi aceasta in mod pozitiv<br />
si nu in scopuri malefice. Aceasta este o alta problema asemanatoare.</p>
<p>(C) 2000 Paul &#8220;Rusty&#8221; Russell.  Cu licenta sub  GNU GPL.</p>
<p>2. Care este site-ul oficial? Exista vreo lista de discutii?</p>
<p>Sunt trei site-uri oficiale:</p>
<p>o 	Multumiri lui Filewatcher &lt;http://netfilter.filewatcher.org/&gt;.<br />
o 	Multumiri Echipei Samba si SGI &lt;http://netfilter.samba.org/&gt;.<br />
o 	Multumiri lui Harald Welte &lt;http://netfilter.gnumonks.org/&gt;.</p>
<p>Le poti accesa pe toate folosind round-robin DNS la:<br />
&lt;http://www.netfilter.org/&gt; si  &lt;http://www.iptables.org/&gt;</p>
<p>Pentru lista de discutii oficiala de la netfilter, vezi:<br />
&lt;http://www.netfilter.org/contact.html#list&gt;.</p>
<p>3. Deci, ce inseamna filtru de pachete?</p>
<p>Un filtru de pachete este o bucatica de software care se uita la header-ul<br />
pachetelor pe masura ce ele intra, si decid soarta intregului pachet. Acest<br />
filtru poate decide sa ignore pachetul (DROP) (respinge pachetul ca si cum<br />
nu l-ar fi primit niciodata), accepta (ACCEPT) pachetul (lasa pachetul sa<br />
intre), sau alte decizii mai complicate.</p>
<p>Sub linux, filtrarea de pachete este construita in kernel (ca modul sau<br />
construita in el), si sunt cateva lucruri complicate pe care le putem face cu<br />
pachetele, dar principiul general de examinare al header-ului pachetului si<br />
decidere asupra sortii pachetului este inca acolo.</p>
<p>3.1 De ce as vrea sa filtrez pachetele?</p>
<p>Control. Securitate. Vigilenta.</p>
<p>Control:<br />
cand folosesti un sistem Linux pentru a-ti conecta reteaua interna<br />
la o alta retea (sa spunem, Internet) ai posibilitatea de a permite<br />
un anumit tip de trafic, si sa refuzi pe altele. De exemplu,<br />
header-ul contine adresa destinatie a unui pachet, asa ca poti<br />
preveni pachetele sa se duca spre o anumita parte a retelei<br />
exterioare. Ca un alt exemplu, folosesc Netscape pentru accesarea<br />
arhivelor Dilbert. Sunt reclame pe pagina de la doubleclick.net, si<br />
Netscape imi pierde timpul incarcandu-le. Spunand filtrului de pachete<br />
sa nu permita pachete de la sau spre nici una din adresele detinute<br />
de catre doubleclick.net, rezolva aceasta problema (cu toate acestea<br />
sunt modalitati mai bune pentru aceasta: vezi Junkbuster).</p>
<p>Securitate:<br />
cand sistemul tau Linux este singurul intre haosul Internetului<br />
si reteaua ta ordonata si delicata, este placut sa stii ca poti<br />
sa restrictionezi ceea ce vine tropaind la usa. De exemplu, poti sa<br />
permiti la tot sa iasa din retea, dar ai putea fi ingrijorat de<br />
binecunoscutul &#8220;Ping al Mortii&#8221; venind de la persoanele din afara rau<br />
intentionate. Ca un alt exemplu, s-ar putea sa nu doresti ca<br />
persoanele din afara sa se telnet-uiasca pe sistemul tau Linux, chiar<br />
daca toate conturile tale au parole. Poate doresti (ca multi oameni)<br />
sa fii un observator  al Internet-ului, si nu server (de voie, sau in<br />
alt mod). Pur si simplu nu lasa pe nimeni sa se conecteze, punand<br />
fitrul de pachete sa respinga pachetele folosite la initierea de<br />
conexiuni.</p>
<p>Vigilenta:<br />
uneori o masina prost configurata in reteaua locala va decide sa<br />
arunce pachete spre lumea din afara. Este dragut sa-i spui filtrului de<br />
pachete sa te anunte daca se intampla ceva anormal; poate poti face<br />
ceva cu privire la acel lucru, sau poate esti doar curios.</p>
<p>3.2 Cum filtrez pachetele sub linux?</p>
<p>Kernelurile Linux au avut filtrare de pachete inca de la versiunile 1.1.<br />
Prima generatie, bazata pe ipfw de la BSD, a fost portata de catre Alan Cox<br />
spre sfarsitului anului 1994. Aceasta a fost dezvoltata de catre Jos Vos si<br />
altii pentru Linux 2.0; comanda pentru utilizatori &#8220;ipfwadm&#8221; controla<br />
regulile de filtrare ale kernelului. La mijlocului anului 1998, pentru Linux<br />
2.2, am rescris puternic kernelul cu ajutorul lui Michael Neuling, si am<br />
introdus comanda pentru utilizatori &#8220;ipchains&#8221;. In sfarsit, a patra generatie<br />
de comenzi, &#8220;iptables&#8221;, si o noua rescriere a kernelului s-a intamplat la<br />
mijlocul anului 1999 pentru Linux 2.4. Acest HOWTO este centrat pe iptables.</p>
<p>Ai nevoie de un kernel care are infrastructura netfilter in el: netfilter este<br />
un cadru in interiorul kernelului Linux in care alte lucruri (cum ar fi<br />
modulul de iptables) se pot introduce. Asta inseamna ca ai nevoie de kernel<br />
versiune 2.3.15 sau peste, si sa raspunzi &#8220;Y&#8221; la CONFIG_NETFILTER in<br />
configurarea kernelului.</p>
<p>Comanda iptables comunica kernelului si ii spune ce pachete sa filtreze.</p>
<p>3.2.1 iptables</p>
<p>Comanda iptables insereaza si sterge reguli din tabela de filtrare a<br />
pachetelor din kernel. Asta inseamna ca orice vei seta, va fi pierdut dupa<br />
rebootare; vezi &#8220;Crearea regulilor permanente&#8221; pentru cum sa fii sigur ca vor<br />
fi restaurate data urmatoare cand va boota Linuxul.</p>
<p>iptables este un inlocuitor pentru ipfwadm si ipchains: vezi &#8220;Folosirea<br />
ipchains si ipfwadm&#8221; pentru a afla cum poti evita fara probleme folosirea<br />
iptables daca folosesti una din aceste comenzi.</p>
<p>3.2.2 Crearea regulilor permanente</p>
<p>Setarile firewall-ului tau curent sunt pastrate in kernel, si de aceea vor fi<br />
pierdute la rebootare. Poti folosi scripturile iptables-save si<br />
iptables-restore sa le salvezi, sau restaurezi dintr-un fisier.</p>
<p>O alte cale este sa pui comenzile cerute sa iti setezi regulile intr-un<br />
script de initializare. Ai grija sa faci ceva inteligent in caz ca una din<br />
comenzi nu ar reusi (de obicei &#8220;exec /sbin/sulogin&#8221;).</p>
<p>4. Cine dracu esti tu, si de ce te joci cu kernelul meu?</p>
<p>Sunt Rusty Russel; cel ce mentine Linux IP Firewall si doar un alt<br />
programator care s-a intamplat sa fie in locul potrivit la momentul potrivit.<br />
Am scris ipchains (vezi mai sus &#8220;Cum filtrez pachetele sub linux?&#8221; pentru a da<br />
credit celor care au facut de fapt munca), si am invatat suficient sa fac<br />
cum trebuie de data asta filtrarea de pachete. Sper.</p>
<p>WatchGuard &lt;http://www.watchguard.com&gt;, o compania excelenta de firewall-uri<br />
care vinde chiar simpaticul plug-in Firebox, s-a oferit sa ma plateasca sa nu<br />
fac nimic, pentru a-mi petrece tot timpul meu sa scriu asta, si sa imi<br />
mentin munca anterioara. Am preconizat 6 luni, si mi-au luat 12, dar la<br />
sfarsit am simtit ca l-am facut cum trebuie. Multe rescrieri, o cedare a<br />
unui hardisk, un laptop furat, doua sisteme de fisiere corupte si un<br />
monitor spart mai tarziu, asta este.</p>
<p>Cat sunt aici, vreau sa indrept niste idei gresite ale unor oameni: nu sunt<br />
un guru al kernelului. Stiu asta, pentru ca munca mea pe partea din kernel<br />
m-a adus in contact cu unii din acestia: David S. Miller, Alexey Kuznetsov,<br />
Andi Kleen, Alan Cox. Oricum, sunt cu totii ocupati sa faca magia din<br />
interior,  lasandu-ma sa avansez cu greu prin superficialitate unde este<br />
sigur.</p>
<p>5. Ghidul intr-adevar rapid al lui Rusty pentru filtrarea de pachete</p>
<p>Cei mai multi oameni au o singura conexiune PPP spre Internet, si nu vor ca<br />
cineva sa intre inapoi in reteaua lor, iata firewall-ul:</p>
<p>## Se insereaza modulele pentru connection-tracking (nu este necesar<br />
## daca sunt compilate in kernel)<br />
# insmod ip_conntrack<br />
# insmod ip_conntrack_ftp</p>
<p>## Se creeaza chain-ul care blocheaza conexiunile noi, cu exceptia celor<br />
## venite din interior.</p>
<p># iptables -N block<br />
# iptables -A block -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br />
# iptables -A block -m state &#8211;state NEW -i ! ppp0 -j ACCEPT<br />
# iptables -A block -j DROP</p>
<p>## Se sare la acest chain din chain-urile INPUT si FORWARD<br />
# iptables -A INPUT -j block<br />
# iptables -A FORWARD -j block</p>
<p>6. Cum traverseaza pachetele filtrele?</p>
<p>Kernelul porneste cu trei liste de reguli in tabela de &#8220;filtrare&#8221;; aceste<br />
liste sunt numite chain-uri ale firewall-ului sau pur si simplu chain-uri<br />
(lanturi). Cele trei chain-uri se numesc INPUT, OUTPUT si FORWARD.</p>
<p>Pentru fanii ASCII, chain-urile sunt aranjate cam in felul urmator: (Nota:<br />
acesta este un aranjament foarte diferit fata de cel din kernelurile ver.<br />
2.0 si 2.2 !)</p>
<p>_____<br />
Incoming                 /     \         Outgoing<br />
&#8211;&gt;[Routing ]&#8212;&gt;|FORWARD|&#8212;&#8212;-&gt;<br />
[Decision]     \_____/        ^<br />
|                        |<br />
v                       ____<br />
___                     /    \<br />
/   \                   |OUTPUT|<br />
|INPUT|                   \____/<br />
\___/                       ^<br />
|                        |<br />
&#8212;-&gt; Local Process &#8212;-</p>
<p>Cele trei cercuri reprezinta cele trei chain-uri despre care am vorbit<br />
anterior. Cand un pachet ajunge la un cerc din diagrama, acel chain este<br />
examinat pentru a decide soarta pachetului. In cazul in care chain-ul spune sa<br />
ignore pachetul (DROP), este taiat acolo, daca insa chain-ul spune sa accepte<br />
pachetul (ACCEPT), atunci pachetul continua sa parcurga diagrama.</p>
<p>Un chain este o lista de verificare cu reguli. Fiecare regula spune &#8220;daca<br />
headerul pachetului arata asa, atunci iata ce sa faci cu pachetul&#8221;. Daca<br />
regula nu se potriveste cu pachetul, atunci urmatoarea regula din chain<br />
(lant) este examinata. In final, daca nu mai exista reguli de examinat,<br />
kernelul se uita la politica acelui chain-ului pentru a decide soarta pachetului.<br />
Intr-un sistem sigur, politica in chain-uri este de obicei sa taie pachetul<br />
(DROP).</p>
<p>1. Cand un pachet vine (sa zicem, prin placa de retea) kernelul se<br />
uita intai la destinatia pachetului: aceasta se numeste &#8220;routing&#8221;<br />
(rutare).</p>
<p>2. Daca pachetul este destinat pentru aceasta masina, pachetul trece pe<br />
diagrama in chain-ul INPUT. Daca trece de acest chain, orice proces care<br />
asteapta acel pachet il va primi.</p>
<p>3. In caz contrar, daca kernelul nu are forwarding-ul pus, sau nu stie<br />
cum sa forward-eze pachetul, acesta este ignorat. Daca este pus<br />
forwarding-ul, si pachetul are ca destinatie o alta interfata de<br />
retea (daca mai ai inca una), atunci pachetul se duce in diagrama<br />
noastra direct catre chain-ul FORWARD. Daca este acceptat pachetul va<br />
fi transmis.</p>
<p>4. In final, un program ce ruleaza pe sistem poate trimite pachete.<br />
Aceste pachete trec direct in chain-ul OUTPUT: daca este acceptat<br />
pachetul isi continua drumul fara sa conteze interfata spre care este<br />
destinat.</p>
<p>7. Folosirea iptables</p>
<p>iptables are o pagina de manual destul de detaliata (man iptables), si daca<br />
ai nevoie de detalii mai in amanunt. Aceia dintre voi familiarizati cu<br />
ipchains vor dori poate sa se uite la &#8220;Diferente intre iptables si<br />
ipchains&#8221;; sunt comenzi foarte similare.</p>
<p>Sunt mai multe lucruri pe care le poti face cu iptables. Pornesti la drum cu<br />
trei chainu-ri default care nu pot fi sterse INPUT, OUTPUT si FORWARD. Sa<br />
privim operatiile care se pot aplica pentru un intreg chain:</p>
<p>1. Creearea unui chain nou (-N).<br />
2. Stergerea unui chain gol (care nu contine reguli) (-X).<br />
3. Schimbarea politicii pentru un chain default (-P).<br />
4. Listarea regulilor dintr-un chain (-L).<br />
5. Stergerea tuturor regulilor dintr-un chain (-F).<br />
6. Resetarea counter-elor de pachete si bytes pentru toate regulile<br />
dintr-un chain (-Z).</p>
<p>Sunt mai multe moduri in care se pot manipula regulile intr-un chain:</p>
<p>1. Adaugarea in coada chain-ului a unei noi reguli (-A).<br />
2. Insereaza o regula noua la o anumita pozitie in chain (-I). Daca<br />
nu este precizata pozitia printr-un numar atunci regula este adaugata<br />
la inceputul chain-ului.<br />
3. Inlocuieste o regula la o anumita pozitie in chain (-R).<br />
4. Sterge o regula la o anumita pozitie in chain, sau prima care se<br />
potriveste (-D).</p>
<p>7.1 Ce vei vedea cand porneste calculatorul</p>
<p>Iptables poate fi un modul, numit (&#8220;iptable_filter.o&#8221;), care ar trebui sa fie<br />
incarcat in mod automat cand rulezi prima oara iptables. Poate fi deasemenea<br />
compilat in kernel in mod permament.</p>
<p>Inainte de rularea oricarei comenzi iptables (ai grija: unele distributii vor<br />
rula iptables in scripturile lor de initializare), nu vor fi reguli in nici<br />
una din chain-urile default (&#8220;INPUT&#8221;, &#8220;OUTPUT&#8221; si &#8220;FORWARD&#8221;), toate<br />
chain-urile vor avea politica de acceptare a pachetelor (ACCEPT). Poti schimba<br />
politica default al chain-ului FORWARD prin stipularea optiunii &#8220;forward=0&#8243;<br />
modulului iptable_filter. (n.t. sau &#8220;echo 0 &gt; /proc/sys/net/ipv4/ip_forward&#8221;,<br />
depinde insa si de distributie, pe redhat default inseamna ca forward-ul<br />
este 0)</p>
<p>7.2 Operatii pentru o singura regula</p>
<p>Aceasta este paine-si-untul, sarea si piperul, si ce mai vreti voi, a filtrarii<br />
de pachete; manipularea regulilor. Cel mai obisnuit, vei folosi probabil<br />
comenzile de adaugare (-A) si stergere (-D). Celelalte (-I pentru inserare<br />
si -R pentru inlocuire) sunt doar extensii ale acestor concepte.</p>
<p>Fiecare regula specifica o multime de conditii pe care un pachet trebuie sa le<br />
indeplineasca si ce sa faca daca acestea sunt indeplinite (o &#8220;tinta&#8221;<br />
(target)). De exemplu, s-ar putea sa doresti sa ignori toate pachetele de<br />
tip ICMP care vin de la adresa 127.0.0.1. Deci, in acest caz conditiile<br />
noastre sunt ca protocolul sa fie ICMP si ca adresa sursa sa fie 127.0.0.1.<br />
&#8220;tinta&#8221; noastra este DROP. 127.0.0.1 este interfata &#8220;loopback&#8221;, pe care o ai<br />
chiar daca nu ai conexiune reala de retea. Poti folosi programul &#8220;ping&#8221;<br />
pentru a genera acest tip de pachete (pur si simplu trimite pachete ICMP de<br />
tip 8 (echo request) la care toate host-urile ar trebui sa raspunda cu<br />
pachete ICMP de tip 0 (echo replay)). Aceast program este foarte folositor<br />
pentru teste.</p>
<p># ping -c 1 127.0.0.1<br />
PING 127.0.0.1 (127.0.0.1): 56 data bytes<br />
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms</p>
<p>&#8212; 127.0.0.1 ping statistics &#8212;<br />
1 packets transmitted, 1 packets received, 0% packet loss<br />
round-trip min/avg/max = 0.2/0.2/0.2 ms<br />
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP<br />
# ping -c 1 127.0.0.1<br />
PING 127.0.0.1 (127.0.0.1): 56 data bytes</p>
<p>&#8212; 127.0.0.1 ping statistics &#8212;<br />
1 packets transmitted, 0 packets received, 100% packet loss<br />
#</p>
<p>Poti vedea aici ca primul ping reuseste (&#8220;-c 1&#8243; spune sa sa trimita doar un<br />
singur pachet).</p>
<p>Apoi adaugam in coada (-A) chain-ului &#8220;INPUT&#8221;, o regula ce spune ca<br />
pentru pachetele de la 127.0.0.1 (&#8220;-s 127.0.0.1&#8243;) de tip ICMP (&#8220;-p icmp&#8221;)<br />
trebuie sa sarim la &#8220;DROP&#8221; (&#8220;-j DROP&#8221;).</p>
<p>Apoi testam regula noastra, folosind al doilea ping. Va fi o pauza pana cand<br />
programul se da batut sa astepte un raspuns care nu va veni niciodata. (:)),<br />
cat de DRAMATIC)</p>
<p>Am putea sa stergem regula in  doua moduri. Intai, deoarece stim ca este<br />
singura regula din chain-ul INPUT, putem folosi o stergere numarata, ca<br />
in:</p>
<p># iptables -D INPUT 1<br />
#</p>
<p>Pentru a sterge regula cu numarul 1 in chain-ul de INPUT.</p>
<p>Al doilea mod este sa scriem comanda prin care am introdus regula -A, dar sa<br />
inlocuim -A cu -D. Aceasta este folositor cand ai un chain complex de reguli<br />
si nu doresti sa le numeri ca sa iti dai seama ca este a 37-a regula de<br />
care vrei sa scapi. In aces caz, vom folosi:</p>
<p># iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP<br />
#</p>
<p>Sintaxa comenzii -D trebuie sa aiba exact aceleasi optiuni cum are comanda -A<br />
(sau -I, sau -R). Daca sunt reguli identice in acelasi chain, numai prima<br />
regula va fi stearsa.</p>
<p>7.3 Optiuni de filtrare</p>
<p>Am vazut folosirea optiunii &#8220;-p&#8221; pentru a specifica protocolul, si optiunii<br />
&#8220;-s&#8221; pentru a specifica adresa sursa, dar sunt alte optiuni pe care le putem<br />
folosi pentru a preciza caracteristici ale pachetului. Ceea ce urmeaza este<br />
un compedium complet.</p>
<p>7.3.1 Specificarea IP-ului sursa si destinatie</p>
<p>Adresele IP ale sursei (&#8220;-s&#8221;, &#8220;&#8211;source&#8221; sau &#8220;&#8211;src&#8221;) si destinatiei (&#8220;-d&#8221;,<br />
&#8220;&#8211;destination&#8221; sau &#8220;&#8211;dst&#8221;) pot fi specificate in patru moduri. Cea mai<br />
obisnuita forma este sa folosesti numele complet, cum ar fi &#8220;localhost&#8221; sau<br />
&#8220;www.securityorg.net&#8221;. Cea de-a doua cale este sa specifici adresa IP cum ar fi<br />
&#8220;127.0.0.1&#8243;.</p>
<p>Cea de a treia si a patra cale permite specificarea unui grup de adrese IP,<br />
cum ar fi &#8220;199.95.207.0/24&#8243; sau &#8220;199.95.207.0/255.255.255.0&#8243;. Amandoua<br />
specifica orice adresa IP de la 199.95.207.0 pana la 199.95.207.255 inclusiv;<br />
cifrele dupa &#8220;/&#8221; spun care parti din adresa IP sunt semnificative. &#8220;/32&#8243; sau<br />
&#8220;/255.255.255.255&#8243; este default (se potriveste cu toata adresa IP). Pentru a<br />
specifica oricare adresa IP &#8220;/0&#8243; poate fi folosit, astfel:</p>
<p>[ NOTA: "-s 0/0" este redundant aici. ]<br />
# iptables -A INPUT -s 0/0 -j DROP<br />
#</p>
<p>Aceasta este folosit in mod rar, deoarece efectul de mai sus este asemanator<br />
cu nespecificare deloc a optiunii &#8220;-s&#8221;.</p>
<p>7.3.2 Specificarea inversa</p>
<p>Multe optiuni, inclusiv optiunile &#8220;-s&#8221; (sau &#8220;&#8211;source&#8221;) si &#8220;-d&#8221;<br />
(&#8220;&#8211;destination&#8221;) pot avea argumentele precedate de &#8220;!&#8221; (pronuntat &#8220;nu&#8221;)<br />
pentru a corespunde adreselor care NU sunt egale cu adresele date. De exemplu,<br />
&#8220;-s ! localhost&#8221; corespunde oricarui pachet care nu vine de la localhost.</p>
<p>7.3.3 Specificarea protocolului</p>
<p>Protocolul poate fi specificat prin optiunea &#8220;-p&#8221; (sau &#8220;&#8211;protocol&#8221;).<br />
Protocolul poate fi un numar ( daca stii valorile numerice de protocol pentru<br />
IP) sau un nume pentru cazurile speciale de &#8220;TCP&#8221;, &#8220;UDP&#8221; sau &#8220;ICMP&#8221;. Nu<br />
conteaza daca se foloseste sau nu CAPS, asa ca &#8220;tcp&#8221; merge la fel ca si<br />
&#8220;TCP&#8221;.</p>
<p>Numele protocolului poate fi precedat de &#8220;!&#8221;, pentru a inversa, ca si &#8220;-p !<br />
tcp&#8221; pentru a specifica pachetele care nu sunt TCP.</p>
<p>7.3.4 Specificarea unei interfete</p>
<p>Optiunea &#8220;-i&#8221; (sau &#8220;&#8211;in-interface&#8221;) si &#8220;-o&#8221; (sau &#8220;&#8211;out-interface&#8221;)<br />
specifica numele interfatei cu care sa corespunda. O interfata este<br />
dispozitivul fizic prin care intra pachetul (&#8220;-i&#8221;) sau prin care iese<br />
pachetul (&#8220;-o&#8221;). Poti folosi comanda ifconfig pentru a lista interfetele<br />
care sunt &#8220;sus&#8221; (i.e., in stare de functionare in acel moment).</p>
<p>Pachetele care traverseaza chain-ul &#8220;INPUT&#8221; nu au o interfata de iesire, asa<br />
ca orice regula care foloseste &#8220;-o&#8221; in acest chain nu se va potrivi<br />
niciodata. In mod similar pachetele care travereseaza chain-ul OUTPUT nu au o<br />
interfata de intrare, asa ca orice regula care foloseste &#8220;-i&#8221; in acest<br />
chain nu se va potrivi niciodata.</p>
<p>Doar pachetele care travereseaza chain-ul FORWARD au o interata de intrare si<br />
de iesire. Este perfect valabil sa specifici o interfata care nu exista;<br />
regula nu se va potrivi cu nici un pachet pana cand interfata nu este sus.<br />
Aceasta este extrem de folositor pentru legaturi PPP de dial-up (de obicei<br />
interfete ppp0) si asemanatoare.</p>
<p>Ca un caz special, un nume de interfata terminandu-se cu &#8220;+&#8221; se va potrivi cu<br />
toate interfetele (fie ca exista sau nu) care incep cu acel sir de caractere.<br />
De exemplu pentru a specifica o regula care sa se potriveasca tuturor<br />
interfetelor PPP, optiunea -i ppp+ ar fi folosita.</p>
<p>Numele interfetei poate fi precedata de &#8220;!&#8221; cu spatii in jur, pentru a<br />
corespunde cu pachetul care nu se potriveste cu intefata specificata, de<br />
exemplu: -i ! ppp+.</p>
<p>7.3.5 Specificarea fragmentelor</p>
<p>Uneori un pachet este prea mare pentru a incape cu totul pe conexiune. Cand<br />
aceasta se intampla, pachetul este divizat in fragmente, si trimis ca pachete<br />
multiple. Celalalt capat reansambleaza aceste fragmente pentru a construi<br />
intregul pachet.</p>
<p>Problema cu fragmentele este ca primul fragment are campurile complete in<br />
header (IP + TCP, UDP si ICMP) pentru a le examina, dar cele care urmeaza au<br />
doar o submultime a header-elor (IP fara campurile protocolului aditional).<br />
De aceea privirea in header-e dupa protocol in pachetelor care urmeaza (cum se<br />
face in cazul  TCP, UDP si ICMP)  nu este posibila.</p>
<p>Daca faci connection tracking sau NAT, atunci toate fragmentele vor fi reunite<br />
inainte de a ajunge la codul filtrului de pachete, asa ca nu trebuie sa te<br />
ingrijorezi vreodata pentru fragmente.</p>
<p>Te rog sa retii de asemenea: chain-ul INPUT al tabelei de filtrare (sau a<br />
oricarei alte tabele care depinde de NF_IP_LOCAL_IN) este traversat dupa<br />
defragmentarea stivei principale IP.</p>
<p>In caz contrar, este important sa stii cum sunt tratate fragmentele de catre<br />
regulile de filtrare. Orice regula de filtrare care cere informatii pe care<br />
nu le avem nu se va potrivi. Aceasta inseamna ca primul fragment este tratat<br />
ca orice alt pachet. Al doilea si urmatoarele nu vor mai fi. De aceea o<br />
regula  -p tcp &#8211;sport www (specificand un port sursa &#8220;www&#8221;) nu se vor potrivi<br />
cu un fragment (altul decat primul). Nici regula opusa nu va face acest lucru<br />
-p tcp &#8211;sport ! www.</p>
<p>Oricum, poti sa specifici o regula special pentru fragmentul al doilea si<br />
urmatoarele, folosind optiunea &#8220;-f&#8221; (sau &#8220;&#8211;fragment&#8221;). Este de asemenea<br />
legal sa specifici ca o regula nu se aplica la al doilea si urmatoarele<br />
fragmente, prin precedarea lui &#8220;-f&#8221; cu &#8220;!&#8221;.</p>
<p>De obicei este considerat sigur sa lasi sa treaca al doilea si urmatoarele<br />
fragmente, deoarece filtrarea va afecta primul fragment, si de aceea previne<br />
reansamblarea pe calculatorul destinatie; cu toate acestea, sunt cunoscute<br />
bug-uri care permit caderea sistemului doar prin simpla trasnmitere de<br />
fragmente. Este decizia ta.</p>
<p>Nota pentru network-heads: pachetele cu malformatii (pachete TCP, UDP si<br />
ICMP prea scurte codului de firewall ca sa citeasca tipul portului sau codul<br />
ICMP si tipul) sunt ignorate cand asemenea examinarii sunt incercate.<br />
Astfel sunt si fragmentele TCP care pornesc de la pozitia 8.</p>
<p>Ca un exemplu, urmatoarea regula va ignora fragmentele care se duc spre<br />
192.168.1.1:</p>
<p># iptables -A OUTPUT -f -d 192.168.1.1 -j DROP<br />
#</p>
<p>7.3.6 Optiuni extinse la iptables: Noi potriviri</p>
<p>iptables este extensibil, asta inseamna ca amandoua, iptables si kernelul pot<br />
fi extinse pentru a suporta noi optiuni.</p>
<p>Unele dintre aceste optiuni sunt standard, altele sunt mai exotice. Aceste<br />
optiuni pot fi facute de catre alti oameni si distribuite.</p>
<p>Extensiile kernelului sunt gasite deobicei in subdirectorul de module ale<br />
kernelului cum ar fi /lib/modules/2.4.0-test10/kernel/net/ipv4/netfilter. Ele<br />
se incarca automat daca kernelul tau a fost compilat cu optiunea CONFIG_KMOD,<br />
asa ca nu o sa fie necesar sa le incarci manual.</p>
<p>Extensiile la programul iptables sunt librarii shared care de obicei se gasesc<br />
in /usr/local/lib/iptables/, deseamenea o distributie poate sa le puna in<br />
directorul /lib/iptables sau /usr/lib/iptables.</p>
<p>Optiuniile vin in doua feluri: noi tinte si noi potriviri (vom vorbi despre<br />
tinte ceva mai tarziu). Unele protocoale automat ofera noi teste pentru<br />
pachete: in mod curent acestea sunt TCP, UDP si ICMP, cum sunt aratate mai jos.</p>
<p>Pentru acestea vei putea sa specifici noile teste in linia de comanda dupa<br />
optiunea &#8220;-p&#8221;, care va pune la dispozitie automat optiunile extinse. Pentru<br />
a preciza teste noi, foloseste optiunea &#8220;-m&#8221; pentru a incarca extensia, dupa<br />
care optiunile extinse vor putea fi folosite.</p>
<p>Pentru a vedea help-ul pentru  optiunile extinse foloseste optiunea de<br />
incarcare (&#8220;-p&#8221;, &#8220;-j&#8221; sau &#8220;-m&#8221;) urmat de &#8220;-h&#8221; sau &#8220;&#8211;help&#8221;, de exemplu:</p>
<p># iptables -p tcp &#8211;help<br />
#</p>
<p>7.3.6.1 Optiuni extinse TCP</p>
<p>Optiunile extinse TCP sunt disponibile in mod automat daca se specifica<br />
optiunea &#8220;-p tcp&#8221;. Aceste optiuni sunt urmatoarele (nici una dintre ele nu<br />
se vor potrivi cu fragmente):</p>
<p>&#8211;tcp-flags<br />
poate fi urmat de semnul optional &#8220;!&#8221;, apoi de doua siruri de<br />
flag-uri, care permite filtrarea dupa anumite flag-uri. Primul sir de<br />
flag reprezinta mask-ul, flag-urile pe care doresti a le examina. Al<br />
doilea sir reprezinta care dintre acestea ar trebui sa fie prezente.<br />
De exemplu:</p>
<p># iptables -A INPUT &#8211;protocol tcp &#8211;tcp-flags ALL SYN,ACK -j DROP</p>
<p>Aceasta comanda spune ca toate flag-urile trebuiesc examinate (&#8220;ALL&#8221;<br />
este sinonim cu &#8220;SYN,ACK,FIN,RST,URG,PSH&#8221;), dar doar SYN si ACK<br />
trebuie sa fie setate. Exista de asemnea un argumente &#8220;NONE&#8221; similar<br />
pentru nici unul dintre acestea.</p>
<p>&#8211;syn<br />
In mod optional precedata de semnul &#8220;!&#8221;, este o prescurtare pentru<br />
&#8220;&#8211;tcp-flags  SYN,RST,ACK SYN&#8221;</p>
<p>&#8211;source-port<br />
poate fi urmat de un optional &#8220;!&#8221;, si fie de un singur port, fie<br />
de o sir de porturi. Porturile pot fi specificate fie folosind numere<br />
fie folosind nume, asa cum sunt specificate in /etc/services.<br />
sirurile se specifica prin doua porturi despartite de &#8220;:&#8221;, sau<br />
(pentru a specifica o sir de porturi mai mare sau egal cu un port<br />
dat) un port urmat de &#8220;:&#8221;, sau (pentru a specifica o lista de porturi<br />
mai mica sau egala decat un port dat) un port precedat de &#8220;:&#8221;.</p>
<p>&#8211;sport este sinonim cu &#8211;source-port</p>
<p>&#8211;destination-port<br />
si<br />
&#8211;dport<br />
sunt similare cu modul in care se specifica portul sursa numai ca in<br />
loc de portul sursa se face potrivirea dupa portul destinatie.</p>
<p>&#8211;tcp-option<br />
urmat de un optional &#8220;!&#8221; si un numar, se potriveste pentru un<br />
pachet cu optiunea TCP egala cu acel numar. Un pachet care nu are un<br />
header complet TCP este ignorat automat daca este facuta incercarea<br />
de a se examina headerele TCP.</p>
<p>7.3.6.1.1 O explicatie pentru flag-urile TCP</p>
<p>Uneori este folositor sa permiti conexiunile TCP intr-o singura directie, nu<br />
si in cealalta. De exemplu, ai putea sa permiti conexiuni catre un server<br />
extern WWW, dar nici o conexiune de la acel server.</p>
<p>Naiv ar fi sa blochezi pachetele TCP dinspre server. Din pacate, conexiunile<br />
TCP cer pachetele sa circule in ambele directii.</p>
<p>Solutia ar fi sa blochezi numai pachetele folosite pentru a initia<br />
conexiuni. Aceste pachete sunt numite pachete SYN (ok, tehnic sunt pachete cu<br />
flag SYN pus si cu flagurile RST si ACK nepuse, dar le numim pe scurt<br />
pachete SYN). Prin ignorarea acestor pachete, putem sa oprim aceste<br />
conexiuni.</p>
<p>Optiunea &#8220;&#8211;syn&#8221; este folosita pentru aceasta; este valida numai pentru<br />
regulile in care specificam tcp ca protocol. De exemplu, pentru a specifica<br />
incercarile de conexiune de la 192.168.1.1:</p>
<p>-p TCP -s 192.168.1.1 &#8211;syn</p>
<p>Aceasta optiune poate fi inversat prin precedarea &#8220;&#8211;syn&#8221; cu semnul &#8220;!&#8221;.</p>
<p>7.3.6.2 Optiuni extinse UDP</p>
<p>Aceste optiuni sunt automat disponibile cand se specifica &#8220;-p udp&#8221;. Acestea<br />
sunt: &#8220;&#8211;source-port&#8221;, &#8220;&#8211;sport&#8221;,&#8221;&#8211;destination-port&#8221; si &#8220;&#8211;dport&#8221; care au<br />
fost detaliate mai sus.</p>
<p>7.3.6.3 Optiuni extinse ICMP</p>
<p>Aceste optiuni sunt automat disponibile cand se specifica &#8220;-p icmp&#8221;. Este<br />
doar o singura optiune noua:</p>
<p>&#8211;icmp-type<br />
urmat de un semnul optional &#8220;!&#8221;, apoi de numele tipului icmp (ex.<br />
&#8220;host-unreachable&#8221;), sau tipul numeric (ex. &#8220;3&#8243;), sau tipul numeric<br />
si codul separate de &#8220;/&#8221; (ex. &#8220;3/3&#8243;). O lista a numelor de tipuri de<br />
pachete icmp este data folosind &#8220;-p icmp &#8211;help&#8221;.</p>
<p>7.3.6.4 Alte optiuni extinse pentru potrivire</p>
<p>Alte optiuni extinse in pachtetul de filtrare sunt optiuni demonstrative,<br />
care (daca sunt instalate) pot fi invocate cu optiunea &#8220;-m&#8221;.</p>
<p>mac</p>
<p>Acest modul trebuie in mod explicit specificat prin optiunea &#8220;-m mac&#8221;<br />
sau &#8220;&#8211;match mac&#8221;. Este folosit pentru a se potrivi cu pachetele ce au o<br />
anumita adresa ethernet MAC, si de aceea este folositoare numai<br />
pentru pachetele care traverseaza chain-urile PREROUTING si INPUT.<br />
Este disponibila o singura optiune noua:</p>
<p>&#8211;mac-source<br />
urmat de semnul optional &#8220;!&#8221;, apoi de o adresa ethernet in notatie<br />
hexa separata prin &#8220;:&#8221;, ex. &#8220;&#8211;mac-source 00:60:08:91:CC:B7&#8243;.</p>
<p>limit</p>
<p>Acest modul trebuie in mod explicit specificat prin optiunea &#8220;-m limit&#8221;<br />
sau cu &#8220;&#8211;match limit&#8221;. Este folosit pentru a restrange rata de<br />
potriviri, ca de exemplu pentru reprimarea mesajelor in log-uri<br />
(log-urile sunt fisierele in care sistemul scrie anumite date<br />
considerate importante, in ideea de a putea fi accesate mai tarziu). Se<br />
vor potrivi numai un numar dat de pachete pe secunda (default 3<br />
potriviri pe ora, la un numar maxim de 5 potriviri). Sunt disponibile<br />
doua optiuni:</p>
<p>&#8211;limit<br />
urmat de un numar; specifica numarul maxim de potriviri permise pe<br />
secunda. Numarul poate fi specificat pe unitati de timp explicite,<br />
folosind &#8220;/second&#8221;, &#8220;/minute&#8221;, &#8220;/hour&#8221; or &#8220;/day&#8221;, sau parti din ele<br />
(ex. &#8220;5/second&#8221; este la fel cu &#8220;5/s&#8221;).</p>
<p>&#8211;limit-burst<br />
urmat de un numar, indica numarul maxim de potriviri dupa care limita<br />
de mai sus intra in actiune.</p>
<p>Aceasta potrvire poate adesea fi folosita cu tinta LOG pentru a face<br />
logare limitata dupa o rata. Pentru a intelege cum functioneaza sa ne<br />
uitam la urmatoarea regula care logheaza cu parametri de limita default:</p>
<p># iptables -A FORWARD -m limit -j LOG</p>
<p>Prima data cand se ajunge la aceasta regula, pachetul va fi scris in<br />
log-uri, de fapt, deorece numarul limita este 5, primele 5 pachete vor<br />
ajunge in log-uri. Dupa aceasta vor trece 20 de minute pana cand alt<br />
pachet sa ajunga in log-uri datorita acestei reguli, fara sa conteze<br />
numarul de pachete care ajung la regula. Dupa 20 de minute<br />
limit-burst-ul,	numarul de pachete care vor putea fi primite va fi unu,<br />
dupa inca 20 de minute va mai creste cu o unitate, daca nici un pachet<br />
nu s-a potrivit cu regula. Deasemenea, la fiecare 20 de minute	care<br />
trec fara ca pachete sa se potriveasca  regulii, numarul limita va<br />
creste cu o unitate; daca nici un pachet nu se potriveste cu regula dupa 	100 de minute, numarul limita va fi din nou atins, inapoi de unde am<br />
plecat.</p>
<p>Nota: nu poti crea o regula cu un timp de reincarcare mai mare de 59<br />
de ore, asa ca daca pui o limita de 1/zi, atunci numarul maxim de<br />
potriviri (burst-rate) trebuie sa fie mai mic decat 3.</p>
<p>Poti de asemenea sa folosesti acest modul pentru a te feri de<br />
diferitele atacuri denial of service (DoS) cu o rata mai mare pentru a<br />
creste sensibilitatea.</p>
<p>Protectie pentru syn-flood:</p>
<p># iptables -A FORWARD -p tcp &#8211;syn -m limit 1/s -j ACCEPT</p>
<p>Pentru scannere de porturi clandestine:</p>
<p># iptables -A FORWARD -p tcp &#8211;tcp-flags SYN,ACK,FIN,RST RST<br />
-m limit &#8211;limit 1/s -j ACCEPT</p>
<p>Pingul mortii:</p>
<p># iptables -A FORWARD -p icmp &#8211;icmp-type echo-request -m<br />
-m limit &#8211;limit 1/s -j ACCEPT</p>
<p>Acest modul se comporta ca o &#8220;usa histeresis&#8221;, ca in graficul urmator:</p>
<p>rata (pachete/s)<br />
^        .&#8212;.<br />
|       / DoS \<br />
|      /       \<br />
Limita   DoS -|&#8230;..:&#8230;&#8230;&#8230;\&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<br />
= (limit *  |    /:          \<br />
limit-burst) |   / :           \         .-.<br />
|  /  :            \       /   \<br />
| /   :             \     /     \<br />
End of DoS  -|/&#8230;.:&#8230;&#8230;&#8230;&#8230;..:&#8230;/&#8230;&#8230;.\&#8230;./.<br />
= limit     |     :              :&#8221;-&#8221;         &#8220;&#8211;&#8221;<br />
&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&gt; time (s)<br />
LOGIC =&gt;  Potrivire | Nepotrivire  |  Potrivire</p>
<p>Sa consideram ca avem o potrivire de un pachet pe secunda cu o<br />
limita maxima de 5 pachete, dar pachetele vin cu o rata de patru pe<br />
secunda timp de 3 secunde, apoi incep din nou sa vina peste 3 secunde.</p>
<p>&lt;&#8211;Flood 1&#8211;&gt;           &lt;&#8212;Flood 2&#8212;&gt;</p>
<p>Pachete^                   Line  __&#8211;      YNNN<br />
total  |               Rate  __&#8211;      YNNN<br />
|            mum  __&#8211;      YNNN<br />
10 |        Maxi __&#8211;         Y<br />
|         __&#8211;            Y<br />
|     __&#8211;               Y<br />
| __&#8211;    YNNN<br />
|-    YNNN<br />
5 |    Y<br />
|   Y         Legenda:  Y -&gt; se potriveste cu regula<br />
|  Y          	  	 N -&gt; nu se potriveste cu regula<br />
| Y<br />
|Y<br />
0 +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&gt; timpul in<br />
secunde<br />
0   1   2   3   4   5   6   7   8   9  10  11  12</p>
<p>Se poate vedea ca primele 5 pachete sunt permise sa depaseasca limita<br />
de un pachet pe secunda, apoi limit intervine. Daca este o  pauza de o<br />
secunda inca un pachet in plus va fi permis sa treaca. Intodeauna<br />
insa, nu se va permite depasirea de un pachet/secunda dupa ca<br />
numarul limita (burst-limit) este atins.</p>
<p>owner</p>
<p>acest modul incearca sa se potriveasca trasaturilor diferite ale<br />
creatorului pachetului, pentru pachetele generate local. Este valid<br />
numai in chain-ul OUTPUT, si chiar si atunci unele pachete (cum ar<br />
fi raspunsurile de tip ICMP) pot sa nu aiba creator, si de aceea sa<br />
nu se potriveasca.</p>
<p>&#8211;uid-owner userid<br />
se potriveste daca pachetul a fost creat de catre un proces cu<br />
acelasi id de user.</p>
<p>&#8211;gid-owner groupid<br />
se potriveste daca pachetul a fost creat de catre un proces cu<br />
acelasi id de group.</p>
<p>&#8211;pid-owner processid<br />
se potriveste daca pachetul a fost creat de catre un proces cu<br />
acelasi id de proces.</p>
<p>&#8211;sid-owner sessionid<br />
se potriveste daca pachetul a fost creat de catre un proces in grupul<br />
de sesiune dat.</p>
<p>unclean</p>
<p>Acest modul experimental trebuie sa fie in mod explicit specificat cu<br />
optiunea &#8220;-m unclean&#8221; sau &#8220;&#8211;match unclean&#8221;. Realizeaza niste teste<br />
variate de sanatate asupra pachetelor. Acest modul nu a fost testat,<br />
si nu ar trebui sa fie folosit ca o unealta in securitate (probabil<br />
ca inrautateste lucrurile din cauza ca el insusi s-ar putea sa aiba<br />
buguri). Nu este disponibila nici o optiune.</p>
<p>7.3.6.5 Potrivirea dupa stare</p>
<p>Cele mai folositoare optiuni este furnizata de modulul &#8220;state&#8221;, care<br />
interpreteaza analizele detectorului de conexiuni ale modulului<br />
&#8220;ip_conntrack&#8221;. Aceasta este foarte recomandata.</p>
<p>Specificarea modulului &#8220;-m state&#8221; permite folosirea unei optiuni<br />
aditionale de stare  &#8220;&#8211;state&#8221;. Aceste stari sunt:</p>
<p>NEW<br />
un pachet care creeaza o noua conexiune.</p>
<p>ESTABLISHED<br />
un pachet care apartine unei conexiuni deja stabilite (un pachet<br />
replica (replay), sau un pachet care pleaca al unei conexiuni care a primit<br />
replayuri).</p>
<p>RELATED<br />
Un pachet care este inrudit, dar care nu este parte a unei conexiuni existente,<br />
cum ar fi o eroare ICMP, sau (cu modulul FTP introdus), un pachet care<br />
stabileste o conexiune FTP.</p>
<p>INVALID<br />
Un pachet care nu a putut fi identificat pentru niste motive: aceasta include<br />
ramanerea fara memorie sau erori ICMP care nu apartin nici unei conexiuni<br />
cunoscute. In mod normal aceste pachete ar trebui ignorate.</p>
<p>Un exemplu pentru aceasta puternica optiune de potrivire ar fi:</p>
<p># iptables -A FORWARD -i ppp0 -m state ! NEW -j DROP</p>
<p>7.4 Argumente asupra tintei</p>
<p>Acum stim ce examinare poate fi facuta asupra unui pachet, avem nevoie de o<br />
cale pentru a preciza ce sa facem cu pachetele care se potrivesc  testelor<br />
noastre. Aceasta este numita tinta unei reguli.</p>
<p>Exista doua foarte simple tinte incluse: DROP si ACCEPT. Ne-am intalnit deja<br />
cu aceastea. Daca o regula se potriveste cu un pachet si tinta regulii este<br />
una din aceste doua, nici una din regulile urmatoare nu  sunt consultate,<br />
soarta pachetului a fost decisa.</p>
<p>Mai sunt doua tipuri de tinte pe langa acestea incluse: tinte extinse si<br />
chain-urile definite de catre utilizator.</p>
<p>7.4.1 Chain-uri definite de utilizator</p>
<p>O caracteristica puternica pe care iptables o mosteneste de la ipchains este<br />
posibilitatea utilizatorului de a crea chain-uri noi, pe langa cele incluse<br />
default (INPUT, OUTPUT si FORWARD). Prin conventie, chain-urile definite de<br />
catre utilizator se scriu cu litera mica pentru a le deosebi (vom descrie<br />
mai jos cum sa cream acest tip de chain-uri in &#8220;7.5 Operatii asupra unui<br />
intreg chain&#8221;).</p>
<p>Cand un pachet se potriveste cu o regula a carei tinta este un chain definit<br />
de catre utilizator, pachetul incepe sa traverseze chain-ul definit de catre<br />
utilizator. Daca acel chain-ul nu decide soarta pachetul de indata ce<br />
pachetul ajunge la sfarsitul chain-ului respectiv, pachetul continua<br />
traversarea  chain-ului initial.</p>
<p>Este timpul pentru niste arta ASCII. Considera doua chain-uri aiurea: INPUT<br />
(chain-ul inclus default) si test (un chain definit de utilizator).</p>
<p>&#8220;INPUT&#8221;                         &#8220;test&#8221;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| Rule1: -p ICMP -j DROP   |    | Rule1: -s 192.168.1.1    |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|    |&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|<br />
| Rule2: -p TCP -j test    |    | Rule2: -d 192.168.1.1    |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| Rule3: -p UDP -j DROP    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Considera un pachet TCP venind de la 192.168.1.1 si ducandu-se catre 1.2.3.4.<br />
Acesta intra in chain-ul INPUT. Rule1 nu se potriveste cu el, Rule2 se<br />
potriveste asa ca urmatoarea regula care este examinata este prima din<br />
chain-ul test. Rule1 se potriveste dar nu este specificata nici o tinta,<br />
asa ca urmatoarea regula este examinata. Rule2 nu se potriveste asa ca am<br />
ajuns la sfarsitul chain-ului. Astfel ne reintoarcem in chain-ul INPUT, unde<br />
am examinat Rule2, asa ca examinam Rule3 care nici aceasta nu se potriveste.</p>
<p>Deci calea urmata de catre pachet este:</p>
<p>v    __________________________<br />
&#8220;INPUT&#8221;                |   /    &#8220;test&#8221;                v<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|&#8211;/    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;-<br />
| Rule1                 | /|    | Rule1                |   |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|/-|    |&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;|<br />
| Rule2                 /  |    | Rule2                |   |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;v&#8212;-<br />
| Rule3 	               /&#8211;+___________________________/<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|&#8212;<br />
v</p>
<p>Chain-urile definite de catre utilizator pot sari la alte chain-uri definite<br />
de catre utilizator (dar nu crea trasee in cerc, pachetele tale vor fi<br />
ignorate daca intra in bucla).</p>
<p>7.4.2 Optiuni extinse la iptables: Noi tinte</p>
<p>Celalat tip de optiune extinsa este o tinta. O tinta extinsa este formata<br />
dintr-un modul de kernel si o extensie optionala la iptables pentru a pune<br />
la dispozitie noi optiuni in linia de comanda. Sunt mai multe optiuni<br />
extinse in distributia default a netfilter-ului:</p>
<p>LOG</p>
<p>Acest modul permite log-area de catre kernel a pachetelor care se<br />
potrivesc. Acest modul pune la dispozitie urmatoarele optiuni<br />
aditionale:</p>
<p>&#8211;log-level<br />
urmat de un numar al nivelului sau de un nume. Numele corecte sunt<br />
(nu conteaza daca sunt scrise cu litera mare sau nu) &#8220;debug&#8221;, &#8220;info&#8221;,<br />
&#8220;notice&#8221;, &#8220;warning&#8221;, &#8220;err&#8221;, &#8220;crit&#8221; and &#8220;emerg&#8221;, corespunzand numerelor<br />
de la 7 la 0. Citeste man-ul de la syslog.conf pentru o explicatie<br />
privind aceste niveluri de logare. Nivelul default este &#8220;warning&#8221;.</p>
<p>&#8211;log-prefix<br />
urmat de un sir de caractere pana la 29 de caractere, acest mesaj<br />
este pus in fata mesajului care este logat, pentru a-i permite<br />
identificarea unica.</p>
<p>Acest modul este bun dupa o limita de potrivire, pentru a nu-ti<br />
flooda fisierele de log.</p>
<p>REJECT</p>
<p>Acest modul are acelasi efect cu &#8220;DROP&#8221;, cu exceptia faptului ca<br />
celui ce trimite pachetele ii este trimis mesaj de eroare ICMP &#8220;port<br />
unreachable&#8221;. Bagati la cap ca mesajul de eroare ICMP nu este trimis<br />
daca (citeste RFC 1122):<br />
- pachetul de il filtrezi a fost de la inceput o eroare ICMP<br />
sau alt tip de pachet ICMP necunoscut.<br />
- pachetul ce este filtrat nu este un fragment de inceput.<br />
- am trimis recent prea multe mesaje de eroare ICMP catre acea<br />
destinatie ( cat /proc/sys/net/ipv4/icmp_ratelimit).<br />
REJECT pune de asemenea la dispozitie o noua optiune<br />
&#8220;&#8211;reject-with&#8221; care modifica pachetul folosit la replay: man<br />
iptables.</p>
<p>7.4.3 Tinte speciale construite default</p>
<p>Sunt doua tinte speciale contruite default: RETURN si QUEUE.</p>
<p>RETURN are acelasi efect cu trecerea direct la sfarsitul chain-ului: pentru<br />
o regula in chain-ul inclus default politica acelui chain-ului este executata.<br />
Pentru o regula intr-un chain definit de catre utilizator, traversarea continua in<br />
chain-ul anterior, exact dupa regula care a determinat trecerea la acest<br />
chain.</p>
<p>QUEUE este o tinta speciala, care pune in rand pachetul pentru procesare de<br />
catre programe utilizator. Pentru ca aceasta sa fie folositor doua urmatoare<br />
componente sunt cerute:</p>
<p>- un &#8220;gestionar al cozii&#8221;, care se ocupa de mecanismele propriu-zise de<br />
trecere a pachetelor intre kernel si modul utilizator; si</p>
<p>- un program in mod utilizator pentru a primi, posibil a manipula, si a<br />
da verdicte in ceea ce priveste pachetele.</p>
<p>Gestionarul standard al cozii pentru iptables IPv4 este modulul ip_queue, care<br />
este distribuit cu kernelul si considerat experimental.</p>
<p>Ceea ce urmeaza este un scurt exemplu despre cum sa folosesti iptables pentru<br />
a pune in coada pachetele pentru procesare in mod utilizator:</p>
<p># modprobe iptable_filter<br />
# modprobe ip_queue<br />
# iptables -A OUTPUT -p icmp -j QUEUE</p>
<p>Cu aceasta regula, pachetele ICMP  generate local (care sunt create<br />
, sa zicem, cu ping) sunt pasate modulului ip_queue, care apoi incearca sa<br />
livreze pachetele unei aplicatii in mod utilizator. Daca nici o<br />
aplicatie nu asteapta acele pachete, acestea sunt ignorate.</p>
<p>Pentru a scrie o aplicatie in mod utilizator, poti folosi libipq API. Acesta<br />
este distribuit impreuna cu iptables. Cod exemplu poate fi gasit in programele<br />
de testare (redirect.c) in CVS.</p>
<p>Starea lui ip_queue poate fi verificata prin:</p>
<p>/proc/net/ip_queue</p>
<p>Marimea maxima a unei cozi (i.e. numarul de pachete livrata modului utilizator<br />
fara primirea inapoi a unei comfirmari) poate fi controlat prin:</p>
<p>/proc/sys/net/ipv4/ip_queue_maxlen</p>
<p>Marimea default pentru marimea maxima a cozii este 1024. Odata ce aceasta<br />
limita este atinsa, noile pachete vor fi ignorate pana cand marimea cozii<br />
scade sub nivelul limita. Protocoale bine gandite ca TCP interpreteaza<br />
pachetele ignorate ca aglomerare, si din fericire va inceta livrarea de<br />
pachete cand coada este plina. Cu toate acestea, va lua ceva experimente<br />
pentru a determina valoare ideala pentru marimea cozii pentru o situatie data<br />
daca valoarea default este prea mica.</p>
<p>7.5 Operatii asupra unui intreg chain</p>
<p>O foarte folositoare caracteristica a iptables-ului este posibilitatea de a<br />
grupa mai multe reguli intr-un chain. Poti numi chain-urile cum doresti, dar<br />
recomand folosirea literelor mici pentru a evita confuzia cu chain-urile<br />
incluse default si tinte. Numele de chain-uri pot fi pana la 31 de litere in<br />
lungime.</p>
<p>7.5.1 Creearea unui nou chain</p>
<p>Sa cream un nou chain. Pentru ca sunt un tip cu atata imaginatie o sa o<br />
numesc test. Pentru aceasta folosim optiunea &#8220;-N&#8221; sau &#8220;&#8211;new-chain&#8221;:</p>
<p># iptables -N test<br />
#</p>
<p>Este atat de simplu. Acum poti introduce reguli in el cum am aratat mai sus.</p>
<p>7.5.2 Stergerea unui chain</p>
<p>Si sergerea unui chain este deasemenea simpla, prin folosirea optiunilor &#8220;-X&#8221;<br />
sau &#8220;&#8211;delete-chain&#8221;. De ce &#8220;-X&#8221;? Pai toate literele bune au fost luate.</p>
<p># iptables -X test<br />
#</p>
<p>Sunt cateva restricitii la stergerea de chain-uri: acestea trebuie sa fie<br />
goale (vezi &#8220;Stergerea tuturor regulilor unui chain&#8221; dedesubt) si nu trebuie<br />
sa fie tinta nici unei reguli. Nu poti sterge nici unul dintre chain-rile<br />
incluse default.</p>
<p>Daca nu specific numele chain-ului, atunci toate chain-urile definite de catre<br />
utilizator vor fi sterse daca este posibil.</p>
<p>7.5.3 Stergerea tuturor regulilor unui chain</p>
<p>Exista un mod simplu de de sterge toate regulile dintr-un chain, folosind<br />
optiunile &#8220;-F&#8221; (sau &#8220;&#8211;flush&#8221;).</p>
<p># iptables -F FORWARD<br />
#</p>
<p>Daca nu este specificat chain-ul atunci toate chain-urile vor fi sterse de<br />
reguli.</p>
<p>7.5.4 Listarea unui chain</p>
<p>Poti lista toate regulile dintr-un chain prin folosirea optiunii &#8220;-L&#8221; (sau<br />
&#8220;&#8211;list&#8221;).</p>
<p>&#8220;refcnt-ul&#8221;(reference count) listat pentru fiecare chain definit de catre<br />
utilizator  este numarul de reguli care au ca tinta acest chain. Acesta<br />
trebuie sa fie zero (si chain-ul sa fie gol) inainte ca acest chain sa poata<br />
fi sters.</p>
<p>Daca numele chain-ului este omis, toate chain-urile sunt listate, chiar si<br />
cele care sunt goale.</p>
<p>Exista trei optiuni care pot fi adaugate la &#8220;-L&#8221;. Optiunea &#8220;-n&#8221; (numeric)<br />
este foarte folositoare deoarece previne iptables in a incerca sa rezolve<br />
IP-urile in nume, care (daca folosesti DNS ca majoritatea oamenilor) va cauza<br />
mari intarzieri daca DNS-ul tau nu este setat corect, sau ai filtrat cererile<br />
catre DNS. Determina deasemenea ca porturile TCP si UDP sa fie afisate ca<br />
numere in loc de nume.</p>
<p>Optiunea &#8220;-v&#8221; arata toate detaliile regulilor, cum ar fi counter-ele pentru de<br />
pachete si bytes, comparatiile TOS, interfata. Altfel aceste detalii sunt<br />
omise.</p>
<p>Observa faptul urmator: counter-ele pentru pachete si bytes sunt afisate<br />
folosind sufixele &#8220;K&#8221;, &#8220;M&#8221; sau &#8220;G&#8221; pentru 1000, 1,000,000 si respectiv<br />
1,000,000,000. Folosirea lui optiunii &#8220;-x&#8221; (expandare a numerelor) afiseaza<br />
numerele in formatul maxim, fara sa conteze cat sunt de mari.</p>
<p>7.5.5 Resetarea counter-elor</p>
<p>Este folositoare posibilitatea de a putea sa resetezi counter-ele. Aceasta<br />
poate fi facuta cu optiune &#8220;-Z&#8221; (sau &#8220;&#8211;zero&#8221;).</p>
<p>Considera urmatoarele:</p>
<p># iptables -L FORWARD<br />
# iptables -Z FORWARD<br />
#</p>
<p>In exemplul de mai sus, unele pachete au putut sa vina intre cele doua<br />
comenzi. Pentru acest motiv, poti folosi cele doua optiuni &#8220;-L&#8221; si &#8220;-Z&#8221;<br />
impreuna, pentru a reseta counter-ele in timp ce le afisezi.</p>
<p>7.5.6 Setarea policy-ului</p>
<p>Am explicat ce se intampla cand un pachet ajunge la capatul unui chain inclus<br />
default si am discutat mai devreme cum parcurge un pachet chain-urile. In<br />
acest caz, policy-ul chain-ului determina soarta pachetului. Doar chain-urile<br />
incluse default (INPUT, OUTPUT si FORWARD) au policy-uri, deoarece daca un<br />
pachet ajunge la capatul unui chain definit de catre utilizator, traversarea<br />
continua in chain-ul anterior.</p>
<p>Politica poate fi fie ACCEPT, fie DROP, de exemplu:</p>
<p># iptables -P FORWARD drop<br />
#</p>
<p>8. Folosirea ipchains si ipfwadm</p>
<p>Sunt module in distributia netfilter pe nume ipchains.o si ipfwadm.o.<br />
Insereaza unul dintre acestea in kernelul tau ( Observatie: aceste module<br />
sunt incompatibile cu ip_tables.o). Apoi poti folosi ipchains sau ipfwadm  ca<br />
in vremurile de alta data.</p>
<p>Aceasta va fi suportata pentru inca un timp. Cred ca o formula rezonabila<br />
este 2 * [nota inlocuirii - prima versiune stabila], dupa data cand o versiune<br />
stabila a inlocuirii este disponibila.<br />
Asta inseamna ca suportul va fi probabil abandonat in Linux 2.6 sau 2.8.</p>
<p>9. Folosirea impreuna a NAT-ului si a filtrarii de pachete</p>
<p>Este normal sa vrei sa faci NAT (vezi NAT HOWTO) si filtrare de pachete.<br />
Veste buna este ca se pot folosi impreuna extrem de bine.</p>
<p>Faci filtrarea de pachete ingorand total orice NAT ai deja. Sursa si<br />
destinatia vazute de catre filtrul de pachete vor fi sursele si destinatiile<br />
reale. De exemplu daca faci DNAT pentru a trimite orice conexiune pentru<br />
1.2.3.4 portul 80 spre 10.1.1.1 portul 8080, filtrul de pachete va vedea<br />
pachetele ducandu-se catre 10.1.1.1 portul 8080 (adresa reala), nu 1.2.3.4<br />
port 80. In mod similar poti ignora masquerading: pachetele vor parea ca vin<br />
de la adresa lor IP interna reala (sa zicem 10.1.1.1), si replay-urile vor<br />
parea ca se duc inapoi acolo.</p>
<p>Poti folosi optiunea extinsa de potrivire &#8220;match&#8221; fara sa pui filtrul de<br />
pachete sa faca munca in plus, deoarece NAT cere detectarea de conexiuni<br />
oricum. Pentru a dezvolta exemplul simplu de masquerading din NAT HOWTO pentru<br />
a nu permite noi conexiuni pe interfata ppp0, vei face urmatoarele:</p>
<p># masquerading pentru ppp0<br />
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</p>
<p># refuzarea de pachete NOI sau INVALIDE forwardate sau care vin prin ppp0<br />
iptables -A INPUT -i ppp0 -m state &#8211;state NEW,INVALID -j DROP<br />
iptables -A FORWARD -i ppp0 -m state &#8211;state NEW,INVALID -j DROP</p>
<p># se da drumu la IP forwarding<br />
echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>10. Diferente intre iptables si ipchains</p>
<p>o In primul rand, numele chain-urilor predefinite si-au schimbat scrierea din<br />
litere mici in litere mari, deoarece chain-urile INPUT si OUTPUT primesc acum<br />
doar pachete cu destinatie locala si pachete generate local. Ele obisnuiau<br />
sa vada toate pachetele care intrau si respectiv care ieseau.</p>
<p>o Optiunea &#8220;-i&#8221; acum inseamna interfata de intrare si are sens numai in<br />
chain-urile INPUT si FORWARD. Regulile in chain-urile OUTPUT si FORWARD care<br />
foloseau inainte &#8220;-i&#8221; vor trebuie sa fie schimbate cu &#8220;-o&#8221;.</p>
<p>o Porturile TCP si UDP trebuie sa fie precizate folosind optiunile<br />
&#8211;source-port  sau &#8211;sport (sau &#8211;destination-port/&#8211;dport), si trebuie<br />
puse dupa optiunile &#8220;-p tcp&#8221; sau &#8220;-p udp&#8221;, deorece acestea incarca optiunile<br />
disponibile extensiilor TCP si respectiv UDP.</p>
<p>o Argumentul TCP -y a devenit acum &#8211;syn si trebuie pus dupa &#8220;-p tcp&#8221;.</p>
<p>o In cele din urma tinta DENY a deveni DROP.</p>
<p>o Resetarea counter-elor pentru un singur chain in timp concomitent cu<br />
listarea acestuia este acum posibila.</p>
<p>o Resetara counter-elor pentru chain-urile predefinite resetezeaza desemenea<br />
counter-ele policy-ului chain-urilor respective.</p>
<p>o Listarea counter-elor iti arata counter-ele instant.</p>
<p>o REJECT si LOG sunt acum tinte extinse, insemnand ca sunt module de kernel<br />
separate.</p>
<p>o Numele pentru chain-uri pot fi pana la 31 de caractere in lungime.</p>
<p>o MASQ este acum MASQUERADE si foloseste o sintaza diferita. REDIRECT, desi<br />
si-a pastrat vechiul nume, a suferit deasemenea o schimbare de sintaxa.<br />
Citeste NAT-HOWTO pentru mai multe informatii despre cum sa le configurezi.</p>
<p>o Optiunea &#8220;-o&#8221; nu mai este folosita pentru a conduce pachetele in mod<br />
utilizator (vezi -i de mai sus). Pachetele sunt trimise acum in mod utilizator<br />
folosind tinta QUEUE.</p>
<p>o Probabil o gramada de alte lucruri pe care le-am uitat.</p>
<p>11. Sfaturi asupra designului filtrului de pachete</p>
<p>In domeniul securitatii cel mai bun lucru este sa blochezi totul, apoi sa<br />
deschizi gauri acolo unde este necesar. Aceasta este deobicei spus &#8220;ceea ce nu<br />
este in mod explicit permis este interzis&#8221;. Recomand aceasta  daca securitatea<br />
este grija ta cea mai mare.</p>
<p>Nu rula nici un serviciu de care nu ai nevoie, chiar daca ai blocat accesul la<br />
el.</p>
<p>Recomand securitatea in adancime: combina tcp-wrappers (pentru conexiuni catre<br />
insusi filtrul de pachete), proxy-uri (pentru conexiuni ce trec peste filtrul<br />
de pachete), verificarea routei si filtrare de pachete. Verificarea routei<br />
este cand un pachet care vine de la o interfata de la care nu poate veni este<br />
ignorate: de exemplu, daca reteaua ta interna are adresele 10.1.1.0/24, si<br />
un pachet care are ca sursa o adresa apartinand acelei clase vine pe<br />
interfata externa, acesta va fi ignorat. Aceasta verificare a routei poate<br />
fi activate pentru o interfata (ppp0) astfel:</p>
<p># echo 1 &gt; /proc/sys/net/ipv4/conf/ppp0/rp_filter<br />
#</p>
<p>Sau pentru toate interfetele existente si viitoare astfel:</p>
<p># for f in /proc/sys/net/ipv4/conf/*/rp_filter; do<br />
#     echo 1 &gt; $f<br />
# done<br />
#</p>
<p>Debian realizeaza acest lucru &#8220;by default&#8221; cand este posibil. Daca ai routare<br />
asimetrica  (te astepti sa primesti pachete din directii ciudate), vei<br />
dori sa dezactivezi aceasta filtrare pe interfetele respective.</p>
<p>Logarea pachetelor este folositoare cand configurezi un firewall si ceva nu<br />
merge, insa pe un sistem in productie, intodeauna foloseste aceasta in<br />
combinatie cu limitare, pentru a preveni floodarea fisierelor cu log-uri.</p>
<p>Recomand pentru sistemele sigure depistarea conexiunilor (connection<br />
tracking): determina o incarcare a sistemului, deoarece toate conexiunile sunt<br />
depistate, dar este foarte folositoare pentru a controla accesul la retelele<br />
tale. S-ar putea sa trebuiasca sa incarci modulul &#8220;ip_conntrack.o&#8221; daca<br />
kernelul tau nu incarca in mod automat modulele si nu este compilat in<br />
kernel. Daca vrei sa depistezi cu precizie protocoale complexe, va trebui sa<br />
incarci modulul necesar pentru aceasta (ex. &#8220;ip_conntrack_ftp.o&#8221;).</p>
<p># iptables -N no-conns-from-ppp0<br />
# iptables -A no-conns-from-ppp0 -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br />
# iptables -A no-conns-from-ppp0 -m state &#8211;state NEW -i ! ppp0 -j ACCEPT<br />
# iptables -A no-conns-from-ppp0 -i ppp0 -m limit -j LOG &#8211;log-prefix &#8220;Bad packet from ppp0:&#8221;<br />
# iptables -A no-conns-from-ppp0 -i ! ppp0 -m limit -j LOG &#8211;log-prefix &#8220;Bad packet not from ppp0:&#8221;<br />
# iptables -A no-conns-from-ppp0 -j DROP<br />
# iptables -A INPUT -j no-conns-from-ppp0<br />
# iptables -A FORWARD -j no-conns-from-ppp0</p>
<p>Construirea unui bun firewall este peste scopul acestui HOWTO, dar sfatul meu<br />
este ca &#8220;intodeauna sa fii minimalist&#8221;. Citeste Security HOWTO pentru mai multe<br />
informatii privind testarea si examinarea sistemului.</p>
]]></content:encoded>
			<wfw:commentRss>http://resurse-educationale.uv.ro/?feed=rss2&#038;p=171</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurarea modemului dumneavoastra si a pppd-ului pentru a folosi linii inchiriate pe 2 fire</title>
		<link>http://resurse-educationale.uv.ro/?p=167</link>
		<comments>http://resurse-educationale.uv.ro/?p=167#comments</comments>
		<pubDate>Wed, 06 Apr 2011 12:40:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Servers]]></category>
		<category><![CDATA[adsl]]></category>
		<category><![CDATA[fire]]></category>
		<category><![CDATA[linii inchiriate]]></category>
		<category><![CDATA[modem]]></category>
		<category><![CDATA[pppd]]></category>
		<category><![CDATA[robotics]]></category>

		<guid isPermaLink="false">http://resurse-educationale.uv.ro/?p=167</guid>
		<description><![CDATA[Linii inchiriate Mini-HOWTO Rob van der Putten, rob@sput.nl v2.1, 3 August 2000 Traducerea: Victor Plugaru(vuk@go.ro). Cu scuzele de rigoare pentru eventualele greseli si/sau inadvertente. Configurarea modemului dumneavoastra si a pppd-ului pentru a folosi linii inchiriate pe 2 fire. _________________________________________________________________________ Table &#8230; <a href="http://resurse-educationale.uv.ro/?p=167">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Linii inchiriate Mini-HOWTO</p>
<p>Rob van der Putten, rob@sput.nl</p>
<p>v2.1, 3 August 2000</p>
<p>Traducerea: Victor Plugaru(vuk@go.ro). Cu scuzele de rigoare<br />
pentru eventualele greseli si/sau inadvertente.</p>
<p>Configurarea modemului dumneavoastra si a pppd-ului pentru a<br />
folosi linii inchiriate pe 2 fire.</p>
<p>_________________________________________________________________________</p>
<p>Table of Contents</p>
<p>1. Introducere</p>
<p>1.1 Ce este o linie inchiriata<br />
1.2 Presupuneri</p>
<p>2. Modemul</p>
<p>2.1 Configuratia modemului<br />
2.2 Test<br />
2.3 Exemple<br />
2.3.1 Hi-Tech<br />
2.3.2 Tornado FM 228 E<br />
2.3.3 Tron DF<br />
2.3.4 US Robotics Courier V-Everything</p>
<p>3. PPPD</p>
<p>3.1 Configurarea<br />
3.2 Script-uri<br />
3.2.1 Pornirea lui pppd si mentinerea lui in functiune<br />
3.2.2 Configurarea rutelor<br />
3.3 Test</p>
<p>______________________________________________________________________</p>
<p><span id="more-167"></span>Cea mai recenta versiune a acestui document poate fi gasita la:</p>
<p>http://www.sput.nl/software/leased-line/</p>
<p>1. Introducere</p>
<p>1.1. Ce este o linie inchiriata.</p>
<p>Orice legatura de date punct la punct pentru comunicatie, care este<br />
permanenta, fixa, inchiriata de la un operator de telefonie sau organizatie<br />
similara, consituie o linie inchiriata. Linia inchiriata implica cabluri,<br />
ca perechi torsadate , coaxiale sau fibre optice<br />
si poate implica tot soiul de alte echipamente, bobine, transformatoare,<br />
amplificatoare si regeneratoare.</p>
<p>Acest document se ocupa de :<br />
Configurarea modemului si daemonului pppd pentru a utiliza linii<br />
inchiriate pe 2 fire torsadate.</p>
<p>Acest document nu se ocupa de:<br />
SLIP, obtinerea si instalarea lui pppd, comunicatii sincrone de date,<br />
modemuri in banda de baza, xDSL.</p>
<p>1.2. Presupuneri.</p>
<p>Va trebui sa aveti deja daemonul pppd capabil de a functiona in<br />
sistemul dvs. De asemenea, trebuie sa aveti Minicom sau un program similar<br />
pentru a va configura modemul.</p>
<p>2. Modemul</p>
<p>O linie inchiriata nu este conectata la centrala telefonica, nu<br />
transporta curent continuu, ton de apel, ton de ocupat sau semnal de apel.<br />
Asta inseamna ca modemurile dvs. sunt pe cont propriu si vor trebui sa fie<br />
capabile sa functioneze in atare situatie.</p>
<p>Ar trebui sa aveti doua modemuri identice (inclusiv versiunea firmware),<br />
externe, care sa suporte modurile de lucru pentru linie inchiriata<br />
si mod &#8220;orb&#8221;. Asigurati-va ca modemurile dvs. pot functiona astfel. De<br />
asemenea, asigurati-va ca modemurile sunt bine<br />
documentate. Mai aveti nevoie de:</p>
<p>- 2 cabluri RS232 ecranate si cablate complet. Ecranul ar trebui<br />
sa fie conectat la carcasa conectorului la ambele capete (nu la pinul 1 si<br />
nu doar la un capat).</p>
<p>- Un conector RS232 de test poate fi avantajos daca il aveti.</p>
<p>- 2 cabluri cu mufe RJ11, unul la fiecare capat al liniei inchiriate.</p>
<p>- Cunostinte fundamentale privind comenzile AT.</p>
<p>2.1. Configurarea modemului.</p>
<p>O observatie privind configuratia modemului si sirurile de initializare<br />
in general: Configurati-va software-ul de modem (Minicom) sau (m)getty,<br />
pentru a putea folosi cea mai mare viteza posibila: 57600 bps pentru modem<br />
de 14.4 k si 115200 bps pentru modem de 28.8 k sau mai<br />
rapid. Multi utilizatori folosesc siruri de initializare lungi<br />
si complicate, adesea incepand cu sirul AT&amp;F si continand o multime de<br />
siruri specifice anumitor modemuri. Oricum, acestea sunt inutil de<br />
complicate. Majoritatea programelor se descurca bine cu cateva configurari<br />
simple, asa ca de ce sa nu scriem aceste configurari in memoria<br />
non-volatila pentru toate modemurile dvs. si sa folositi doar comanda ATZ<br />
ca sir de initializare in programe. Astfel puteti interschimba sau<br />
imbunatati modemurile fara sa faceti reconfigurari in programe.</p>
<p>Multe programe necesita sa folositi urmatoarele setari:</p>
<p>- Baud-rate fix.</p>
<p>- Contol de flux (flow control) RTS-CTS hardware bidirectional (nu xon-xoff)</p>
<p>- 8 biti, fara paritate, 1 bit de stop</p>
<p>- Modemul va trebui sa genereze starea REALA a semnalului DCD (&amp;C1)</p>
<p>- Modemul va trebui sa NU ignore starea semnalului DTR (&amp;D2 sau &amp;D3)</p>
<p>Verificati acestea cu AT&amp;V sau AT&amp;Ix (consultati documentatia modemului)</p>
<p>Aceste setari nu sunt neaparat implicite din fabrica (&amp;F), asa incat initierea<br />
modemului cu un sir de initializare cu AT&amp;F nu este intotdeauna o<br />
idee buna. Un lucru inteligent este probabil folosirea stringului AT&amp;F<br />
atunci cand avem motive sa credem ca sirul de initializare stocat<br />
in memoria nevolatila a modemului nu este bun. Daca veti crede<br />
ca ati gasit sirul potrivit de initializare a modemului, stocati-l<br />
in memoria nevolatila cu comanda AT&amp;W si testati-l amanuntit cu protocolul<br />
de transfer Z-modem pentru ambele tipuri de fisiere, atat ASCII cat si<br />
binar. Daca toate acestea merg perfect, configurati-va astfel modemurile<br />
pentru linia inchiriata.</p>
<p>Aflati cum sa treceti modemul in modul &#8220;dumb&#8221; (orb, brut) si, si mai<br />
important, cum sa scoateti modemul din acest mod. Modemul poate fi<br />
reconfigurat doar cand nu este in modul &#8220;dumb&#8221;. Asigurati-va<br />
ca ati configurat modemul pentru cea mai mare viteza posibila. Odata<br />
intrat in modul &#8220;dumb&#8221;, modemul va ignora toate comenzile AT, si nu isi va<br />
ajusta viteza dupa cea a portului serial, dar va utiliza viteza pentru<br />
care a fost configurat (aceasta configurare de viteza este stocata intr-un<br />
registru S, datorita sirului stabilit si stocat in memoria nevolatila).</p>
<p>Acum configurati modemul dupa cum urmeaza:</p>
<p>- Resetati DTR-ul (&amp;D3, uneori e vorba de un registru S). Aceasta<br />
setare este ceruta uneori de unele ISP-uri.</p>
<p>- Modul linie inchiriata (&amp;L1 sau &amp;L2, consultati documentatia modemului)</p>
<p>- Modemul corespondent pe auto-raspuns (S0=1), modemul local<br />
pe initiere (S0=0)</p>
<p>- Dezactivati codurile de rezultat (Q1, uneori modul<br />
&#8220;dumb&#8221; inlocuieste aceasta)</p>
<p>- Modul &#8220;dumb&#8221; (\D1 sau %D1, uneori e vorba de un jumper).<br />
In modul &#8220;dumb&#8221;, modemul va ignora comenzile AT (uneori va<br />
trebui chiar sa dezactivati caracterul ESC)</p>
<p>Scrieti configuratia in memoria nevolatila (AT&amp;W)</p>
<p>2.2. Test</p>
<p>Conectati modemurile la doua computere folosind 2 cabluri RS232 si<br />
conectati modemurile intre ele folosind un cablu RJ11. Folositi un program<br />
pentru modem, cum ar fi Minicom-ul din Linux, Procomm sau Telix (DOS) pe<br />
ambele calculatoare, pentru a testa modemurile. Ar trebui sa puteti tasta<br />
si afisa text de pe un calculator pe celalalt si vice-versa. Daca pe<br />
ecrane apar caractere ciudate, verificati viteza portului serial si alte<br />
asemenea configurari. Apoi deconectati si reconectati cablul RJ11. Asteptati<br />
sa se restabileasca conexiunea. Deconectati si reconectati cablurile<br />
RS232, inchideti si deschideti modemurile, opriti si porniti Minicom-ul.<br />
Modemurile vor trebui sa se reconecteze intotdeauna la cea mai mare viteza<br />
posibila (unele modemuri au LED-uri indicatoare a vitezei). Verificati<br />
daca modemurile ignora intr-adevar caracterul ESC (+++). Daca e necesar,<br />
dezactivati caracterul ESC.</p>
<p>Daca toate acestea functioneaza, veti dori poate sa reconfigurati modemurile.<br />
Dezactivati sunetul pentru modemul de la distanta (M0) si setati volumul<br />
la minim pentru modemul local (L1).</p>
<p>2.3. Exemple</p>
<p>2.3.1. Hi-Tech</p>
<p>Acesta este un modem aproximativ &#8220;no name&#8221;. Sirul de initializare este<br />
tipic si ar trebui sa functioneze pentru majoritatea modemurilor.</p>
<p>Initiator (local):<br />
ATL1&amp;C1&amp;D3&amp;L2%D1&amp;W&amp;W1</p>
<p>Raspuns (la distanta):<br />
ATM0L1&amp;C1&amp;D3&amp;L2%D1S0=1&amp;W&amp;W1</p>
<p>2.3.2.  Tornado FM 228 E</p>
<p>Asta ar trebui sa mearga:</p>
<p>Originate (local):<br />
ATB15L1Q1&amp;C1&amp;D3&amp;L2&amp;W&amp;W1</p>
<p>Answer (remote):<br />
ATM0B15M0Q1&amp;C1&amp;D3&amp;L2S0=1&amp;W&amp;W1</p>
<p>Mutati jumperul pentru modul &#8220;dumb&#8221; de la 2-3 la 1-2.</p>
<p>Datorita unui bug in firmware, modemurile se vor conecta abia dupa<br />
un reset hard (alimentare curent oprit si pornit) cand DTR este high.<br />
Am pus la punct un circuit care reseteaza hard modemul la trecerea lui DTR<br />
de pe low pe high. Daemonul pppd din BSD nu e prea &#8220;incantat&#8221; de<br />
aceasta. Combinand setarea &amp;D0 cu un circuit care reseteaza la<br />
trecerea din starea high in low, problema poate fi evitata.</p>
<p>2.3.3.  Tron DF</p>
<p>Caracterul ESC ar trebui dezactivat, setand S2 &gt; 127 ;</p>
<p>Initiator:<br />
ATL1&amp;L1Q1&amp;C1&amp;D3S2=171\D1&amp;W</p>
<p>Raspuns:<br />
ATM0&amp;L2Q1&amp;C1&amp;D3S0=1S2=171\D1&amp;W</p>
<p>2.3.4.  US Robotics Courier V-Everything</p>
<p>USR Sportster si USR Courier-I nu suporta linii inchiriate. Va<br />
trebuie versiunea Courier V-everything pentru aceasta. Exista o pagina WEB<br />
pe site-ul USR care &#8220;explica&#8221; cum se configureaza Courier-ul<br />
pentru linie inchiriata. Daca veti urma aceastei instructiuni veti<br />
sfarsi prin a aduce modemul in &#8220;moarte cerebrala&#8221; , care nu poate fi<br />
controlata sau monitorizata de pppd.</p>
<p>USR Courier poate fi configurat din DIP-switch-uri<br />
(comutatoare). Oricum, trebuie sa ii furnizati sir de initializare<br />
intai. Asigurati-va ca folositi setarea de fabrica potrivita.<br />
Spre deosebire de alte modemuri, acesta are trei setari de fabrica: &amp;F0, &amp;F1<br />
si &amp;F2. Daca ii dati comanda AT&amp;F va incarca setarea &amp;F0. Pentru a<br />
reseta comutarea DTR, trebuie sa setati bitul 0 in registrul<br />
S13. Aceasta inseamna ca trebuie sa setati S13=1. Mai departe, trebuie sa<br />
il setati pentru lucrul pe linie inchiriata cu &amp;L1:  ATS13=1&amp;L1&amp;W .<br />
Microcomutatoarele sunt in starea implicita, cu urmatoarele exceptii:</p>
<p>3  OFF Dezactiveaza codurile de rezultat</p>
<p>4  ON  Dezactiveaza comenzile off-line</p>
<p>5  ON  pentru initiere, OFF pentru raspuns</p>
<p>8  OFF Dumb mode</p>
<p>3. PPPD</p>
<p>Aveti nevoie de daemonul pppd (Point to Point Protocol) si de oarece<br />
cunostinte despre cum lucreaza. Consultati RFC-urile potrivite sau PPP-HOWTO<br />
din Linux daca este necesar. Cum nu veti folosi vreo procedura de login,<br />
nu folositi (m)getty nu veti furniza vreun utilizator fals<br />
pentru autentificare pppd. Nu veti forma numar de telefon, asa ca nu aveti<br />
nevoie nici de script chat. De fapt, configuratia si circuitul de modem pe<br />
care tocmai l-ati pus la punct seamana cu o legatura seriala null-modem.</p>
<p>Pentru o legatura fiabila, ar trebui sa indepliniti urmatoarele criterii:</p>
<p>- Imediat dupa boot-area sistemului de operare, pppd ar trebui<br />
sa &#8220;ridice&#8221; semnalul DTR in portul RS232, sa astepte semnalul<br />
DCD, sa intre in starea &#8220;sus&#8221;, si sa negocieze legatura.</p>
<p>- Daca sistemul de la distanta este oprit, pppd ar trebui sa<br />
astepte pana este pornit din nou.</p>
<p>- Daca legatura functioneaza si intamplator se opreste, pppd<br />
ar trebui sa reseteze modemul (prin &#8220;coborarea&#8221; si &#8220;ridicarea&#8221;<br />
semnalului DTR) dupa care sa incerce sa se reconecteze.</p>
<p>- Daca calitatea legaturii se deterioreaza prea mult, pppd ar<br />
trebui sa reseteze modemul si sa restabileasca legatura.</p>
<p>- Daca pppd &#8220;crapa&#8221;, un program watchdog (&#8220;caine de paza&#8221;) ar<br />
trebui sa il reporneasca.</p>
<p>3.1. Configurarea.</p>
<p>Sa presupunem ca modemul este conectat la COM2, adresa iP locala<br />
este &#8220;Loc_Ip&#8221; si adresa IP distanta este &#8220;Rem_Ip&#8221;. Vrem sa folosim MTU<br />
(Maximum Transmit Unit) cu valoarea 576. Fisierul /etc/ppp/options.ttyS1<br />
ar arata cam asa:</p>
<p>crtscts<br />
mru 576<br />
mtu 576<br />
passive<br />
Loc_Ip:Rem_Ip<br />
-chap<br />
modem<br />
#noauth<br />
-pap<br />
persist</p>
<p>Parametri ca &#8220;Asyncmap 0&#8243;, &#8220;Lock&#8221;, &#8220;Modem&#8221; and &#8220;-detach&#8221; sunt probabil<br />
deja specificati in fisierul /etc/ppp/options. Daca nu sunt , adaugati-i<br />
in fisierul /etc/ppp/options.ttyS1. Asa ca, daca sistemul local este<br />
192.168.1.1 si sistemul de la distanta este 10.1.1.1, fisierul<br />
/etc/ppp/options.ttyS1 este:</p>
<p>crtscts<br />
mru 576<br />
mtu 576<br />
passive<br />
192.168.1.1:10.1.1.1<br />
-chap<br />
modem<br />
#noauth<br />
-pap<br />
persist</p>
<p>Fisierul options.ttyS1 de pe sistemul de la distanta este:</p>
<p>crtscts<br />
mru 576<br />
mtu 576<br />
passive<br />
10.1.1.1:192.168.1.1<br />
-chap<br />
modem<br />
#noauth<br />
-pap<br />
persist</p>
<p>Optiunea &#8220;passive&#8221; limiteaza numarul de incercari de reconectare. Optiunea<br />
&#8220;persist&#8221; va mentine pppd in stare de functionare in caz de deconectare sau<br />
cand nu se poate conecta de prima data. Daca folositi intens telnet in<br />
timp ce faceti transfer de fisiere (FTP sau web), va trebui sa<br />
folositi valori mai mici pentru MTU si MRU, cum ar fi 296. Aceasta va face<br />
sistemul de la distanta sa raspunda mai rapid. Daca nu va pasa<br />
de telnet, puteti folosi valori de 1500 pentru MTU si MRU. Aveti in vedere<br />
oricum ca pachetele UDP nu pot fi fragmentate. Programul Speakfreely<br />
foloseste de pilda pachete UDP de 512 bytes. Deci MTU minim pentru<br />
Speakfreely este 552 bytes. Optiunea &#8220;noauth&#8221; poate fi necesara in<br />
distributiile noi.</p>
<p>3.2. Script-uri</p>
<p>3.2.1 Pornirea lui pppd si mentinerea lui in functiune</p>
<p>Ati putea porni pppd dintr-un script (rc) de boot. Oricum, daca faceti<br />
asta, si pppd moare, ramaneti fara legatura. O solutie mult mai stabila<br />
este aceea de a porni pppd din fisierul /etc/inittab:</p>
<p>s1:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200</p>
<p>Astfel, pppd va fi restartat daca &#8220;moare&#8221;. Asigurati-va ca aveti optiunea<br />
&#8220;-detach&#8221; (&#8220;nodetach&#8221; in distributiile mai noi), altfel inittab<br />
va porni mai multe pppd-uri, &#8220;plangandu-se&#8221; cu mesaje de genul &#8220;respawning<br />
too fast&#8221;.</p>
<p>NOTA: unele sisteme mai vechi nu accepta viteza de 115200.<br />
In acest caz folositi 38400 si parametrul &#8220;spd_vhi&#8221; pentru comanda<br />
&#8220;setserial&#8221;. Unele sisteme se asteapta sa folositi dispozitivul /dev/cua<br />
in loc de /dev/ttySx.</p>
<p>3.3.2. Configurarea rutelor.</p>
<p>Ruta implicita poate fi configurata cu optiunea &#8220;defaultroute&#8221; sau cu<br />
scriptul /etc/ppp/ip-up;</p>
<p>#!/bin/bash<br />
case $2 in<br />
/dev/ttyS1)<br />
/sbin/route add -net 0.0.0.0 gw Rem_Ip netmask 0.0.0.0<br />
;;<br />
esac</p>
<p>ip-up poate fi folosit de asemeni pentru a va sincroniza ceasul calculatorului<br />
cu comanda &#8220;netdate&#8221;.</p>
<p>Bineinteles, ruta setata cu ip-up nu este in mod necesar ruta implicita.<br />
Ip-up seteaza ruta catre reteaua de la distanta in timp ce scriptul ip-up<br />
de la distanta seteaza ruta catre reteaua locala. Daca reteaua dvs<br />
locala este 192.168.1.0 si interfata dvs ppp este 192.168.1.1,<br />
scriptul ip-up de pe masina de la distanta arata cam asa:</p>
<p>#!/bin/bash<br />
case $2 in<br />
/dev/ttyS1)<br />
/sbin/route add -net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0<br />
;;<br />
esac</p>
<p>Bitii &#8220;case $2&#8243; si &#8220;/dev/ttyS1)&#8221; apar in caz ca folositi mai multe conexiuni<br />
ppp. Ip-up va rula ori de cate ori apare o conexiune, dar doar partea<br />
dintre &#8220;/dev/ttySx)&#8221; si &#8220;;;&#8221; va fi executata, stabilind ruta potrivita<br />
pentru fiecare dispozitiv ttySx potrivit. Puteti afla mai multe despre<br />
rutare in documentul Linux Networking HOWTO la sectiunea rutare.</p>
<p>3.3. Test</p>
<p>Testati toata configuratia exact ca in cazul modemurlor.<br />
Daca functioneaza, luati bicicleta si porniti sistemul de la distanta.<br />
Daca nu functioneaza, verificati viteza portului COM. De obicei o greseala<br />
frecventa este de a configura legatura cu Minicom cu o viteza si<br />
apoi configurarea pppd cu alta viteza . Asa NU va functiona.<br />
Folositi aceiasi viteza permanent.</p>
]]></content:encoded>
			<wfw:commentRss>http://resurse-educationale.uv.ro/?feed=rss2&#038;p=167</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPCHAINS pentru Linux. HOWTO</title>
		<link>http://resurse-educationale.uv.ro/?p=165</link>
		<comments>http://resurse-educationale.uv.ro/?p=165#comments</comments>
		<pubDate>Wed, 06 Apr 2011 12:36:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Servers]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[chains]]></category>
		<category><![CDATA[conexiuni]]></category>
		<category><![CDATA[dmz]]></category>
		<category><![CDATA[ethernet]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[interfata]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[retea]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://resurse-educationale.uv.ro/?p=165</guid>
		<description><![CDATA[traducere ver. 0.2 de catre Riddl Documentul a fost tradus intr-un ritm foarte alert. Nu este o traducere profesionala. Deasemenea nu este o traducere mot-a-mot. Am incercat sa respect versiunea originala. Multumiri lui Gushterul. Daca gasiti greseli sau aveti obervatii &#8230; <a href="http://resurse-educationale.uv.ro/?p=165">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>traducere ver. 0.2 de catre Riddl<img title="More..." src="http://resurse-educationale.uv.ro/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><img title="More..." src="http://resurse-educationale.uv.ro/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><br />
Documentul a fost tradus intr-un ritm foarte alert.<br />
Nu este o traducere profesionala. Deasemenea nu este o traducere mot-a-mot.<br />
Am incercat sa respect versiunea originala.<br />
Multumiri lui Gushterul. Daca gasiti greseli sau aveti obervatii dati-mi<br />
un mail pentru Riddl la &#8220;discutii at gmx dot net&#8221;. Nu uitati sa precizati<br />
numele documentului.<br />
Multumesc anticipat.<br />
Pentru ultima versiune a acestei traduceri verifica<br />
&lt;http://www.securityorg.net/docs/&gt;.</p>
<p>Lecturare placuta!</p>
<p>______________________________________________________________________<br />
Rusty Russell<br />
v1.0.8, Tue Jul  4 14:20:53 EST 2000</p>
<p>Acest document descrie cum sa obtii, instalezi si configurezi software-ul<br />
ipchains pentru realizarea de firewall sub Linux, precum si cateva<br />
posibilitati de folosire al acestuia.<br />
______________________________________________________________________</p>
<p>Cuprins</p>
<p>1. Introducere<br />
1.1. La ce foloseste?<br />
1.2. De ce?<br />
1.3. Cum?<br />
1.4. De unde?<br />
2. Bazele teoretice ale filtrarii de pachete<br />
2.1. La ce foloseste?<br />
2.2. De ce?<br />
2.3. Cum?<br />
2.3.1. Un kernel ce are compilat suport pentru filtrare de<br />
pachete<br />
2.3.2. ipchains<br />
2.3.3. Crearea regulilor permanente<br />
3. Sunt derutat! Rutare, masqueradare, forwardare de pachete, ipautofw&#8230;.<br />
3.1. Ghidul de trei linii al lui Rusty privind masqueradarea<br />
3.2. Promovare gratuita: regulile WatchGuard<br />
3.3. Firewall-uri obisnuite<br />
3.3.1. Retea privata: Proxy-uri traditionale<br />
3.3.2. Retea privata: Proxy-uri transparente<br />
3.3.3. Retea privata: Masquerading<br />
3.3.4. Retea publica<br />
3.3.5. Servicii interne limitate<br />
3.4. Mai multe informatii despre masquerading</p>
<p>4. Filtrul de pachete<br />
4.1. Cum travereseaza pachetele filtrele<br />
4.1.1. Folosirea ipchains<br />
4.1.2. Ce vei vedea cand porneste computerul<br />
4.1.3. Operatii pentru o singura regula<br />
4.1.4. Optiuni de filtrare<br />
4.1.4.1. Specificarea adreselor IP sursa si destinatie<br />
4.1.4.2. Specificarea inversa<br />
4.1.4.3. Specificarea protocolului<br />
4.1.4.3.1. Specificarea porturilor TCP si UDP<br />
4.1.4.3.2. Specificarea tipului si codului<br />
ICMP<br />
4.1.4.4. Specificarea interfetei<br />
4.1.4.5. Specificarea doar a pachetelor TCP SYN<br />
4.1.4.6. Despre fragmente<br />
4.1.5. Efectele filtrarii de pachete<br />
4.1.5.1. Specificarea unei tinte<br />
4.1.5.2. Logarea pachetelor<br />
4.1.5.3. Schimbarea tos (type of service)<br />
4.1.5.4. Marcarea unui pachet<br />
4.1.5.5. Operatii pentru un chain<br />
4.1.5.6. Crearea unui chain nou<br />
4.1.5.7. Stergerea unui chain<br />
4.1.5.8. Stergerea tuturor regulilor unui chain<br />
4.1.5.9. Listarea regulilor unui chain<br />
4.1.5.10. Resetarea (aducerea la 0) a counter-elor<br />
4.1.5.11. Setarea policy-ului<br />
4.1.6. Operatii pentru masquerading<br />
4.1.7. Verificarea unui pachet<br />
4.1.8. Mai multe reguli dintr-o data si ceea ce se intampla<br />
atunci<br />
4.2. Exemple folositoare<br />
4.2.1. Folosirea ipchains-save<br />
4.2.2. Folosirea ipchains-restore<br />
5. Diverse<br />
5.1. Cum sa iti organizezi regulile firewall-ului<br />
5.2. Ce anume sa nu filtrezi spre afara<br />
5.2.1. Pachete icmp<br />
5.2.2. Conexiunile TCP catre servere DNS (servere de nume)<br />
5.2.3. FTP<br />
5.3. Filtrarea Pingului Mortii<br />
5.4. Filtrarea pentru Teardrop si Bonk<br />
5.5. Filtrarea fragmentelor in masa<br />
5.6. Schimbarea regulilor din firewall<br />
5.7. Cum realizez protectia impotriva spoofarii IP<br />
5.8. Proiecte mai avansate<br />
5.8.1. SPF: filtrare dupa starea pachetului (stateful packet<br />
filtering)<br />
5.8.2. &#8220;Hack-ul&#8221; ftp-data al lui Michael Hasenstein<br />
5.9. Planuri de viitor<br />
6. Probleme des intalnite<br />
6.1. ipchains -L ingheata!<br />
6.2. Specificarea inversa nu poate fi realizata!<br />
6.3. Masqueradarea/Forwardarea nu se realizeaza!<br />
6.4. Tinta -j REDIR nu merge!<br />
6.5. Specificare mai multor interfete (ex &#8220;-i ppp+&#8221;) nu merge!<br />
6.6. TOS nu merge!<br />
6.7. ipautofw si ipportfw nu merg!<br />
6.8. xosview este stricat!<br />
6.9. Segmentation Fault din cauza tintei &#8220;-j REDIRECT&#8221;!<br />
6.10. Nu pot preciza valori de timeout pentru masquerading!<br />
6.11. Vreau sa filtrez IPX!<br />
7. Un exemplu serios<br />
7.1. Topologia retelei<br />
7.2. Scopurile<br />
7.3. Inainte de realizarea filtrarii de pachete<br />
7.4. Filtrarea de pachete pentru pachetele directe<br />
7.4.1. Trecerea spre alte chain-uri din chain-ul forward<br />
7.4.2. Definirea chain-ului icmp-acc<br />
7.4.3. Reguli pentru conexiuni reteaua interna ==&gt; DMZ<br />
(servere)<br />
7.4.4. Reguli pentru conexiuni din reteaua externa ==&gt; DMZ<br />
(servere)<br />
7.4.5. Reguli pentru conexiuni din reteaua interna ==&gt; reteaua<br />
externa<br />
7.4.6. Reguli pentru conexiuni din DMZ ==&gt; reteaua interna<br />
7.4.7. Reguli pentru conexiuni din DMZ ==&gt; reteaua externa<br />
7.4.8. Reguli pentru conexiuni din reteaua externa ==&gt; reteaua<br />
interna<br />
7.4.9. Filtrul de pachete pentru insusi sistemul care este<br />
ruter<br />
7.4.9.1. Interfata catre reteaua externa<br />
7.4.9.2. Interfata catre reteaua de servere (DMZ)<br />
7.4.9.3. Interfata catre reteaua interna<br />
7.5. In final<br />
8. Anexa: Diferente intre ipchains si ipfwadm<br />
8.1. Tabel pentru informare rapida<br />
8.2. Exemple de comenzi ipfwadm translatate in ipchains<br />
9. Anexa: Folosirea scriptului ipfwadm-wrapper<br />
10. Anexa: Multumiri.<br />
10.1. Traduceri</p>
<p><span id="more-165"></span></p>
<p>______________________________________________________________________</p>
<p>1. Introducere</p>
<p>Aceste este IPCHAINS-HOWTO pentru Linux; citeste capitolul &#8220;De unde?&#8221;<br />
pentru site-ul principal care contine ultima veriune. Ar trebui sa citesti<br />
deasemenea NET-3-HOWTO. IP-Masquerading HOWTO, PPP-HOWTO, Ethernet-HOWTO si<br />
Firewall HOWTO ar fi deasemenea interesante de citit (la fel ar putea sa fie<br />
intesante si FAQ-ul alt.fan.bigfoot).</p>
<p>Daca filtrarea de pachete este ok pentru tine, citeste sectiunea &#8220;De ce?&#8221;,<br />
sectiunea &#8220;Cum?&#8221;, si citeste printre randuri sectiunea &#8220;Reguli pentru<br />
firewall&#8221;.</p>
<p>Daca faci trecerea de la ipfwadm, citeste sectiunea &#8220;Introducere&#8221;,&#8221;Cum?&#8221;,<br />
anexa &#8220;Diferente intre ipchains si ipfwadm&#8221; si sectiunea &#8220;Folosirea<br />
scriptului ipfwadm-wrapper&#8221;.</p>
<p>1.1. La ce foloseste?</p>
<p>Ipchains pentru linux este o rescriere a codului pentru firewall IPv4 pentru<br />
Linux (care a fost in mare preluat de la BSD) si o rescriere a ipfwadm, care<br />
este o rescriere a ipfw apartinand BSD-ului. Ipchains este cerut pentru<br />
administrarea filtrelor de pachete in kernelurile Linux versiunea 2.1.102 si<br />
mai avansate.</p>
<p>1.2. De ce?</p>
<p>Deoarece: codul mai vechi pentru firewall nu intelegea fragmentele, avea<br />
counter-e pe 32 biti (cel putin pe Intel), nu suporta alte protocoale in afara<br />
TCP, UDP si ICMP, nu putea sa realizeze schimbari mari rapid, nu stia sa<br />
specifice reguli inverse, are cateva inflorituri, si poate fi greu de manevrat<br />
(facandu-l predispus la erori din partea utilizatorului).</p>
<p>1.3. Cum?</p>
<p>In mod curent codul pentru filtrarea de pachete este inclus in kernelurile de<br />
la versiunea 2.1.102.. Pentru versiunile 2.0 va trebui sa aplici un patch<br />
pe care il downloadezi de pe pagina web. Daca kernelul 2.0 este mai recent<br />
decat patch-ul respectiv, ar trebui sa mearga; aceasta parte de cod din kernel<br />
este destul de stabila (ex. patch pentru kernel 2.0.34 este bun si pentru<br />
kernel 2.0.35). Deoarece patch-ul pentru ver. 2.0 este incompatibil cu<br />
patch-urile pentru ipportfw si ipautofw, nu recomand aplicarea acestuia decat<br />
in cazul in care ai mare nevoie de functionalitatea oferita de ipchains.</p>
<p>1.4. De unde?</p>
<p>Pagina oficiala poate fi gasita in trei locuri:<br />
Multumiri lui Penguin Computing  &lt;http://netfilter.filewatcher.org/ipchains&gt;<br />
Multumiri echipei SAMBA &lt;http://www.samba.org/netfilter/ipchains&gt;<br />
Multumiri lui Jim Pick   &lt;http://netfilter.kernelnotes.org/ipchains&gt;.</p>
<p>Exista o lista de discutii pentru rapoarte privind bug-uri, discutii,<br />
dezvoltare si folosire. Subscrie-te pe aceasta lista trimitand la subscribe at<br />
east.balius.com un mesaj avand in corpul mesajului &#8220;subscribe ipchains-list&#8221;.<br />
Pentru a trimite mail la toti cei care sunt subscrisi pe lista foloseste<br />
adresa ipchains-list at east.balius.com.</p>
<p>2. Bazele teoretice ale filtrarii de pachete</p>
<p>2.1. La ce foloseste?</p>
<p>Intreg traficul dintr-o retea este transmis sub forma de pachete. De exemplu,<br />
downloadarea unui fisier (sa zicem, in marime de 50K) va cauza primirea a in<br />
jur de 36 de pachete cu o marime de 1460 bytes fiecare.</p>
<p>Partea de inceput a oricarui pachet spune unde se duce, de unde a venit, tipul<br />
pachetului, si alte asemenea detalii. Aceasta parte de inceput a pachetului se<br />
numeste header. Restul pachetului care contine informatia propriu-zisa este<br />
numita body (corp).</p>
<p>Unele protcoale, cum ar fi TCP, care este folosit pentru trafic web, mail, si<br />
conectarea de la distanta pe alte sisteme, folosesc termenul de &#8220;conexiune&#8221; &#8211;<br />
inainte de transmiterea oricaror informatii cu date propriu-zise, pachete<br />
diferite (cu headere speciale) sunt schimbate, spunand  &#8220;Vreau sa ma<br />
conectez&#8221;, &#8220;OK&#8221;, si &#8220;Mersi&#8221;. Apoi pachete normale sunt schimbate.</p>
<p>Un filtru de pachete este o portiune de cod care se uita la headerul<br />
pachetelor pe masura ce acestea trec, si decid soarta intregului pachet. Poate<br />
sa decida sa ignore pachetul (ignora pachetul ca si cum nu ar fi fost<br />
primit), accepta pachetul (lasa pachetul sa intre), sau sa respinga pachetul<br />
(asemanator cu ignorarea pachetul cu deosebira ca spune sistemului care l-a<br />
trimis acest lucru).</p>
<p>Sub linux, filtrarea de pachete este compilata in kernel, si sunt cateva<br />
smecherii pe care le putem face cu pachetele, dar ramane valabil principiul<br />
general al examinarii headerelor si determinarea sortii pachetului.</p>
<p>2.2. De ce?</p>
<p>Control. Securitate. Vigilenta.</p>
<p>Control:<br />
cand folosesti un sistem Linux pentru a-ti conecta reteaua interna<br />
la o alta retea (sa spunem, Internet) ai posibilitatea de a permite<br />
un anumit tip de trafic, si sa refuzi pe altele. De exemplu,<br />
header-ul contine adresa destinatie a unui pachet, asa ca poti<br />
preveni pachetele sa se duca spre o anumita parte a retelei<br />
exterioare. Ca un alt exemplu, folosesc Netscape pentru accesarea<br />
arhivelor Dilbert. Sunt reclame pe pagina de la doubleclick.net, si<br />
Netscape imi pierde timpul incarcandu-le. Spunand filtrului de pachete<br />
sa nu permita pachete de la sau spre nici una din adresele detinute<br />
de catre doubleclick.net rezolva aceasta problema (cu toate acestea<br />
sunt modalitati mai bune pentru aceasta: vezi Junkbuster).</p>
<p>Securitate:<br />
cand sistemul tau Linux este singurul intre haosul Internetului<br />
si reteaua ta ordonata si delicata, este placut sa stii ca poti<br />
sa restrictionezi ceea ce vine tropaind la usa. De exemplu, poti sa<br />
permiti la tot sa iasa din retea, dar ai putea fi ingrijorat de<br />
binecunoscutul &#8220;Ping al Mortii&#8221; venind de la persoanele din afara rau<br />
intentionate. Ca un alt exemplu, s-ar putea sa nu doresti ca<br />
persoanele din afara sa se telnet-uiasca pe sistemul tau Linux, chiar<br />
daca toate conturile tale au parole. Poate doresti (ca multi oameni)<br />
sa fii un observator  al Internet-ului, si nu server (de voie, sau in<br />
alt mod). Pur si simplu nu lasa pe nimeni sa se conecteze, punand<br />
fitrul de pachete sa respinga pachetele folosite la initierea de<br />
conexiuni.</p>
<p>Vigilenta:<br />
uneori o masina prost configurata in reteaua locala va decide sa<br />
arunce pachete spre lumea din afara. Este dragut sa spui filtrului de<br />
pachete sa te anunte daca se intampla ceva anormal; poate poti face<br />
ceva cu privire la acel lucru, sau poate esti doar curios.</p>
<p>2.3. Cum?</p>
<p>2.3.1. Un kernel ce are compilat suport pentru filtrare de pachete</p>
<p>Ai nevoie de un kernel care sa aiba suport compilat pentru IP firewall chains.<br />
Poti sa iti dai seama daca ai kernelul care iti trebuie verificand existenta<br />
fisierului &#8220;/proc/net/ip_fwchains&#8221;. Daca acesta exista, este ok.</p>
<p>Daca nu, trebuie sa compilezi un kernel cu suport pentru IP firewall chains.<br />
Intai downloadeaza sursele kernelului pe care il doresti. Daca ai sursele<br />
pentru kernel peste versiunea 2.1.102, inclusiv, nu va fi necesar sa ii aplici<br />
patch. In caz contrar, aplica un patch de pe pagina web listata mai sus, si<br />
realizeaza configuratia cum este detaliat mai jos. Daca nu stii cum sa faci<br />
asta nu intra in panica &#8212; citeste Kernel-HOWTO.</p>
<p>Optiunile de configurarea ce trebuie facute pentru kernel ver 2.0 sunt:</p>
<p>______________________________________________________________________<br />
CONFIG_EXPERIMENTAL=y<br />
CONFIG_FIREWALL=y<br />
CONFIG_IP_FIREWALL=y<br />
CONFIG_IP_FIREWALL_CHAINS=y<br />
______________________________________________________________________</p>
<p>Pentru kernelurile ver. 2.1 sau 2.2:</p>
<p>______________________________________________________________________<br />
CONFIG_FIREWALL=y<br />
CONFIG_IP_FIREWALL=y<br />
______________________________________________________________________</p>
<p>Comanda ipchains cumunica kernelului si ii spune ce pachete sa filtreze. Mai<br />
jos este prezentat cum vei realiza filtrarea de pachete.</p>
<p>2.3.2. ipchains</p>
<p>Comanda ipchains introduce si sterge reguli din portiunea din kernel<br />
referitoare la filtrarea de pachete. Aceasta inseamna ca orice vei realiza va<br />
fi pierdut dupa rebootare, citeste &#8220;Crearea regulilor permanente&#8221; pentru a<br />
vedea cum sa faci regulile permanente.</p>
<p>ipchains inlocuieste ipfwadm, care a fost folosit pentru vechiul cod de<br />
firewall IP. Exista o multime de scripturi folositoare de pe site-ul ftp al<br />
ipchains-ului:</p>
<p>http://netfilter.filewatcher.org/ipchains/ipchains-scripts-1.1.2.tar.gz</p>
<p>Aceasta arhiva contine un script numit ipfwadm-wrapper care iti permite sa<br />
realizezi filtrarea de pachete exact cum era inainte. Probabil ca nu ar trebui<br />
sa folosesti acest scipt in afara de cazul cand doresti o cale rapida de a<br />
upgrada un sistem ce foloseste ipfwadm (este mai incet, nu verifica<br />
argumentele, etc.). In acest caz nu ai nevoie nici de acest HOWTO.</p>
<p>Vezi anexa &#8220;Diferente intre ipchains si ipfwadm&#8221; si anexa &#8220;Folosirea scriptului<br />
ipfwadm-wrapper&#8221; pentru mai multe detalii  privind ipfwadm.</p>
<p>2.3.3. Crearea regulilor permanente</p>
<p>Regulile curente ale firewall-ului se afla in kernel, si de aceea vor fi<br />
pierdute la rebootare. Recomand folosirea scripturile &#8220;ipchains-save&#8221; si<br />
&#8220;ipchains-restore&#8221; pentru a face regulile permanente. Pentru a realiza<br />
aceasta, seteazati regulile, apoi ruleaza (ca root):</p>
<p># ipchains-save &gt; /etc/ipchains.rules<br />
#</p>
<p>Creaza un script astfel:</p>
<p>#! /bin/sh<br />
# Script to control packet filtering.</p>
<p># If no rules, do nothing.<br />
[ -f /etc/ipchains.rules ] || exit 0</p>
<p>case &#8220;$1&#8243; in<br />
start)<br />
echo -n &#8220;Turning on packet filtering:&#8221;<br />
/sbin/ipchains-restore &lt; /etc/ipchains.rules || exit 1<br />
echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
echo &#8220;.&#8221;<br />
;;<br />
stop)<br />
echo -n &#8220;Turning off packet filtering:&#8221;<br />
echo 0 &gt; /proc/sys/net/ipv4/ip_forward<br />
/sbin/ipchains -F<br />
/sbin/ipchains -X<br />
/sbin/ipchains -P input ACCEPT<br />
/sbin/ipchains -P output ACCEPT<br />
/sbin/ipchains -P forward ACCEPT<br />
echo &#8220;.&#8221;<br />
;;<br />
*)</p>
<p>echo &#8220;Usage: /etc/init.d/packetfilter {start|stop}&#8221;<br />
exit 1<br />
;;<br />
esac</p>
<p>exit 0</p>
<p>Asigura-te ca acest script este rulat devreme in procesul de incarcare al<br />
sistemului.  In cazul meu (Debian 2.1), am facut o legatura simbolica numita<br />
&#8220;S39packetfilter&#8221; in directorul &#8220;/etc/rcS.d&#8221; (acesta va fi rulat inainte de<br />
S40network).</p>
<p>3. Sunt derutat! Rutare, masqueradare, forwardare de pachete, ipautofw&#8230;.</p>
<p>Acest HOWTO este dedicat filtrarii de pachete. Aceasta inseamna a decide ce<br />
pachete sa lasi sa treaca sau nu. Cu toate acestea, Linux-ul fiind terenul de<br />
joaca al hackerilor probabil ca doresti sa realizezi mai multe de atat.</p>
<p>O problema este faptul ca aceeasi comanda &#8220;ipchains&#8221; este folosita sa<br />
controlezi masqueradingul cat si realizarea de proxy transparent, deasemenea<br />
aceastea sunt diferite fata de filtrarea de pachete (implementarea Linux<br />
curenta le pune una langa celelalte,  lasand impresia ca sunt strans<br />
inrudite).</p>
<p>Realizarea de masquerading si proxy transparent sunt detaliate in HOWTO-uri<br />
separate, si auto forwardarea si fowardarea de porturi sunt controlate de<br />
comenzi diferite, dar cum multa lume ma intreaba despre acestea, voi include o<br />
multime de scenarii posibile si voi indica momentul cand trebuie aplicat<br />
fiecare. Meritele de securitate ale fiecarei configuratii nu va fi discutat<br />
aici.</p>
<p>3.1. Ghidul de trei linii al lui Rusty privind masqueradarea</p>
<p>Se presupune ca interfata ta externa este &#8220;ppp0&#8243;. Foloseste comanda &#8220;ifconfig&#8221;<br />
pentru a afla interfata, si modifica dupa caz:</p>
<p># ipchains -P forward DENY<br />
# ipchains -A forward -i ppp0 -j MASQ<br />
# echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>3.2. Promovare gratuita: regulile WatchGuard</p>
<p>Poti sa cumperi firewall-uri gata facute. Unul excelent este FireBox de la<br />
WatchGuard. Este excelent pentru ca imi place, este sigur, este bazat pe<br />
Linux, si pentru ca au finantat suportul pentru ipchains cat si pentru noul<br />
cod de firewall (pentru 2.4). Pe scurt, WatchGuard ma platesc pe mine pentru a<br />
avea ce manca in timp ce muncesc pentru voi. Asa ca ia in considere produsul<br />
lor.</p>
<p>http://www.watchguard.com &lt;http://www.watchguard.com&gt;</p>
<p>3.3. Firewall-uri obisnuite</p>
<p>Te ocupi de littlecorp.com. Ai o retea interna, si o conexiune PPP catre<br />
internet (de pe ruterul firewall.littlecorp.com care are adresa 1.2.3.4).<br />
Folosesti ethernet pentru reteaua locala, si sistemul tau se numeste &#8220;myhost&#8221;.<br />
Sectiunea care urmeaza va ilustra diferite scenarii care sunt obisnuite.<br />
Cititi cu atentie, pentru ca sunt fiecare usor diferite.</p>
<p>3.3.1. Retea privata: Proxy-uri traditionale</p>
<p>In acest scenariu, pachetele din reteaua privata nu vor ajunge pe Internet si<br />
viceversa. Adresele IP pentru reteaua privata ar trebui sa fie asignate din<br />
clasa de IP-uri pentru retele private conform cu RFC1918 (ex: 10.*.*.*,<br />
172.16.*.*-172.31.*.* or 192.168.*.*).</p>
<p>Singurul mod prin care te conecteazi la Internet este prin conectare la<br />
firewall, care este singurul sistem comun celor doua retele, pe care le<br />
conecteaza. Pentru a realiza acest lucru folosesti (pe firewall) o aplicatie<br />
numita proxy (exista proxy-uri pentru FTP, www, telnet, RealAudio, Usenet News<br />
si alte servicii). Citeste Firewall HOWTO.</p>
<p>Orice servicii pe care le doresti accesibile de pe Internet trebuie sa fie pe<br />
firewall. (insa vezi &#8220;Servicii interne limitate&#8221;).</p>
<p>Exemplu: Permiterea acesului web din reteaua privata catre Internet</p>
<p>1. Reteaua privata are asignate adresele 192.168.1.*, myhost fiind sistemul cu<br />
adresa 192.168.1.100, iar interfata ethernet a firewall-ului avand asignata<br />
adresa 192.168.1.1.</p>
<p>2. Un proxy pentru web (ex. squid) este instalat si configurat pe firewall, sa<br />
spunem ca asculta pe portul 8080.</p>
<p>3. Netscape-ul din reteaua privata este configurat sa foloseasca drept proxy<br />
portul 8080 de pe firewall.</p>
<p>4. DNS nu trebuie sa fie configurat in reteaua privata.</p>
<p>5. DNS trebuie sa fie configurat pe firewall.</p>
<p>6. Nici o ruta default (gateway) nu trebuie sa fie configurata in reteaua<br />
privata.</p>
<p>Netscape de pe myhost citeste http://slashdot.org</p>
<p>1. Netscape se conecteaza la portul 8080 de pe firewall, folosind portul 1050<br />
de pe myhost. Intreaba de pagina web a adresei &#8220;http://slashdot.org&#8221;.</p>
<p>2. Proxy-ul se uita dupa numele &#8220;slashdot.org&#8221;, si gaseste 207.218.152.131.<br />
Apoi deschide o conexiune catre acea adresa IP (folosind portul 1025 de pe<br />
interfata externa a firewall-ului), si intreaba serverul web (portul 80) de<br />
pagina web.</p>
<p>3. Pe masura ce primeste pagina web prin conexiunea cu serverul de web,<br />
firewall-ul copiaza informatia catre conexiunea cu Netscape.</p>
<p>4. Netscape afiseaza pagina</p>
<p>Din punctul de vede al slashdot.org, conexiunea este facuta de la 1.2.3.4,<br />
portul 1025 catre 207.218.152.131 (slashdot.org), portul 80. Din punctul de<br />
vedere al myhost conexiunea este realizata de la 192.168.1.100 (myhost),<br />
portul 1050, catre 192.168.1.1 (interfata ethernet a firewall-ului), portul<br />
8080.</p>
<p>3.3.2. Retea privata: Proxy-uri transparente</p>
<p>In acest scenariu, pachetele din reteaua privata nu vor ajunge pe Internet si<br />
viceversa. Adresele IP pentru reteaua privata ar trebui sa fie asignate din<br />
clasa de IP-uri pentru retele private conform cu RFC1918 (ex: 10.*.*.*,<br />
172.16.*.*-172.31.*.* or 192.168.*.*).</p>
<p>Singurul mod prin care te conectezi la Internet este prin conectare la<br />
firewall, care este singurul sistem comun celor doua retele, pe care le<br />
conecteaza. In acest scop rulezi o aplicatie (pe firewall) numita proxy<br />
transparent; kernelul schimba destinatia pachetele din reteaua privata care ar<br />
fi trebuit sa fie trimise spre Internet catre proxy-ul transparent. (modifica<br />
rutarea).</p>
<p>Proxy transparent insemna ca hosturile din reteaua privata nu au nevoie sa<br />
shtie ca este implicat un proxy.</p>
<p>Orice servicii pe care le doresti accesibile de pe Internet trebuie sa fie pe<br />
firewall. (insa vezi &#8220;Servicii interne limitate&#8221;).</p>
<p>Exemplu: Permiterea acesului web din reteaua privata catre Internet</p>
<p>1. Reteaua privata are asignate adresele 192.168.1.*, myhost fiind sistemul cu<br />
adresa 192.168.1.100, iar interfata ethernet a firewall-ului avand asignata<br />
adresa 192.168.1.1.</p>
<p>2. Un proxy de web transparent (cred ca sunt patch-uri pentru squid, pentru ai<br />
permite sa lucreze in acest mod, sau incerca &#8220;transproxy&#8221;) este instalat si<br />
configurat pe firewall, sa spunem ca asculta pe portul 8080.</p>
<p>3. Kernelului ii este spus, folosind ipchains, sa redirecteze conexiunile<br />
catre portul 80 spre proxy.</p>
<p>4. Netscape din reteaua privata este configurat sa se conecteze direct.</p>
<p>5. DNS trebuie sa fie configurat in reteaua privata (trebuie sa rulezi un<br />
server DNS pentru reteaua locala, ca un proxy, pe firewall).</p>
<p>6. Ruta default (gateway) trebuie sa fie configurata in reteaua privata,<br />
pentru a trimite pachetele catre firewall.</p>
<p>Netscape de pe myhost citeste http://slashdot.org.</p>
<p>1. Netscape rezolva numele &#8220;slashdot.org&#8221; in adresa 207.218.152.131. Apoi<br />
deschide o conexiune catre aceea adresa folosind portul local 1050, si<br />
cere serverului de web (portul 80) pagina web.</p>
<p>2. Pe masura ce pachetele de la myhost (portul 1050) catre slashdot.org<br />
(portul 80, trec prin firewall, ele sunt redirectate catre proxy-ul<br />
transparent ce asculta pe portul 8080. Proxy-ul transparent deschide o<br />
conexiune (folosind portul local 1025) catre 207.218.152.131, portul 80 (care<br />
este adresa reala catre care se indreptau pachetele originale).</p>
<p>3. Pe masura ce primeste pagina web prin conexiunea cu serverul de web,<br />
firewall-ul copiaza informatia catre conexiunea cu Netscape.</p>
<p>4. Netscape afiseaza pagina.</p>
<p>Din punctul de vedere al slashdot.org, conexiunea este facuta de la 1.2.3.4<br />
(interfata PPP a firewall-ului), portul 1025 catre 207.218.152.131<br />
(slashdot.org), portul 80. Din punctul de vedere al myhost conexiunea este<br />
realizata de la 192.168.1.100 (myhost), portul 1050, catre 207.218.152.131<br />
(slashdot.org) portul 80, dar defapt vorbeste cu proxy-ul transparent.</p>
<p>3.3.3. Retea privata: Masquerading</p>
<p>In acest scenariu, pachetele din reteaua privata nu vor ajunge pe Internet<br />
fara o modificare in prealabil si viceversa. Adresele IP pentru reteaua<br />
privata ar trebui sa fie asignate din clasa de IP-uri pentru retele private<br />
conform cu RFC1918 (ex: 10.*.*.*, 172.16.*.*-172.31.*.* sau 192.168.*.*).</p>
<p>In loc sa folosim un proxy, folosim o facilitate speciala a kernelului numita<br />
&#8220;masquerading&#8221;. Masqueradarea recreeaza pachetele pe masura ce acestea trec<br />
prin firewall, in asa fel incat intodeauna par ca vin de la insusi firewall-ul.<br />
Apoi rescrie raspunsurile in asa fel incat apar ca si cum ar veni de la insasi<br />
destinatia originala.</p>
<p>Masquerading are module speciale pentru unele protocoale mai speciale, cum ar<br />
fi FTP, RealAudio, Quake, etc. Pentru protocoale pentru care nu se poate<br />
realiza acest lucru, facilitatea &#8220;forwardare automata&#8221; care poate manipula<br />
unele dintre aceste protocoale prin realizarea automata de forwardare pentru<br />
porturile necesare. Vezi &#8220;ipportfw&#8221; (kernelurile 2.0) sau &#8220;ipmasqadm&#8221;<br />
(kernelurile 2.1).</p>
<p>Orice servicii pe care le doresti accesibile de pe Internet trebuie sa fie pe<br />
firewall. (insa vezi &#8220;Servicii interne limitate&#8221;).</p>
<p>Exemplu: Permiterea accesului la web din reteaua privata catre Internet.</p>
<p>1. Adresa privata are asignate adresele 192.168.1.*, myhost fiind sistemul cu<br />
adresa 192.168.1.100, iar interfata ethernet a firewall-ului avand asignata<br />
adresa 192.168.1.1.</p>
<p>2. Firewall-ul este configurat sa realizeze masquerading pentru pachetele care<br />
pleaca din reteaua privata spre Internet, portul 80.</p>
<p>3. Netscape este configurat sa se conecteze direct.</p>
<p>4. DNS trebuie configurat corect in reteaua privata.</p>
<p>5. Firewall-ul ar trebui sa fie ruta default (gateway) pentru reteaua privata.</p>
<p>Netscape de pe myhost citeste http://slashdot.org</p>
<p>1. Netscape rezolva numele &#8220;slashdot.org&#8221; in adresa IP 207.218.152.131. Apoi<br />
deschide o conexiune catre acea adresa IP, folosind portul local 1050, si cere<br />
serverului de web (portul 80) pagina web.</p>
<p>2. Pe masura ce pachetele de la myhost (portul 1050) catre slashdot.org<br />
(portul 80) trec prin firewall, acestea sunt rescrie pentru a parea ca vin de<br />
pe interfata PPP a firewall-ului, portul 65000. Firewall-ul are o adresa<br />
internet valida (1.2.3.4) asa ca pachetele replica de la slashdot.org sunt<br />
rutate inapoi corect.</p>
<p>3. Pe masura ce pachetele de la slashdot.org (portul 80) sunt rutate inapoi<br />
catre firewall.littlecorp.com (portul 65000), acestea sunt rescrise pentru a<br />
se inapoia catre myhost, portul 1050. Aceasta este reala magie a<br />
masqueradingului: tine minte cand rescrie pachetele ce ies pentru ca sa poata<br />
rescrie pachetele replica pe masura ce acestea vin.</p>
<p>4. Netscape afiseaza pagina.</p>
<p>Din punctul de vedere al slashdot.org, conexiunea este realizata de la adresa<br />
IP 1.2.3.4 (interfata PPP a firewall-ului) portul 65000, catre<br />
207.218.152.131 (slashdot.org) portul 80.</p>
<p>3.3.4. Retea publica</p>
<p>In acest scenariu,  reteaua ta personala este parte din Internet: pachetele<br />
pot sa circule fara nici o modificare intre ambele retele. Adresele IP ale<br />
retelei interne trebuie sa fie asignate printr-o cerere pentru un bloc de<br />
adrese IP, astfel incat restul Internetului sa stie cum sa ruteze pachetele<br />
catre aceasta. Aceasta implica o conexiune permanenta.</p>
<p>In acest caz, filtrul de pachete este folosit pentru a decide ce pachete sa fie<br />
forwardate intre reteaua ta si restul Internetului, de exemplu sa permiti<br />
restului Internetului accesul numai la serverele interne de web.</p>
<p>Exemplu: Permiterea accesului web din reteaua personala catre Internet</p>
<p>1. Reteaua interna are adresele IP asignate conform cu blocul de adrese IP pe<br />
care le-ai inregistrat. (sa zicem 1.2.3.*)</p>
<p>2. Firewall-ul este configurat sa permita traficul.</p>
<p>3. Netscape este configurat sa se conecteze direct.</p>
<p>4. DNS trebuie sa fie corect configurat in reteaua ta.</p>
<p>5. Firewall-ul trebuie sa fie ruta default (gateway) pentru reteaua ta.</p>
<p>Netscape de pe myhost citeste http://slashdot.org</p>
<p>1. Netscape rezolva numele &#8220;slashdot.org&#8221; in adresa IP 207.218.152.131.<br />
Deschide apoi o conexiune catre aceea adresa IP, folosind portul local 1050,<br />
si cere serverului de web (portul 80) pagina web.</p>
<p>2. Pachetele trec prin firewall-ul tau la fel cum trec prin multe alte rutere<br />
intre tine si slashdot.org.</p>
<p>3. Netscape afiseaza pagina.</p>
<p>Exista doar o singura conexiune: de la 1.2.3.4 (myhost) portul 1050, la<br />
207.218.152.131 (slashdot.org) portul 80.</p>
<p>3.3.5. Servicii interne limitate</p>
<p>Sunt cateva lucruri pe care le poti intreprinde pentru a permite accesul din<br />
afara Internetului catre servicile interne, decat sa rulezi acele servici pe<br />
firewall. Aceast lucru este posibil printr-o solutie pentru conexiunile<br />
externe in gen proxy sau masquerading.</p>
<p>Cea mai simpla abordare este sa rulezi aplicatia &#8220;redirector&#8221;, care este un<br />
proxy care asteapta o conexiune pe un port dat, si apoi deschide o conexiune<br />
interna catre un host intern, pe un anumit port, si copiaza datele intre cele<br />
doua conexiuni. Din punctul de vedere al Internetului, conexiunea este facuta<br />
pe firewall. Din punctul de vedere al serverului intern, conexiunea este<br />
facuta intre interfata interna a firewall-ului si serverul intern.</p>
<p>O alta cale (care, pentru kernel ver. 2.0 este necesar un patch pentru<br />
ipportwf, sau un kernel versiunea 2.1 sau peste) este sa folosesti forwardarea<br />
de porturi din kernel. Aceasta realizeaza acelasi lucru ca &#8220;redirector&#8221;<br />
intr-un mod diferit: kernelul rescrie pachetele pe masura ce ele trec,<br />
schimbandu-le adresa si portul destinatie catre un host si port anumit din<br />
reteaua interna. Din punctul de vedere al Internetului conexiunea este facuta<br />
cu firewall-ul. Din punctul de vedere al serverului intern, conexiunea este<br />
una directa intre serverul intern si hostul din Internet.</p>
<p>3.4. Mai multe informatii despre masquerading</p>
<p>David Ranch a scris un excelent nou HOWTO despre masquerading, care se<br />
suprapune mult peste acest HOWTO. Poti sa gasesti acest HOWTO la</p>
<p>http://www.linuxdoc.org/HOWTO/IP-Masquerade-HOWTO.html</p>
<p>Pagina oficiala pentru Masquerading este la:</p>
<p>http://ipmasq.cjb.net &lt;http://ipmasq.cjb.net&gt;</p>
<p>4. Filtrul de pachete</p>
<p>Aceasta sectiune descrie tot ceea ce trebuie sa stii cu adevarat pentru a<br />
realiza un filtru de pachete ca sa iti indeplineasca cerintele.</p>
<p>4.1. Cum travereseaza pachetele filtrele</p>
<p>Kernelul porneste cu trei liste de reguli; aceste liste se numesc chain-uri.<br />
Aceste trei chain-uri incluse default sunt: input, output si forward. Cand un<br />
pachet soseste (sa zicem, prin placa Ethernet) kernelul foloseste chain-ul<br />
input pentru a decide soarta pachetului. Daca trece de acest chain, kernelul<br />
decide unde sa trimita pachetul (aceasta este numita rutare). Daca este<br />
destinat pentru o alta masina, pachetul trece prin chain-ul forward. In final,<br />
chiar inainte ca un pachet sa plece, kernelul verifica chain-ul output.</p>
<p>Un chain este o lista cu reguli ce trebuie verificate. Fiecare regula spune<br />
&#8220;daca headerul pachetului arata asa, atunci iata ce sa faci cu pachetul&#8221;. Daca<br />
regula nu se potriveste cu pachetul, atunci urmatoarea regula din chain este<br />
examinata. In final, daca nu mai exista reguli de verificat, atunci kernelul<br />
verifica politica (policy-ul) pe care o are chain-ul. Intr-un sistem in care<br />
se pune baza pe securitate, de obicei politica este sa ignore pachetul sa sa<br />
ii dea reject.</p>
<p>Pentru fanii ASCII, aceasta este calea pe care o parcurge un pachet:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
|            ACCEPT/                              interfata lo |<br />
v           REDIRECT                  _______                  |<br />
&#8211;&gt; C &#8211;&gt; S &#8211;&gt; ______ &#8211;&gt; D &#8211;&gt; ~~~~~~~~ &#8211;&gt;|Chain-ul|&#8212;&gt; _________&#8211;&gt;<br />
h     a  |Chain-ul|    e    {Decizie  }  |forward |    |Chain-ul |ACCEPT<br />
e     n  |input   |    m    {de rutare}  |________|&#8212;&gt;|output   |<br />
c     i  |________|    a     ~~~~~~~~        |     | -&gt;|_________|<br />
k     t       |        s       |             |     | |     |<br />
s     y       |        q       |             v     | |     |<br />
u     |       v        e       v            DENY/  | |     v<br />
m     |     DENY/      r   Proces Local    REJECT  | |   DENY/<br />
|     v    REJECT      a       |                   | |  REJECT<br />
|   DENY               d       &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; |<br />
v                      e &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
DENY</p>
<p>Iata o descriere a fiecarui pas:</p>
<p>Checksum: Acesta este un test pentru a vedea daca pachetul a fost corupt in<br />
vreun fel. Daca da, atunci este ignorat.</p>
<p>Normalitate (sanity): Acest test defapt exista inainte fiecarui chain, dar<br />
acela care se face inainte chain-ului input este cel mai important. Pachetele<br />
malformate ar putea sa incurce codul de verificare al regulilor, aceastea sunt<br />
ignorate aici (daca acest lucru se intampla, un mesaj este trimis catre<br />
syslog).</p>
<p>Chain-ul input: Acesta este primul chain din firewall unde pachetul va fi<br />
verificat. Daca decizia chain-ului nu este DENY (ignora) sau REJECT, pachetul<br />
isi continua drumul.</p>
<p>Demasquerade:Daca pachetul este o replica la un pachet asupra caruia a fost<br />
realizata masquerading, se realizeaza asupra acestuia demasquradare, iar apoi<br />
se indreapta direct catre chain-ul output. Daca nu folosesti Masquerading IP,<br />
poti sa stergi mental aceasta din diagrama.</p>
<p>Decizie de rutare: Campul privind destinatia este examinat de catre codul ce<br />
realizeaza rutarea, pentru a decide daca pachetul trebuie sa se indrepte catre<br />
un proces local (vezi &#8220;Procesul local&#8221; de mai jos) sau forwardat catre o<br />
masina la distanta (vezi &#8220;Chain-ul forward&#8221; de mai jos).</p>
<p>Procesul local: Un proces ruland pe masina poate primi pachete dupa pasul<br />
deciziei privind rutarea pachetelor, si poate trimite pachete (care trec prin<br />
pasul deciziei rutarii, apoi travereseaza chain-ul output)</p>
<p>Interfata lo: Daca pachetele unui proces local, sunt destinate pentru un<br />
proces local, acestea vor iesi prin chain-ul output cu interfata setata &#8220;lo&#8221;,<br />
apoi se vor intoarce prin chain-ul input cu interfata deasemenea &#8220;lo&#8221;.<br />
Interfata &#8220;lo&#8221; este numita interfata loopback.</p>
<p>local: daca pachetul nu a fost creat de un proces local, atunci chain-ul<br />
forward este verificat, in caz contrar pachetul se duce catre chain-ul output.</p>
<p>Chain-ul forward: Acest chain este traversat de orice pachet care incearca sa<br />
treaca prin aceasta masina catre alta.</p>
<p>Chain-ul output: Acest chain este traversat de toate pachetele chiar inainte<br />
de a iesi.</p>
<p>4.1.1. Folosirea ipchains</p>
<p>In primul rand, asigurate ca ai versiunea de ipchains la care se refera acest<br />
document.</p>
<p>$ ipchains &#8211;version<br />
ipchains 1.3.9, 17-Mar-1999</p>
<p>Observatie: recomand 1.3.4 (care nu are optiuni in format lung, cum ar fi<br />
&#8220;&#8211;sport&#8221;), 1.3.8 sau mai avansate; acestea fiind foarte stabile.</p>
<p>ipchains are o destul de detaliata pagina de manual (man ipchains), si daca<br />
ai nevoie de mai multe detalii in particular, poti sa verifici interfata<br />
pentru programare (man 4 ipfw), sau fisierul net/ipv4/ip_fw.c in sursele<br />
kernelului 2.1.x, care este (bineinteles) o sursa de incredere.</p>
<p>Mai exista deasemenea o fisa de referinta rapida creata de catre Scott Bronson<br />
in arhiva surselor, in format US Letter PostScript(TM) si A4.</p>
<p>Sunt mai multe lucruri diferite pe care le poti face cu ipchains. In primul<br />
rand comenzi prin care poti administra un chain intreg. Incepi cu trei<br />
chain-uri compilate default pe care nu le poti sterge: input, output si<br />
forward.</p>
<p>1. Creaza un chain nou (-N).<br />
2. Sterge un chain gol (-X).<br />
3. Schimba policy-ul (politica) pentru unul din chain-urile default (-P).<br />
4. Listeaza regulile dintr-un chain (-L).<br />
5. Sterge regulile dintr-un chain (-F)<br />
6. Reseteaza counter-ele pentru pachete si bytes pentru toate regulile<br />
dintr-un chain (-Z).</p>
<p>Sunt mai multe moduri de a manipula regulile dintr-un chain:</p>
<p>1. Adauga o noua regula intr-un chain (-A).<br />
2. Introduce o noua regula la o pozitia anumita intr-un chain (-I) (default<br />
adauga la inceput).<br />
3. Inlocuieste o regula la o anumita pozitie din chain (-R).<br />
4. Sterge o regula la o anumita pozitie din chain (-D).<br />
5. Sterge prima regula care se potriveste din chain (-D).</p>
<p>Sunt cateva operatii si pentru masquerading:</p>
<p>1. Listeaza conexiunile pentru care se fac in mod curent masquerading<br />
(-M -L).<br />
2. Stabileste valori de timeout pentru masquerading (-M -S). (Dar citeste si<br />
&#8220;Nu pot preciza valori de timeout pentru masquerading!&#8221;)</p>
<p>Ultima (si poate cea mai folositoare) functie iti permite sa verifici ce s-ar<br />
intampla cu un pachet dat daca ar traversa un chain dat.</p>
<p>4.1.2. Ce vei vedea cand porneste computerul</p>
<p>Inainte de rularea oricarei comenzi ipchains (fii atent, unele distributii<br />
ruleaza ipchains in scripturile de initializare), nu vor exista nici un fel de<br />
reguli in nici unul dintre chain-urile incluse default (&#8220;input&#8221;, &#8220;output&#8221; si<br />
&#8220;forward&#8221;), si fiecare din aceste chain-uri va avea un policy de ACCEPT.<br />
Aceasta inseamna ca nu exista filtrare de pachete.</p>
<p>4.1.3. Operatii pentru o singura regula</p>
<p>Acesta este unul dintre cele mai importante lucruri; manipularea regulilor.<br />
Cel mai obisnuit, vei folosi probabil comenzile de adaugare (-A) si de<br />
stergere (-D). Celelalte (-I pentru introducere si -R pentru inlocuire) sunt<br />
doar prelungiri ale comenzilor precedente.</p>
<p>Fiecare regula specifica o multime de conditii pe care un pachet trebuie sa le<br />
indeplineasca, si ce sa faca daca regulile sunt indeplinite (o &#8220;tinta&#8221;). De<br />
exemplu, s-ar putea sa doresti sa ignori toate pachetele ICMP venind de la<br />
adresa 127.0.0.1. Deci, in acest caz conditiile sunt ca protocolul sa fie<br />
ICMP si adresa sursa sa fie 127.0.0.1. Tinta noastra este &#8220;DENY&#8221;.</p>
<p>127.0.0.1 este interfata &#8220;loopback&#8221;, care exista chiar daca nu ai legatura<br />
reala la o retea. Poti folosi programul &#8220;ping&#8221; pentru a genera acest tip de<br />
pachete (pur si simplu trimite pachete ICMP de tip 8 (echo request) la care<br />
toate host-urile ar trebui sa raspunda cu pachete ICMP de tip 0 (echo replay)). Aceast program este foarte folositor pentru teste.</p>
<p># ping -c 1 127.0.0.1<br />
PING 127.0.0.1 (127.0.0.1): 56 data bytes<br />
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms</p>
<p>&#8212; 127.0.0.1 ping statistics &#8212;<br />
1 packets transmitted, 1 packets received, 0% packet loss<br />
round-trip min/avg/max = 0.2/0.2/0.2 ms<br />
# iptables -A input -s 127.0.0.1 -p icmp -j DENY<br />
# ping -c 1 127.0.0.1<br />
PING 127.0.0.1 (127.0.0.1): 56 data bytes</p>
<p>&#8212; 127.0.0.1 ping statistics &#8212;<br />
1 packets transmitted, 0 packets received, 100% packet loss<br />
#</p>
<p>Poti vedea aici ca primul ping reuseste (&#8220;-c 1&#8243; spune sa sa trimita doar un<br />
singur pachet).</p>
<p>Apoi adaugam in coada (-A) chain-ului &#8220;input&#8221;, o regula ce spune ca<br />
pentru pachetele de la 127.0.0.1 (&#8220;-s 127.0.0.1&#8243;) de tip ICMP (&#8220;-p icmp&#8221;)<br />
trebuie sa sarim la &#8220;DENY&#8221; (&#8220;-j DENY&#8221;).</p>
<p>Apoi testam regula noastra, folosind al doilea ping. Va fi o pauza pana cand<br />
programul se da batut sa astepte un raspuns care nu va veni niciodata.</p>
<p>Am putea sa stergem regula in  doua moduri. Intai, deoarece stim ca este<br />
singura regula din chain-ul input, putem folosi o stergere numarata, ca<br />
in:</p>
<p># iptables -D input 1<br />
#</p>
<p>Pentru a sterge regula cu numarul 1 din chain-ul input.</p>
<p>Al doilea mod este sa scriem comanda prin care am introdus regula -A, dar sa<br />
inlocuim -A cu -D. Aceasta este folositor cand ai un chain complex de reguli<br />
si nu doresti sa le numeri ca sa iti dai seama ca este a 37-a regula de<br />
care vrei sa scapi. In aces caz, vom folosi:</p>
<p># ipchains -D input -s 127.0.0.1 -p icmp -j DENY<br />
#</p>
<p>Sintaxa comenzii -D trebuie sa aiba exact aceleasi optiuni cum are comanda -A<br />
(sau -I, sau -R). Daca sunt reguli identice in acelasi chain, numai prima<br />
regula va fi stearsa.</p>
<p>4.1.4. Optiuni de filtrare</p>
<p>Am vazut folosirea optiunii &#8220;-p&#8221; pentru a specifica protocolul, si optiunii<br />
&#8220;-s&#8221; pentru a specifica adresa sursa, dar sunt alte optiuni pe care le putem<br />
folosi pentru a preciza caracteristici ale pachetului. Ceea ce urmeaza este<br />
un compedium complet.</p>
<p>4.1.4.1. Specificarea adreselor IP sursa si destinatie</p>
<p>Adresele IP ale sursei (&#8220;-s&#8221;) si destinatiei (&#8220;-d&#8221;) pot fi specificate in<br />
patru moduri. Cea mai obisnuita forma este sa folosesti numele complet, cum<br />
ar fi &#8220;localhost&#8221; sau &#8220;www.securityorg.net&#8221;. Cea de-a doua cale este sa<br />
specifici adresa IP cum ar fi &#8220;127.0.0.1&#8243;.</p>
<p>Cea de a treia si a patra cale permite specificarea unui grup de adrese IP,<br />
cum ar fi &#8220;199.95.207.0/24&#8243; sau &#8220;199.95.207.0/255.255.255.0&#8243;. Amandoua<br />
specifica orice adresa IP de la 199.95.207.0 pana la 199.95.207.255 inclusiv;<br />
cifrele dupa &#8220;/&#8221; spun care parti din adresa IP sunt semnificative. &#8220;/32&#8243; sau<br />
&#8220;/255.255.255.255&#8243; este default (se potriveste cu toata adresa IP). Pentru a<br />
specifica oricare adresa IP &#8220;/0&#8243; poate fi folosit, astfel:</p>
<p># ipchains -A input -s 0/0 -j DENY<br />
#</p>
<p>Aceasta este folosit in mod rar, deoarece efectul de mai sus este asemanator<br />
cu nespecificare deloc a optiunii &#8220;-s&#8221;.</p>
<p>4.1.4.2. Specificarea inversa</p>
<p>Multe optiuni, inclusiv optiunile &#8220;-s&#8221; si &#8220;-d&#8221; pot avea argumentele precedate<br />
de &#8220;!&#8221; (pronuntat &#8220;nu&#8221;) pentru a corespunde adreselor care NU sunt egale cu<br />
adresele date. De exemplu, &#8220;-s ! localhost&#8221; corespunde oricarui pachet care<br />
nu vine de la localhost.</p>
<p>4.1.4.3. Specificarea protocolului</p>
<p>Protocolul poate fi specificat prin optiunea &#8220;-p&#8221;. Protocolul poate fi un<br />
numar ( daca stii valorile numerice de protocol pentru IP) sau un nume pentru<br />
cazurile speciale de &#8220;TCP&#8221;, &#8220;UDP&#8221; sau &#8220;ICMP&#8221;. Nu conteaza daca se foloseste<br />
sau nu CAPS, asa ca &#8220;tcp&#8221; merge la fel ca si &#8220;TCP&#8221;.</p>
<p>Numele protocolului poate fi precedat de &#8220;!&#8221;, pentru a inversa, ca si &#8220;-p !<br />
tcp&#8221; pentru a specifica pachetele care nu sunt TCP.</p>
<p>4.1.4.3.1. Specificarea porturilor TCP si UDP</p>
<p>Pentru cazul special cand este specificat un protocol TCP si UDP, poate fi<br />
precizat un argument in plus insemnand portul TCP sau UDP, sau un sir<br />
(inclusiv capetele sirului) de porturi (citeste insa mai jos &#8220;Despre<br />
fragmente&#8221;). Un sir este reprezentat prin caracterul &#8220;:&#8221;, cum ar fi<br />
&#8220;6000:6010&#8243; care acopera 11 numere de porturi, de la 6000 la 6010 inclusiv.<br />
Daca limita de jos este omisa, atunci este considerata 0. Daca limita de sus<br />
este omisa, atunci este considerata 65535. Deci, pentru a specifica<br />
conexiunile TCP venind de la porturile sub 1024, sintaxa ar fi urmatoarea<br />
&#8220;-p TCP -s 0.0.0.0/0 :1023&#8243;. Numerele de porturi pot fi specificate si prin<br />
nume, exemplu &#8220;www&#8221;.</p>
<p>Observatie: sensul regulii poate fi inversat si in cazul porturilor daca se<br />
pune in fata acestui argument semnul &#8220;!&#8221;. Deci, pentru a specifica orice<br />
pachet care este pachet TCP dar nu este WWW, ai scrie astfel:</p>
<p>-p TCP -d 0.0.0.0/0 ! www</p>
<p>Este important sa realizezi ca</p>
<p>-p TCP -d ! 192.168.1.1 www</p>
<p>este foarte diferit de</p>
<p>-p TCP -d 192.168.1.1 ! www</p>
<p>Prima regula se potriveste cu toate pachetele care sunt de tip TCP, spre<br />
portul 80 si care nu au ca destinatie adresa 192.168.1.1. Iar, cea de a doua<br />
regula se potriveste cu toate pachetele de tip TCP care au ca destinatie<br />
192.168.1.1, fara sa fie spre portul 80.</p>
<p>In sfarsit, pentru regula urmatoare se potrivesc pachetele care nu au ca<br />
destinatie adresa 192.168.1.1 si nici portul 80.</p>
<p>-p TCP -d ! 192.168.1.1 ! www</p>
<p>4.1.4.3.2. Specificarea tipului si codului ICMP</p>
<p>Cand este precizat tipul de protocol ICMP, exista deasemenea argumente ce pot<br />
fi precizate in plus. ICMP nu are porturi. ICMP are un tip si un cod.</p>
<p>Poti sa le specifici folosind nume ICMP (vezi ipchains -h icmp pentru a lista<br />
aceste nume) dupa optiunea &#8220;-s&#8221;, sau ca numere insemnand tipul ICMP si codul,<br />
unde tipul urmeaza dupa optiunea &#8220;-s&#8221;, iar codul dupa optiunea &#8220;-d&#8221;.</p>
<p>Numele ICMP sunt destul de lungi: trebuie sa folosesti doar destul de multe<br />
litere astfel incat sa se deosebeasca unele de altele.</p>
<p>Iata o mica tabela pentru cele mai intalnite tipuri de pachete ICMP:</p>
<p>Numar   Nume                     Cerut de catre</p>
<p>0       echo-reply               ping<br />
3       destination-unreachable  Any TCP/UDP traffic.<br />
5       redirect                 routing if not running routing daemon<br />
8       echo-request             ping<br />
11      time-exceeded            traceroute</p>
<p>Observatie: numele ICMP nu pot fi precedate deocamdata de semnul &#8220;!&#8221;.</p>
<p>Sub nici o forma sa nu blochezi toate pachetele ICMP de tip 3! Citeste mai jos<br />
&#8220;Pachete icmp&#8221;.</p>
<p>4.1.4.4. Specificarea interfetei</p>
<p>Optiunea &#8220;-i&#8221; specifica numele interfatei cu care sa corespunda. O interfata<br />
este dispozitivul fizic prin care intra pachetul sau prin care iese pachetul.<br />
Poti folosi comanda ifconfig pentru a lista interfetele care sunt &#8220;sus&#8221;.<br />
(in stare de functionare in acel moment).</p>
<p>Interfata pentru pentru pachete ce sosesc (pachetele ce traverseaza chain-ul<br />
input) este considerata interfata prin care au intrat. In mod logic, interfata<br />
pentru pachetele care pleaca (pachetele ce traverseaza chain-ul output) este<br />
interfata prin care vor iesi. Interfata pentru pachetele ce traverseaza<br />
chain-ul forward este deasemenea interfata prin care vor iesi pachetele.</p>
<p>Este perfect valabil sa specifici o interfata care nu exista;<br />
regula nu se va potrivi cu nici un pachet pana cand interfata nu este sus.<br />
Aceasta este extrem de folositor pentru legaturi PPP de dial-up (de obicei<br />
interfete ppp0) si asemanatoare.</p>
<p>Ca un caz special, un nume de interfata terminandu-se cu &#8220;+&#8221; se va potrivi cu<br />
toate interfetele (fie ca exista sau nu) care incep cu acel sir de caractere.<br />
De exemplu pentru a specifica o regula care sa se potriveasca tuturor<br />
interfetelor PPP, optiunea -i ppp+ ar fi folosita.</p>
<p>Numele interfetei poate fi precedata de &#8220;!&#8221;, pentru a corespunde cu pachetul<br />
care nu se potriveste cu intefata specificata.</p>
<p>4.1.4.5. Specificarea doar a pachetelor TCP SYN</p>
<p>Uneori este folositor sa permiti conexiunile TCP intr-o singura directie, nu<br />
si in cealalta. De exemplu, ai putea sa permiti conexiuni catre un server<br />
extern WWW, dar nici o conexiune de la acel server.</p>
<p>Naiv ar fi sa blochezi pachetele TCP dinspre server. Din pacate, conexiunile<br />
TCP cer ca pachetele sa circule in ambele directii.</p>
<p>Solutia ar fi sa blochezi numai pachetele folosite pentru a initia<br />
conexiuni. Aceste pachete sunt numite pachete SYN (ok, tehnic sunt pachete cu<br />
flag SYN pus si cu flagurile RST si ACK nepuse, dar le numim pe scurt<br />
pachete SYN). Prin ignorarea acestor pachete, putem sa oprim aceste<br />
conexiuni.</p>
<p>Optiunea &#8220;-y&#8221; este folosita pentru aceasta; este valida numai pentru<br />
regulile in care specificam tcp ca protocol. De exemplu, pentru a specifica<br />
incercarile de conexiune de la 192.168.1.1:</p>
<p>-p TCP -s 192.168.1.1 -y</p>
<p>Aceasta optiune poate fi inversat prin precedarea &#8220;-y&#8221; cu semnul &#8220;!&#8221;, care se<br />
potriveste pentru toate pachetele care nu initiaza conexiuni.</p>
<p>4.1.4.6. Despre fragmente</p>
<p>Uneori un pachet este prea mare pentru a incape cu totul pe conexiune. Cand<br />
aceasta se intampla, pachetul este divizat in fragmente, si trimis ca pachete<br />
multiple. Celalalt capat reansambleaza aceste fragmente pentru a construi<br />
intregul pachet.</p>
<p>Problema cu fragmentele este ca unele dintre argumentele descrise mai sus (in<br />
particular portul sursa, portul destinatie, tipul ICMP, codul ICMP, flagul syn<br />
TCP) cere kernelului sa verifice inceputul pachetului, care exista numai in<br />
primul pachet.</p>
<p>Daca sistemul tau este singura conexiune catre o retea externa, atunci poti<br />
spune kernelului Linux sa reansambleze toate pachetele care trec prin el, prin<br />
compilarea kernelului cu optiunea &#8220;IP: always defragment set&#8221; egala cu &#8220;Y&#8221;.</p>
<p>In caz contrar, este important sa stii cum sunt tratate fragmentele de catre<br />
regulile de filtrare. Orice regula de filtrare care cere informatii pe care<br />
nu le avem nu se va potrivi. Aceasta inseamna ca primul fragment este tratat<br />
ca orice alt pachet. Al doilea si urmatoarele nu vor mai fi. De aceea o<br />
regula  -p tcp -s 192.168.1.1 www (specificand un port sursa &#8220;www&#8221;) nu se vor<br />
potrivi cu un fragment (altul decat primul). Nici regula opusa nu va face<br />
acest lucru -p TCP -s 192.168.1.1 ! www.</p>
<p>Oricum, poti sa specifici o regula special pentru fragmentul al doilea si<br />
urmatoarele, folosind optiunea &#8220;-f&#8221;. Evident, nu este corect sa specifici<br />
porturi TCP sau UDP, tip ICMP, cod ICMP, sau flag syn TCP, intr-o asemenea<br />
regula cu referire la fragmente.</p>
<p>Este de asemenea legal sa specifici ca o regula nu se aplica la al doilea si<br />
urmatoarele fragmente, prin precedarea lui &#8220;-f&#8221; cu &#8220;!&#8221;.</p>
<p>De obicei este considerat sigur sa lasi sa treaca al doilea si urmatoarele<br />
fragmente, deoarece filtrarea va afecta primul fragment, si de aceea previne<br />
reansamblarea pe calculatorul destinatie; cu toate acestea, sunt cunoscute<br />
bug-uri care permit caderea sistemului doar prin simpla trasnmitere de<br />
fragmente. Este decizia ta.</p>
<p>Nota pentru network-heads: pachetele cu malformatii (pachete TCP, UDP si<br />
ICMP prea scurte codului de firewall ca sa citeasca tipul portului sau codul<br />
ICMP si tipul) sunt tratate ca fragmente de asemenea. Doar fragmentele TCP<br />
care incep de la pozitia 8 sunt ignorate de catre kernel (un mesaj este trimis<br />
catre syslog, daca acest lucru se intampla). De exemplu, urmatoarea regula va<br />
ignora toate fragmentele ce au ca destinatie 192.168.1.1:</p>
<p># ipchains -A output -f -d 192.168.1.1 -j DENY<br />
#</p>
<p>4.1.5. Efectele filtrarii de pachete</p>
<p>Acum stim toate modurile in care putem sa folosim o regula pentru a se potrivi<br />
anumitor pachete. Daca un pachet se potriveste cu o regula, urmatoarele<br />
lucruri se intampla:</p>
<p>1. Counter-ul de byte pentru acea regula creste cu o valoare egala cu<br />
marimea pachetului (header si restul pachetului)<br />
2. Counter-ul de pachete pentru acea regula este incrementat.<br />
3. Daca regula o cere, informatii despre pachet sunt scrise in fisierele de<br />
log.<br />
4. Daca regula o cere, TOS al pachetului este schimbat.<br />
5. Daca regula o cere, pachetul este marcat (acest lucru nu este posibil in<br />
kernelurile ver. 2.0).<br />
6. Tinta regulii este examinata pentru a decide soarta acelui pachet.</p>
<p>Pentru varietate le voi examina in ordinea importantei.</p>
<p>4.1.5.1. Specificarea unei tinte</p>
<p>O tinta spune kernelului ce sa faca pachetului care se potriveste unei<br />
reguli. ipchains foloseste &#8220;-j&#8221; (in sensul &#8220;sare la&#8221;) pentru argumentul<br />
tintei. Numele tintei trebuie sa fie mai mic decat 8 caractere, si conteaza<br />
daca este scris cu litere mici sau mari: &#8220;RETURN&#8221; sau &#8220;return&#8221; sunt lucruri<br />
diferite.</p>
<p>Cel mai simplu caz este atunci cand nu este nici o tinta specificata. Acest<br />
tip de regula (numita uneori &#8220;accounting rule&#8221;) este folositoare cand dorim<br />
sa avem o evidenta a numarului de pachete care indeplinesc anumite conditii.<br />
Chiar daca se potriveste sau nu kernelul examineaza urmatoarea regula din<br />
chain. De exemplu, pentru a numara pachetele care vin de la 192.168.1.1:</p>
<p># ipchains -A input -s 192.168.1.1<br />
#</p>
<p>(Folosind &#8220;ipchains -L -v&#8221; putem vedea counter-ele de pachete si bytes<br />
asociate fiecarei reguli.)</p>
<p>Exista sase tinte speciale. Primele trei sunt destul de simple: ACCEPT,<br />
REJECT si DENY. ACCEPT lasa pachetul sa treaca. DENY ignora pachetul ca si<br />
cand nu ar fi fost primit. REJECT ignora pachetul, insa (daca nu a fost un<br />
pachet ICMP) trimite un pachet replica ICMP catre sursa care spune ca<br />
destinatia nu poate fi atinsa (destination unreachable).</p>
<p>Urmatoarea regula, MASQ spune kernelului sa masqueradeze pachetul. Pentru ca<br />
aceasta tinta sa poate fi folosita trebuie sa fie compilat kernelul cu suport<br />
pentru &#8220;IP Masquerading&#8221;. Pentru detalii privind masquerading citeste<br />
Masquerading-HOWTO si anexa &#8220;Diferente intre ipchains si ipfwadm&#8221;. Aceasta<br />
tinta este corecta numai pentru pachetele ce traverseaza chain-ul forward.</p>
<p>O alta tinta importnta este REDIRECT care comunica kernelului sa trimita un<br />
pachet catre un port local in loc de destinatia spre care se indrepta.<br />
Aceasta poate fi specificata doar pentru regulile in care se specifica<br />
protocolul TCP sau UDP. Optional, poate fi specificat un port, sub forma de<br />
nume sau numar, in continuare la &#8220;-j REDIRECT&#8221; care va determina ca pachetul<br />
sa fie redirectat catre un anumit port, nu spre portul spre care se indrepta.<br />
Aceasta tinta este valabila doar pentru pachetele ce traverseaza chain-ul<br />
input.</p>
<p>Ultima tinta este RETURN, care este similar cu ajungerea pachetului direct la<br />
sfarsitul chain-ului (citeste &#8220;Setarea policy-ului&#8221; de mai jos).</p>
<p>Orice alta tinta indica un chain definit de catre utilizator (cum este descris<br />
in &#8220;Operatii pentru un chain&#8221; de mai jos). Pachetul va incepe traversarea<br />
regulilor in acel chain. Daca acel chain nu decide soarta pachetului, odata<br />
traversarea terminata in acel chain, traversarea este continuata de la<br />
urmatoarea regula din chain-ul anterior.</p>
<p>Considera doua chain-uri: input (chain-ul predefinit) si test (un chain<br />
definit de catre utitlizator).</p>
<p>`input&#8217;                         `Test&#8217;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| Rule1: -p ICMP -j REJECT |    | Rule1: -s 192.168.1.1    |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|    |&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|<br />
| Rule2: -p TCP -j Test    |    | Rule2: -d 192.168.1.1    |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| Rule3: -p UDP -j DENY    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Considera un pachet TCP venind de la 192.168.1.1 si ducandu-se catre 1.2.3.4.<br />
Acesta intra in chain-ul INPUT. Rule1 nu se potriveste cu el, Rule2 se<br />
potriveste asa ca urmatoarea regula care este examinata este prima din<br />
chain-ul test. Rule1 se potriveste dar nu este specificata nici o tinta,<br />
asa ca urmatoarea regula este examinata. Rule2 nu se potriveste asa ca am<br />
ajuns la sfarsitul chain-ului. Astfel ne reintoarcem in chain-ul INPUT, unde<br />
am examinat Rule2, asa ca examinam Rule3 care nici aceasta nu se potriveste.</p>
<p>Deci calea urmata de catre pachet este:</p>
<p>v    __________________________<br />
`input&#8217;                |   /    `Test&#8217;                v<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|&#8211;/    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;-<br />
| Rule1                 | /|    | Rule1                |   |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|/-|    |&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;|<br />
| Rule2                 /  |    | Rule2                |   |<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;v&#8212;-<br />
| Rule3                 /&#8211;+___________________________/<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|&#8212;<br />
v</p>
<p>Citeste sectiunea &#8220;Cum sa iti organizezi regulile firewall-ului&#8221; pentru<br />
modalitati efective de a folosi chain-uri definite de catre utilizator.</p>
<p>4.1.5.2. Logarea pachetelor<br />
(nt. log= jurnal,logare=scriere in fisiere de log)</p>
<p>Aceasta este un efect secundare pe care il poate avea faptul ca un pachet sa<br />
se potriveasca cu o regula, poti sa decizi ca informatii despre pachetul<br />
respectiv sa fie scris in fisierele de log prin folosirea optiunii &#8220;-l&#8221;. In<br />
mod normal nu vei dori acest lucru pentru pachetele normale, dar aceasta este<br />
o optiune folositoare in cazul unor anumite pachete.</p>
<p>Kernelul scrie aceste informatii astfel:</p>
<p>Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025<br />
L=34 S=0&#215;00 I=18 F=0&#215;0000 T=254</p>
<p>Mesajul din loguri este special conceput concis, continand informatii<br />
folositoare. Contine urmatoarele:</p>
<p>1. &#8220;input&#8221; este chain-ul care a continut regula care s-a potrivit cu pachetul,<br />
cauzand mesajul din loguri.</p>
<p>2. &#8220;DENY&#8221; este ceea ce a decis regula privind soarta pachetului. Daca aceasta<br />
este &#8220;-&#8221; atunci regula nu a afectat deloc pachetul (o regula de<br />
contabilizare).</p>
<p>3. &#8220;eth0&#8243; este numele interfetei. Cum pachetul a fost logat in chain-ul input,<br />
inseamna ca &#8220;eth0&#8243; este numele interfetei de intrare.</p>
<p>4. &#8220;PROTO=17&#8243; insemna ca pachetul apartine protocolului 17. O lista cu<br />
numerele de protocoale este data in fisierul &#8220;/etc/protocols&#8221;. Cele mai<br />
intalnite sunt 1 (ICMP), 6 (TCP) si 17 (UDP).</p>
<p>5. &#8220;192.168.2.1&#8243; este sursa IP al pachetului.</p>
<p>6. &#8220;:53&#8243; reprezinta portul sursa al pachetului. Uitandu-ne in fisierul<br />
&#8220;/etc/services&#8221; vedem ca acest numar corespunde portului &#8220;domain&#8221; (probabil ca<br />
este un pachet replica de la serverul DNS). Pentru TCP si UDP, acest numar<br />
reprezinta portul sursa. Pentru ICMP, este tipul ICMP. Pentru alte protocoale<br />
va fi 65535.</p>
<p>7. &#8220;192.168.1.1&#8243; este adresa IP destinatie.</p>
<p>8. &#8220;:1025&#8243; inseamna ca portul destinatie este 1025. Pentru UDP si TCP acesta<br />
reprezinta portul destinatie. Pentru ICMP reprezinta codul. Pentru altele va<br />
fi 65535.</p>
<p>9. &#8220;L=34&#8243; inseamna ca pachetul este in marime totala de 34 bytes.</p>
<p>10. &#8220;S=0&#215;00&#8243; reprezinta tos (type of service). Imparte la 4 aceasta valoare<br />
pentru a avea tos in formatul folosit de catre ipchains.</p>
<p>11. &#8220;I=18&#8243; reprezinta IP ID.</p>
<p>12. &#8220;F=0&#215;0000&#8243; reprezinta offset-ul de fragment pe 16 biti plus flaguri. O<br />
valoare ce incepe cu &#8220;0&#215;4&#8243; sau &#8220;0&#215;5&#8243; inseamna ca bit-ul &#8220;Don&#8217;t Fragment&#8221;<br />
este pus. &#8220;0&#215;2&#8243; sau &#8220;0&#215;3&#8243; inseamna ca bitul &#8220;More Fragments&#8221; este pus;<br />
asteapta-te sa urmeze fragmente dupa acesta. Restul numarului reprezinta<br />
offsetul pentru acest fragment, impartit la 8.</p>
<p>13. &#8220;T=254&#8243; reprezinta Time To Live (ttl, timpul de existenta) al pachetului.<br />
Aceasta valoare este decrementata la fiecare link pe care il trece, si incepe<br />
deobicei la 15 sau 255.</p>
<p>14. &#8220;(#5)&#8221; in kernelurile mai recente (versiunile peste 2.2.9, inclusiv)<br />
reprezinta numarul reguli care a determinat mesajul.</p>
<p>Pe sisteme standard Linux, mesajul kernelului este preluat de klogd (daemonul<br />
de logare al kernelului) care paseaza mai departe mesajul catre syslogd<br />
(deamonul pentru logare al sistemului). Fisierul &#8220;/etc/syslog.conf&#8221;<br />
controleaza comportamentul deamonului syslogd, specificand unde sa afiseze<br />
mesajele primite de la un anumit proces si nivelul de loggare al mesajului<br />
respectiv.</p>
<p>De exemplu, pe sistemul meu, &#8220;/etc/syslog.conf&#8221; contine doua linii care<br />
specifica afisare mesajelor care se potrivesc cu &#8220;kern.info&#8221;.</p>
<p>kern.*                          -/var/log/kern.log<br />
*.=info;*.=notice;*.=warn;\<br />
auth,authpriv.none;\<br />
cron,daemon.none;\<br />
mail,news.none          -/var/log/messages</p>
<p>Aceasta inseamna ca mesajele sunt duplicate in &#8220;/var/log/kern.log&#8221; si in<br />
&#8220;/var/log/messages&#8221;. Pentru mai multe detalii, vezi &#8220;man syslogd.conf&#8221;.</p>
<p>4.1.5.3. Schimbarea tos (type of service)</p>
<p>Exista patru biti rar folositi in headerul IP, numiti biti tipul serviciului<br />
(TOS). Valorea acestor biti determina modul in care vor fi tratate pachetele;<br />
cei patru biti sunt &#8220;intarziere minima&#8221;, &#8220;transmitere maxima&#8221;, &#8220;maxima<br />
siguranta&#8221; si &#8220;cost minim&#8221;. Doar unul dintre acesti biti este permis sa fie<br />
setat. Rob van Nieuwkerk, autorul codul de modificare al TOS, exemplifica:</p>
<p>In special &#8220;intarziere minima&#8221; este important pentru mine. L-am setat<br />
pentru pachetele &#8220;interactive&#8221; de pe ruterul linux. Sunt in spatele<br />
unei legaturi de 33.6K. Linux da prioritate pachetelor in trei cozi de<br />
asteptare. In acest mod am o performanta pentru traficul interactiv in<br />
timp ce fac download-uri (ar fi putut merge mai repede, daca nu ar fi<br />
fost o asa coada de asteptare in driver-ul pentru portul serial,<br />
dar intarziere este acum de numai 1.5 secunde).</p>
<p>Nota: evident, nu ai nici un control asupra pachetelor care vin; poti controla<br />
numai prioritatea pachetelor care pleaca. Pentru a negocia prioritatile cu<br />
celalalt capat este necesar un protocol ca RSVP (nu ma intrebati, nu cunosc<br />
nimic despre el).</p>
<p>Cea mai intalnita folosire este setarea conexiunilor ftp si telnet &#8220;intarziere<br />
minima&#8221; si datelor FTP &#8220;transmitere maxima&#8221;. Aceasta ar putea fi realizata<br />
dupa cum urmeaza:</p>
<p>ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0&#215;01 0&#215;10<br />
ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0&#215;01 0&#215;10<br />
ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0&#215;01 0&#215;08</p>
<p>Optiunea &#8220;-t&#8221; are doi parametri, amandoi in format hexazecimal. Aceaste<br />
argumete permite modificarea compleza a bitilor TOS: prima valoare si<br />
valoarea curenta a TOS-ului sunt adunate pe biti, apoi a doua valoare este<br />
XOR-uita cu aceasta. Daca aceasta este prea confuz, foloseste urmatoarea<br />
tabela:</p>
<p>TOS Name         		       		Value           Typical Uses</p>
<p>Minimum Delay     &#8211; intarziere minima 		0&#215;01 0&#215;10       ftp, telnet<br />
Maximum Throughput &#8211; transmitere maxima		0&#215;01 0&#215;08       ftp-data<br />
Maximum Reliability &#8211; maxima siguranta		0&#215;01 0&#215;04       snmp<br />
Minimum Cost        &#8211; cost minim		0&#215;01 0&#215;02       nntp</p>
<p>Andi Kleen precizeaza urmatoarele:</p>
<p>Poate ar fi folositor sa  facem legatura cu parametrul txqueue-len al ifconfig<br />
in discutia despre biti TOS. Lungimea default a cozii de asteptare pentru<br />
interfata este optimizata pentru placile ethernet, pentru modemuri aceasta<br />
este prea lunga rezultand un randament scazut al planificarii in 3 benzi (in<br />
care punerea in lista de asteptare este realizata de catre TOS). Este o idee<br />
buna sa o setezi cu o valoare optima intre 4-10 pentru modem sau legaturi<br />
simple ISDN; pentru mai multe interfete o coada de asteptare mai lunga este<br />
necesara. Aceasta este o problema pentru kernelurile 2.0 si 2.1, dar in 2.1<br />
este disponibila o optiune pentru ifconfig (cu o versiune recenta de<br />
nettools), pe cand in 2.0 sunt necesare patch-uri pentru codul sursa al<br />
driverelor.</p>
<p>Deci, pentru a avea beneficii maxime din manipularea TOS pentru conexiuni PPP,<br />
da comanda &#8220;ifconfig $1 txqueuelen&#8221; in scriptul /etc/ppp/ip-up. Numarul care<br />
trebuie folosit depinde de viteza modemului si marimea bufferului; dupa cum<br />
spune si Andi:</p>
<p>Cea mai optima valoare pentru o configuratie data trebuie experimentata. Daca<br />
listele de asteptare sunt prea scurte pe un ruter, atunci pachetele vor fi<br />
ignorate. Deasemenea exista beneficii chiar fara rescrierea TOS, rescriere TOS<br />
este folositoare pentru programele necooperante (dar toate programele standard<br />
ce folosesc Linux sunt cooperante).</p>
<p>4.1.5.4. Marcarea unui pachet</p>
<p>Acest lucru permite interctiuni puternice si complexe cu noua implemetare<br />
Quality of Service apartinand lui Alex Kuznetsov, la fel ca si forwardarea<br />
bazata pe marcarea pachetelor in kernelurile versiunea 2.1 si mai avansate.<br />
Aceasta optiune este ignorata in ver. 2.0.</p>
<p>4.1.5.5. Operatii pentru un chain</p>
<p>O foarte folositoare caracteristica a ipchains-ului este posibilitatea<br />
gruparii regulilor in chain-uri. Poti sa denumesti chain-urile cum doresti,<br />
atata timp cat nu intra in conflict cu chain-urile predefinite  (input,<br />
output, forward) sau cu tintele (MASQ, REDIRECT, ACCEPT, DENY, REJECT sau<br />
RETURN). Recomand sa folosesti numirea chain-urile cu litere mari, deoarece<br />
voi folosi numele mari pentru viitoare extensii. Numele unui chain poate fi in<br />
lungime de pana la 8 caractere.</p>
<p>4.1.5.6. Crearea unui chain nou</p>
<p>Sa creeam un chain nou cu numele de test.</p>
<p># ipchains -N test<br />
#</p>
<p>Este simplu. Acum poti sa pui reguli in el in felul in care este prezentat mai<br />
sus.</p>
<p>4.1.5.7. Stergerea unui chain</p>
<p>Stergerea unui chain este simpla de asemenea.</p>
<p># ipchains -X test<br />
#</p>
<p>De ce &#8220;-X&#8221;, pentru ca toate literele bune au fost folosite.</p>
<p>Exista doua restrictii in ceea ce priveste stergerea de chain-uri: chain-ul<br />
trebuie sa fie gol (vezi &#8220;Stergerea tuturor regulilor unui chain&#8221; de mai jos)<br />
si nu trebuie sa fie tinta nici unei reguli. Nu poti sterge nici unul dintre<br />
chain-urile predefinite.</p>
<p>4.1.5.8. Stergerea tuturor regulilor unui chain</p>
<p>Si acest lucru este simplu de realizat prin optiunea &#8220;-F&#8221;, de exemplu:</p>
<p># ipchains -F forward<br />
#</p>
<p>Daca nu specifici un chain atunci toate regulile vor fi sterse.</p>
<p>4.1.5.9. Listarea regulilor unui chain</p>
<p>Poti lista toate regulile dintr-un chain folosind comanda &#8220;-L&#8221;:</p>
<p># ipchains -L input<br />
Chain input (refcnt = 0): (policy ACCEPT)<br />
target     prot opt    source                destination           ports<br />
ACCEPT     icmp &#8212;&#8211;  anywhere              anywhere              any<br />
# ipchains -L test<br />
Chain test (refcnt = 1):<br />
target     prot opt    source                destination           ports<br />
DENY       icmp &#8212;&#8211;  localnet/24           anywhere              any<br />
#</p>
<p>&#8220;Refcnt-ul&#8221; afisat la listarea regulilor din chain-ul test, indica numarul de<br />
reguli care au ca tinta chain-ul test. Valoarea acesteia trebuie sa fie 0 (si<br />
chain-ul sa fie gol) inainte ca acest chain sa poata fi sters.</p>
<p>Daca numele chain-ului este omis atunci toate chain-urile sunt listate chiar<br />
si cele goale.</p>
<p>Sunt trei optiuni care pot fi folosite impreuna cu &#8220;-L&#8221;. Optiunea &#8220;-n&#8221;<br />
(numeric) este foarte folositoare deorece impiedica ipchains sa incerce<br />
rezolvarea IP-lor in nume, care (daca folosesti ca majoritatea oamenilor DNS)<br />
va cauza mari intarzieri daca DNS-ul tau nu este configurat corect, sau ai<br />
filtrat cererile catre serverele DNS. Cauzeaza deasemenea afisarea porturilor<br />
sub forma de numere, mai degraba decat nume.</p>
<p>Optiunea &#8220;-v&#8221; iti arata toate detaliile regulii, cum ar fii counter-ele de<br />
pachete si bytes, mask-urile TOS, interfetele si marcajul pachetelor. In caz<br />
contrar aceste optiuni sunt omise. De exemplu:</p>
<p># ipchains -v -L input<br />
Chain input (refcnt = 1): (policy ACCEPT)<br />
pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports<br />
10   840 ACCEPT     icmp &#8212;&#8211; 0xFF 0&#215;00  lo                    anywhere              anywhere              any</p>
<p>Observati ca valoarea countere-lor pentru pachete si bytes sunt afisate cu<br />
ajutorul sufixelor &#8220;K&#8221;, &#8220;M&#8221; sau &#8220;G&#8221; pentru 1000, 1.000.000 si respectiv<br />
1.000.000.000. Folosirea optiunii &#8220;-x&#8221; (expandeaza numerele) afiseaza numerele<br />
in format lung in ca bytes.</p>
<p>4.1.5.10. Resetarea (aducerea la 0) a counter-elor</p>
<p>Este folositor sa ai posibilitatea de a reseta counter-ele. Aceasta se<br />
realizeaza cu ajutorul optiunii &#8220;-Z&#8221;. De exemplu:</p>
<p># ipchains -v -L input<br />
Chain input (refcnt = 1): (policy ACCEPT)<br />
pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports<br />
10   840 ACCEPT     icmp &#8212;&#8211; 0xFF 0&#215;00  lo                    anywhere              anywhere              any<br />
# ipchains -Z input<br />
# ipchains -v -L input<br />
Chain input (refcnt = 1): (policy ACCEPT)<br />
pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports<br />
0     0 ACCEPT     icmp &#8212;&#8211; 0xFF 0&#215;00  lo                    anywhere              anywhere              any<br />
#</p>
<p>Problema cand abordezi lucrurile in acest mod este ca uneori doresti sa vezi<br />
valorile counter-elor chiar inainte de a le reseta. In exemplul de mai sus,<br />
este posibil ca unele pachete sa fii trecut intre comenzile &#8220;-L&#8221; si &#8220;-Z&#8221;. Din<br />
acest motiv este posibila folosirea impreuna a acestor comenzi, sa resetezi<br />
valoarea counter-elor chiar in momentul afisarii acestora. Din nefericire,<br />
daca faci asta, nu poti sa actionezi doar asupra unui singur chain, trebuie sa<br />
listezi si resetezi counter-ele pentru toate chain-urile.</p>
<p># ipchains -L -v -Z<br />
Chain input (policy ACCEPT):<br />
pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports<br />
10   840 ACCEPT     icmp &#8212;&#8211; 0xFF 0&#215;00  lo                    anywhere              anywhere              any<br />
Chain forward (refcnt = 1): (policy ACCEPT)<br />
Chain output (refcnt = 1): (policy ACCEPT)<br />
Chain test (refcnt = 0):<br />
0     0 DENY       icmp &#8212;&#8211; 0xFF 0&#215;00  ppp0                  localnet/24           anywhere              any<br />
# ipchains -L -v<br />
Chain input (policy ACCEPT):<br />
pkts bytes target     prot opt   tosa tosx  ifname    mark        source                destination           ports<br />
10   840 ACCEPT     icmp &#8212;&#8211; 0xFF 0&#215;00  lo                    anywhere              anywhere              any<br />
Chain forward (refcnt = 1): (policy ACCEPT)<br />
Chain output (refcnt = 1): (policy ACCEPT)<br />
Chain test (refcnt = 0):<br />
0     0 DENY       icmp &#8212;&#8211; 0xFF 0&#215;00  ppp0                  localnet/24           anywhere              any<br />
#</p>
<p>4.1.5.11. Setarea policy-ului</p>
<p>Am atins in treacat ce se intampla cand un pachet ajunge la capatul unuia<br />
dintre chain-urile predefinite, cand am discutat modul in care pachetele<br />
circula prin chain-uri, in capitolul de mai sus &#8220;Specificarea unei tinte&#8221;.<br />
In acest caz, politica (policy-ul) chain-ului determina soarta pachetului.<br />
Doar chain-urile predefinite (input, output si forward) au policy, deoarece<br />
in chain-urile definite de catre utilizator cand se ajunge la capatul<br />
acestora, traversarea continua din chain-ul anterior.</p>
<p>Policy-ul poate fi unul din primele patru tinte speciale: ACCEPT, DENY,<br />
REJECT  sau MASQ. MASQ este valid doar pentru chain-ul &#8220;forward&#8221;.</p>
<p>Este deasemenea important sa observi ca tinta RETURN intr-o regula intr-unul<br />
din chain-urile predefinite este folositoare pentru a se folosi in mod special<br />
policy-ul chain-ului, cand un pachet se potriveste cu regula.</p>
<p>4.1.6. Operatii pentru masquerading</p>
<p>Sunt cativa parametri pe care ii poti modifica in cazul masquerading-ului.<br />
Sunt legate de ipchains, pentru ca nu se merita scrierea unei noi comenzi<br />
pentru aceasta.</p>
<p>Comanda pentru masqueradare este &#8220;-M&#8221;, si poate fi combinata cu &#8220;-L&#8221; pentru a<br />
lista conexiunile care sunt in mod curent masqueradate, sau cu &#8220;-S&#8221; pentru a<br />
seta parametrii pentru masquerading.</p>
<p>Comanda &#8220;-L&#8221; poate fi insotita de &#8220;-n&#8221; (afisarea de numere in loc de nume<br />
pentru adrese IP si porturi)  sau &#8220;-v&#8221; (afiseaza deltas in numere succesive<br />
pentru conexiunile masquradate, doar in caz daca te intereseaza).</p>
<p>Comanda &#8220;-S&#8221; ar trebui urmata de trei valori pentru timeout, fiecare valoare<br />
in secunde: pentru sesiunile TCP, pentru sesiunile TCP dupa un pachet FIN, si<br />
pentru pachete UDP. Daca nu doresti una din aceste valori, pur si simplu pune<br />
valoarea 0.</p>
<p>Valorile default sunt listate in &#8220;/usr/src/linux/include/net/ip_masq.h&#8221; si<br />
sunt  15 minute, 2 minute si respectiv 5 minute.</p>
<p>Cea mai intalnita valoare ce trebuie schimbata este prima, pentru FTP (vezi<br />
mai jos &#8220;FTP&#8221;).</p>
<p>Observa problemele legate de setarea valorile pentru timeout in &#8220;Nu pot<br />
preciza timeout-uri pentru masquerading&#8221;.</p>
<p>4.1.7. Verificarea unui pachet</p>
<p>Uneori doresti sa vezi ce se intampla cand intra un anumit pachet, cum ar fi<br />
pentru testarea regulilor firewall-ului. ipchains are comanda &#8220;-C&#8221;, ce<br />
permite acest lucru, folosind exact aceleasi rutine pe care le foloseste<br />
kernelul pentru diagnosticarea pachetelor reale.</p>
<p>Poti stipula care chain sa testeze pachetul cu optiunea &#8220;-C&#8221; urmat de<br />
numele pachetului. In timp ce kernelul incepe intodeauna traversarea in<br />
chain-urile input, output sau forward, ai puterea sa incepi traversarea in<br />
orice chain in scopul testarii.</p>
<p>Detaliile in ceea ce priveste &#8220;pachetul&#8221; sunt specificate folosind aceeasi<br />
sintaxa din specificarea regulilor. In special, protocolul &#8220;-p&#8221;, adresa sursa<br />
&#8220;-s&#8221;, adresa destinatie &#8220;-d&#8221;, si interfata &#8220;-i&#8221; sunt obligatorii. Daca<br />
protocolul este TCP sau UDP, atunci un singur port destinatie si un singur<br />
port sursa trebuie specificat, daca protocolul este ICMP atunci trebuie<br />
specificat tipul si codul (doar daca nu este specificata optiunea &#8220;-f&#8221; pentru<br />
a preciza un fragment, caz in care aceste optiuni sunt ilegale).</p>
<p>Daca protocolul este TCP (si optiunea &#8220;-f&#8221; nu este specificata), optiunea &#8220;-y&#8221;<br />
poate fi specificata, pentru a indica faptul ca pachetul de test are bitul SYN<br />
pus.</p>
<p>Dam mai jos un exemplu de testare a unui pachet ce vine de la 192.168.1.1,<br />
portul 60000 catre 192.168.1.2, portul www, intrand prin interfata eth0, in<br />
chain-ul &#8220;input&#8221;. Acesta este un caz clasic de initiere a unei conexiuni www:</p>
<p># ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www<br />
packet accepted<br />
#</p>
<p>4.1.8. Mai multe reguli dintr-o data si ceea ce se intampla atunci</p>
<p>Uneori o singura linie de comanda poate produce mai multe efecte. Aceasta se<br />
realizeaza in doua moduri. Intai, poti sa specifici un hostname care este<br />
rezolvat (folosind DNS) in mai multe adrese IP, ipchains se va comporta ca si<br />
cum ai fi dat mai multe comenzi pentru fiecare adresa IP in parte.</p>
<p>De exemplu, daca hostname-ul &#8220;www.foo.com&#8221; este rezolvat in trei adrese IP,<br />
si hostname-ul &#8220;www.bar.com&#8221; in doua adrese IP, atunci comanda<br />
&#8220;ipchains -A input -j reject -s www.bar.com -d www.foo.com&#8221; ar fi echivalenta<br />
cu introducerea a sase reguli diferite in chain-ul input, daca s-ar folosi<br />
adrese IP.</p>
<p>Un alt mod prin care sa determini ipchains sa realizeze mai multe actiuni este<br />
prin folosirea optiunii bidirectionale &#8220;-b&#8221;. Aceasta optiune determina<br />
ipchains sa se comporte ca si cum ai fi dat comanda de doua ori, insa a doua<br />
oara cu parametrii de la sursa si destinatie inversati. De exemplu, pentru a<br />
evita forwardarea catre sau de la 192.168.1.1:</p>
<p># ipchains -b -A forward -j reject -s 192.168.1.1<br />
#</p>
<p>Personal, nu imi place prea mult aceasta optiune &#8220;-b&#8221;; daca doresti utilitate<br />
citeste &#8220;Folosirea ipchains-save&#8221; de mai jos.</p>
<p>Optiunea &#8220;-b&#8221; poate fi folosita langa comenzile de introducere de reguli<br />
(&#8220;-I&#8221;), stergere (&#8220;-D&#8221;) (dar nu varianta care accepta un numar al unei<br />
reguli), adaugare (&#8220;-A&#8221;) si verificare (&#8220;-C&#8221;).</p>
<p>O alta optiune folositoare este &#8220;-v&#8221; care iti afiseaza exact ceea ce ipchains<br />
realizeaza prin comenzile date. Acest lucru este folositor daca folosesti<br />
comenzi ce pot avea efectul a mai multor reguli. De exemplu, aici verificam<br />
comportamentul fragmentelor intre 192.168.1.1 si 192.168.1.2.</p>
<p># ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo<br />
tcp opt   &#8212;f- tos 0xFF 0&#215;00  via lo    192.168.1.1  -&gt; 192.168.1.2<br />
* -&gt;   *<br />
packet accepted<br />
tcp opt   &#8212;f- tos 0xFF 0&#215;00  via lo    192.168.1.2  -&gt; 192.168.1.1<br />
* -&gt;   *<br />
packet accepted<br />
#</p>
<p>4.2. Exemple folositoare</p>
<p>Am o conexiune dialup PPP (-i ppp0). Citesc stirile (-p TCP -s<br />
news.virtual.net.au nntp) si mail-ul (-p TCP -s mail.virtual.net.au pop-3) de<br />
fiecare data cand ma conectez. Folosesc metoda de FTP a Debianului pentru a-mi<br />
updata sistemul regulat (-p TCP -y -s ftp.debian.org.au ftp-data). Navighez pe<br />
web cu ajutorul proxy-ului ISP-ului atata timp cat acesta merge (-p TCP -d<br />
proxy.virtual.net.au 8080), dar nu suport bannerele de la doubleclick.net in<br />
arhivele Dilbert (-p TCP -y -d 199.95.207.0/24 and -p TCP -y -d<br />
199.95.208.0/24).</p>
<p>Nu ma deranjeaza ca oameni sa incerce sa faca ftp pe masina mea cat timp sunt<br />
online (-p TCP -d $LOCALIP ftp), dar nu vreau ca nimeni din exterior sa<br />
pretinda ca are una din adresele retelei mele interne (-s 192.168.1.0/24).<br />
Acest lucru este numit spoofare IP, si exista o modalitate mai buna de a te<br />
proteja impotriva acesteia in kernelurile 2.1.x si mai avansate: citeste &#8220;Cum<br />
realizez protectia impotriva spoofarii IP&#8221;.</p>
<p>Aceasta configurare este destul de simpla, pentru ca nu sunt in mod curent<br />
alte hosturi in reteaua mea interna.</p>
<p>Doresc ca nici un proces local (ex. lynx, netscape) sa se conecteze la<br />
doubleclick.net:</p>
<p># ipchains -A output -d 199.95.207.0/24 -j REJECT<br />
# ipchains -A output -d 199.95.208.0/24 -j REJECT<br />
#</p>
<p>Acum doresc sa realizez prioritati asupra a pachete variate ce pleaca (nu prea<br />
are sens sa fac acest lucru pentru pachetele ce intra). Cum am un numar mai<br />
mare de acest tip de reguli, are sens sa le pun pe toate intr-un singur chain,<br />
numit ppp-out.</p>
<p># ipchains -N ppp-out<br />
# ipchains -A output -i ppp0 -j ppp-out<br />
#</p>
<p>Intarziere minima pentru traficul www si telnet.</p>
<p># ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0&#215;01 0&#215;10<br />
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 telnet -t 0&#215;01 0&#215;10<br />
#</p>
<p>Cost minim pentru canalul de date ftp, nntp, si pop3:</p>
<p># ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0&#215;01 0&#215;02<br />
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0&#215;01 0&#215;02<br />
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0&#215;01 0&#215;02<br />
#</p>
<p>Sunt cateva restrictii pentru pachetele ce vin prin interfata ppp0: se cream<br />
atunci un chain numit &#8220;ppp-in&#8221;:</p>
<p># ipchains -N ppp-in<br />
# ipchains -A input -i ppp0 -j ppp-in<br />
#</p>
<p>Acum, nici un pachet care vine prin interfata ppp0, nu are voie sa pretinda ca<br />
are adresa sursa 192.168.1.*, asa ca le igoram si le logam:</p>
<p># ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY<br />
#</p>
<p>Permit pachetele catre DNS (rulez un server de nume care inainteaza toate<br />
cererile catre 203.29.16.1, asa ca ma astept la pachete replica DNS doar de<br />
acolo, pachete catre portul ftp, si doar canalul de date pentru conexiunile<br />
ftp in exterior (care ar trebui sa fie doar pe un port peste 1023, si pe<br />
porturile pentru X11 in jur de 6000).</p>
<p># ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT<br />
# ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT<br />
# ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT<br />
# ipchains -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT<br />
#</p>
<p>Accept replay-urile la pachetele TCP:</p>
<p># ipchains -A ppp-in -p TCP ! -y -j ACCEPT<br />
#</p>
<p>In sfarsit conexiunile locale sunt ok:</p>
<p># ipchains -A input -i lo -j ACCEPT<br />
#</p>
<p>Acum, politica default in chain-ul input este DENY, astfel incat orice altceva<br />
este ignorat:</p>
<p># ipchains -P input DENY<br />
#</p>
<p>Observatie: Nu mi-as configura chain-urile in aceasta ordine, deoarece<br />
pachetele ar putea sa treaca in timp ce introduc regulile. Cel mai sigur este<br />
sa setezi politica DENY intai, apoi sa introduci regulile. Bineinteles, daca<br />
regulile tale au nevoie de cereri DNS pentru a rezolva numele, s-ar putea sa<br />
fi in necaz.</p>
<p>4.2.1. Folosirea ipchains-save</p>
<p>Configurarea regulilor pentru firewall in modul in care doresti, si apoi sa<br />
incerci sa memorezi comenzile pe care le-ai folosit ca sa faci acelasi lucru<br />
din nou este chinuitor.</p>
<p>Asa ca, ipchains-save este un script care citeste configuratia curenta a<br />
chain-urilor si le salveaza intr-un fisier. Deocamdata te tin in suspans cu<br />
privire la ce realizeaza ipchains-retore.</p>
<p>ipchains-save poate salva un singur chain, sau toate chain-urile (daca nici un<br />
nume de chain, nu este specificat). Singura optiune permisa este &#8220;-v&#8221; care<br />
afiseaza regulile pe masura ce acestea sunt salvate. Politica acestor chain-uri<br />
este deasemenea salvata pentru chain-urile input, output si forward.</p>
<p># ipchains-save &gt; my_firewall<br />
Saving `input&#8217;.<br />
Saving `output&#8217;.<br />
Saving `forward&#8217;.<br />
Saving `ppp-in&#8217;.<br />
Saving `ppp-out&#8217;.<br />
#</p>
<p>4.2.2. Folosirea ipchains-restore</p>
<p>ipchains-restore restaureaza chain-urile salvate cu ipchains-save. Poate avea<br />
doua optiuni: &#8220;-v&#8221; care afiseaza fiecare regula pe masura ce este adaugata, si<br />
&#8220;-f&#8221; care obliga stergerea chain-urile definite de catre utilizator daca<br />
exista, in modul descris mai jos.</p>
<p>Daca este gasit un chain definit de utilizator este gasit in fisierul din care<br />
se restaureaza regulile, ipchains verifica daca nu exista deja acel chain.<br />
Daca exista, atunci vei fi intrebat daca fie chain-ul respectiv sa fie golit<br />
de reguli, fie sa fie sarit. Daca specifici &#8220;-f&#8221; in linia de comanda, nu vei<br />
mai fi intrebat, chain-ul va fi golit de reguli.</p>
<p>De exemplu:</p>
<p># ipchains-restore &lt; my_firewall<br />
Restoring `input&#8217;.<br />
Restoring `output&#8217;.<br />
Restoring `forward&#8217;.<br />
Restoring `ppp-in&#8217;.<br />
Chain `ppp-in&#8217; already exists. Skip or flush? [S/f]? s<br />
Skipping `ppp-in&#8217;.<br />
Restoring `ppp-out&#8217;.<br />
Chain `ppp-out&#8217; already exists. Skip or flush? [S/f]? f<br />
Flushing `ppp-out&#8217;.<br />
#</p>
<p>5. Diverse</p>
<p>Aceasta parte contine toate informatiile si FAQ-urile pe care nu am putut sa<br />
le introduc in structura de mai sus.</p>
<p>5.1. Cum sa iti organizezi regulile firewall-ului</p>
<p>Aceasta intrebare cere putina gandire. Poti incerca sa le organizezi pentru a<br />
optimiza viteza (minimizezi numarul de reguli pentru cele mai comune pachete)<br />
sau sa cresti manevrabilitatea.</p>
<p>Daca ai o legatura care se intrerupe, sa spunem o conexiune PPP, ai putea dori<br />
ca prima regula in chain-ul input sa fie &#8220;-i ppp0 -j DENY&#8221; in timpul bootarii,<br />
apoi sa ai ceva de genul acesta in scriptul ip-up:</p>
<p># Re-create the `ppp-in&#8217; chain.<br />
ipchains-restore -f &lt; ppp-in.firewall</p>
<p># Replace DENY rule with jump to ppp-handling chain.<br />
ipchains -R input 1 -i ppp0 -j ppp-in</p>
<p>Scriptul ip-down ar arata astfel:</p>
<p>ipchains -R input 1 -i ppp0 -j DENY</p>
<p>5.2. Ce anume sa nu filtrezi spre afara</p>
<p>Sunt cateva lucruri de care trebuie sa fi constient inainte de a incepe<br />
filtrarea pachetelor pe care nu le doresti.</p>
<p>5.2.1. Pachete icmp</p>
<p>ICMP este folosit (printre alte lucruri) pentru a indica esecul alte<br />
protocoale (cum ar fi TCP si UDP). Pachetele &#8220;destination-unreachable&#8221; in<br />
special. Blocarea acestor pachete inseamna ca niciodata nu vei avea erori de<br />
genul &#8220;Host unreachable&#8221; sau &#8220;No route to host&#8221;; orice conexiune doar va<br />
astepta o replica (replay) care nu va veni niciodata. Aceasta este iritabil,<br />
dar rar fatal.</p>
<p>O problema mai grava este rolul ICMP in descoperirea MTU-ului. Toate<br />
implementarile bune TCP (Linux este inclus) folosesc descoperirea MTU pentru a<br />
incerca sa isi dea seama care este marimea maxima a unui pachet care poate<br />
ajunge la destinatie fara sa fie fragmentat (fragmentarea incetineste<br />
performanta, in special cand fragmente ocazionale sunt pierdute). Descoperirea<br />
MTU functioneaza prin transmiterea de pachete cu bit &#8220;nu fragmenta&#8221; pus, si<br />
apoi transmiterea de pachete mai mici daca primeste replica ICMP indicand ca<br />
este necesarea fragmentarea. Acesta este un tip de pachet<br />
&#8220;destination-unreachable&#8221;, si daca nu este primit, sistemul nu isi va reduce<br />
MTU-ul, si performantele nu vor exista.</p>
<p>Observa faptul ca este comun sa blochezi toate pachetele ICMP de redirectare<br />
(de tip 5); aceastea pot fi folosite pentru a manvevra rutarea (deasemenea<br />
stive bune IP au masuri de protectie), asa ca sunt vazute ca risc minim.</p>
<p>5.2.2. Conexiunile TCP catre servere DNS (servere de nume)</p>
<p>Daca incerci sa blochezi conexiunile TCP catre exterior, tine minte ca DNS nu<br />
foloseste intodeauna UDP; daca raspunsul de la server depaseste 512 bytes,<br />
clientul foloseste o conexiune TCP (tot spre portul 53) pentru date.</p>
<p>Aceasta poate fi o capcana deoarece DNS va merge in mare parte. Daca nu<br />
permiti asemenea transferuri TCP; este posibil sa experimentezi intarzieri<br />
mari si alte probleme ocazionale DNS.</p>
<p>Daca aceste cereri DNS sunt intodeauna catre aceeasi sursa externa (fie direct<br />
prin folosirea liniei de nameserver din /etc/resolv.conf, fie folosind un<br />
nameserver pentru cache in mod forward), atunci ai nevoie doar sa permiti<br />
conexiunile TCP catre portul 53 pe acel nameserver de la portul local 53 (in<br />
caz in care folosesti nameserver pentru cache) sau de la un port local (&gt;1023)<br />
daca folosesti /etc/resolv.conf.</p>
<p>5.2.3. FTP</p>
<p>Problema clasica a filtrului de pachete este FTP. FTP are doua moduri; cel<br />
traditional care este numit mod activ, si cel mai recent care este numit ftp<br />
pasiv. Browsere-le web folosesc de obicei default modul pasiv, pe cand<br />
ftp-urile din linia de comanda modul activ.</p>
<p>In mod activ, cand celalalt capat doreste sa trimita un fisier (sau chiar ca<br />
rezultat a unei comenzi ls sau dir) incerca sa deschida o conexiune TCP catre<br />
masina locala. Asta inseamna ca nu poti sa filtrezi aceste conexiuni TCP fara sa<br />
impiedici conexiunile ftp active.</p>
<p>Daca ai posibilitatea sa folosesti ftp pasiv, atunci este bine;  modul pasiv<br />
creaza conexiuni TCP de la client la server, chiar si pentru datele care vin.<br />
In caz contrar, este recomandat sa lasi conexiunile TCP pe porturile locale<br />
mai mari de 1024 si nu intre 6000 si 6010 (6000 este folosit de X).</p>
<p>5.3. Filtrarea Pingului Mortii</p>
<p>Sistemele Linux sunt acum imune la celebrul Ping al Mortii, care presupune<br />
trimiterea de pachetele ICMP anormal de mari care umple bufferele in stiva TCP<br />
de pe sistem cauzand blocarea acestuia.</p>
<p>Daca protejezi sisteme care ar putea fi vulnerabile, poti in mod simplu sa<br />
ignori fragmentele ICMP. In mod normal pachetele ICMP nu sunt atat de mari<br />
pentru a fi nevoie de fragmentarea acestora, asa ca nu va influenta nimic in<br />
rau, exceptand ping-urile cu pachete de marime mare. Am auzit (neconfimat)<br />
rapoarte cum ca pentru unele sisteme ar fi suficient numai ultimul fragment al<br />
unui asemenea pachet ICMP, pentru a bloca sistemul, deci blocarea numai a<br />
primului fragment nu este recomandata.</p>
<p>In timp ce exploiturile pe care le-am vazut foloseau numai protocolul ICMP<br />
pentru aceste atacuri, nu exista nici un motiv pentru care TCP si UDP sa nu<br />
fie folosit in acelasi mod, asa ca blocarea fragmentelor ICMP este doar o<br />
solutie temporara.</p>
<p>5.4. Filtrarea pentru Teardrop si Bonk</p>
<p>Teardrop si Bonk sunt doua tipuri de atacuri (in principal asupra masinilor ce<br />
ruleaza Windows NT) care se bazeaza pe fragmente ce se suprapun partial.<br />
Acestea pot fi oprite prin configurarea sistemului Linux sa realizeze<br />
defragmentare sau sa nu permita fragmente catre sistemele vulnerabile.</p>
<p>5.5. Filtrarea fragmentelor in masa</p>
<p>Cateva stive TCP mai putin sigure se spune ca au probleme in ceea ce priveste<br />
numarul mare de fragmente de pachete, atunci cand nu primesc toate<br />
fragmentele. Linux nu are aceasta problema. Poti filtra aceste fragmente (care<br />
pot sa impiedice folosirea lor legitima) sau sa compilezi kernelul cu optiunea<br />
&#8220;IP: always defragment&#8221; setata &#8220;Y&#8221; (doar daca sistemul tau linux este singura<br />
ruta pentru aceste pachete).</p>
<p>5.6. Schimbarea regulilor din firewall</p>
<p>Sunt cateva probleme legate de viteza cu care pot fi schimbate regulile din<br />
firewall. Daca nu esti atent, poti sa lasi pachete sa intre cand esti la<br />
jumatatea acestor modificari. O rezolvare simpla ar fi:</p>
<p># ipchains -I input 1 -j DENY<br />
# ipchains -I output 1 -j DENY<br />
# ipchains -I forward 1 -j DENY</p>
<p>&#8230; realizeaza modificari &#8230;</p>
<p># ipchains -D input 1<br />
# ipchains -D output 1<br />
# ipchains -D forward 1<br />
#</p>
<p>Se ignora astfel toate pachetele pe durata modificarilor.</p>
<p>Daca schimbarile tale sunt doar intr-un singur chain, ai putea crea un nou<br />
chain cu noile reguli, si apoi sa inlocuiesti (&#8220;-R&#8221;) regula care facea<br />
referire la vechiul chain  cu o noua regula catre noul chain: apoi poti sa<br />
stergi vechiul chain. Aceasta inlocuire va fi automata.</p>
<p>5.7. Cum realizez protectia impotriva spoofarii IP</p>
<p>Spoofarea IP este o tehnica in care un host trimite pachete care pretind ca<br />
sunt de la un alt host. Cum filtrarea de pachete ia decizii bazandu-se pe<br />
adresa sursa, spoofarea IP este folosita pentru a pacali filtrele de pachete.<br />
Este folosita deasemenea pentru a ascunde identitatea atacatorilor care<br />
folosesc atacuri SYN, Teardrop, Ping of Death si similare (nu iti face griji<br />
daca nu stii ce inseamna).</p>
<p>Cea mai buna cale de a te proteja contra spoofarii este  Verificarea adresei<br />
sursa, si este realizata de catre codul de rutare, si deloc de catre cel al<br />
firewall-ului. Verifica existenta fisierului<br />
/proc/sys/net/ipv4/conf/all/rp_filter. Daca exista, atunci pornirea<br />
Verificarii adresei sursa este solutia potrivita pentru tine. Pentru a realiza<br />
acest lucru, introduce urmatoarele linii undeva in scripturile de pornire,<br />
inainte de initializarea oricarei interfete de retea:</p>
<p># Aceastea este cea mai buna metoda:<br />
# da drumu la Verificarea adresei sursa si ai protectie anti-spoof<br />
# pentru toate interfetele curente si viitoare.<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then<br />
echo -n &#8220;Setting up IP spoofing protection&#8230;&#8221;<br />
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do<br />
echo 1 &gt; $f<br />
done<br />
echo &#8220;done.&#8221;<br />
else<br />
echo PROBLEMS SETTING UP IP SPOOFING PROTECTION.  BE WORRIED.<br />
echo &#8220;CONTROL-D will exit from this shell and continue system startup.&#8221;<br />
echo<br />
# Start a single user shell on the console<br />
/sbin/sulogin $CONSOLE<br />
fi</p>
<p>(nt. sau in fisierul sysctl.conf adauga:<br />
# Controls source route verification<br />
net.ipv4.conf.default.rp_filter = 1<br />
)</p>
<p>Daca nu poti realiza acest lucru, atunci poti in mod manual sa introduci<br />
reguli pentru a proteja fiecare interfata. Aceasta cere insa cunoasterea<br />
fiecarei interfete. Kernelurile 2.1 rejecteaza automat pachetele care pretind<br />
a veni de la adresele 127.* (rezervate pentru interfata loopback, lo).</p>
<p>De exemplu, sa presupunem ca avem trei interfete, eth0, eth1 si ppp0. Folosim<br />
ifconfig pentru a vedea adresele interfetelor si netmaskul acestora. Sa zicem<br />
ca eth0 este atasata unei retele 192.168.1.0 cu netmask-ul 255.255.255.0, eth1<br />
apartine unei retele 10.0.0.0 cu netmask 255.0.0.0, si ppp0 este conectata la<br />
Internet (unde orice adrese, exceptand cele din clasele private, sunt<br />
permise). Introducem regulile:</p>
<p># ipchains -A input -i eth0 -s ! 192.168.1.0/255.255.255.0 -j DENY<br />
# ipchains -A input -i ! eth0 -s 192.168.1.0/255.255.255.0 -j DENY<br />
# ipchains -A input -i eth1 -s ! 10.0.0.0/255.0.0.0 -j DENY<br />
# ipchains -A input -i ! eth1 -s 10.0.0.0/255.0.0.0 -j DENY<br />
#</p>
<p>Aceasta rezolvare a problemei nu este atat de buna cum este Verificarea<br />
adresei sursa, deoarece daca reteaua se schimba, trebuie sa iti modifici<br />
regulile din firewall.</p>
<p>Daca ai un kernel ver 2.0, ai dori sa iti protejezi chiar si interfata<br />
loopback:</p>
<p># ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0 -j DENY<br />
#</p>
<p>5.8. Proiecte mai avansate</p>
<p>Exista o biblioteca pe care am scris-o, inclusa in distributia surselor numita<br />
&#8220;libfw&#8221;. Aceasta foloseste posibilitatea din IP Chains ver 1.3 si peste, de<br />
a copia un pachet pentru a putea fi folosit in mediul utilizator (folosind<br />
optiunea IP_FIREWALL_NETLINK).</p>
<p>Valorea cu care este marcat pachetul poate fi folosita pentru a specifica<br />
parametrii de Calitate a serviciului pentru pachete, sau pentru a specifica<br />
cum ar trebui sa fie facuta forwardarea de porturi pentru pachete. Nu am<br />
folosit nici una dintre acestea, dar daca ai vreo observatie contacteaza-ma.</p>
<p>Lucuri cum ar fi verificarea dupa stare (prefer termenul de firewall dinamic)<br />
pot fi implementate in mediul utilizator prin folosirea acestei biblioteci.<br />
Alta idee mai interesanta ar fi controlarea pachetelor intr-un mediu<br />
utilizator cu ajutorul unui daemon, destul de usor de realizat.</p>
<p>5.8.1. SPF: filtrare dupa starea pachetului (stateful packet filtering)</p>
<p>ftp://ftp.interlinx.bc.ca/pub/spf &lt;ftp://ftp.interlinx.bc.ca/pub/spf&gt; este<br />
site-ul proiectului SPF, apartinand lui Brian Murrell, care realizeaza<br />
urmarirea conexiunile in mediu utilizator. Se adauga astfel securitate<br />
simnificativa pentru site-uri cu banda limitata.</p>
<p>In prezent nu este disponibila multa documentatie, dar iata postari pe o lista<br />
de discutii in care Brian raspunde la niste intrebari:</p>
<p>&gt; cred ca se realizeaza exact ce doresc. Intra in functiune o regula<br />
&gt; temporara pentru a permite intrarea pachetele ce vin ca raspuns la o<br />
&gt; cerere anterioara<br />
Da, exact asta se realizeaza. Cu cat este mai compatibil cu mai multe<br />
protocoale, cu atat regula temporara este corecta. Pentru moment<br />
suporta (din cate imi amintesc, scuzati eventualele erori sau<br />
omisiuni) FTP (atat activ, cat si pasiv, inautru sau spre exterior),<br />
RealAudio, traceroute, ICMP si ICQ simplu (conexiuni dinspre servere<br />
ICQ, si conexiuni TCP directe, dar conexiuni secundare directe TCP<br />
pentru lucruri ca transferul de fisiere, nu sunt inca realizate)</p>
<p>&gt; este un inlocuitor pentru ipchains sau un lucru suplimentar?<br />
Este un lucru suplimentar. Gandeste-te la ipchains ca la un engine<br />
care permite sau interzice pachetelor traversarea printr-un sistem<br />
linux. SPF este driver-ul, care monitorizeaza constant traficul si<br />
comunica ipchains-ului ce anume sa schimbe in reguli pentru a permite<br />
un anumit tip de trafic.</p>
<p>5.8.2. &#8220;Hack-ul&#8221; ftp-data al lui Michael Hasenstein</p>
<p>Michael Hasenstein, de la SuSE, a scris un patch de kernel care adauga<br />
urmarirea conexiunilor ftp pentru ipchains. Poate fi gasit la</p>
<p>http://www.suse.de/~mha/patch.ftp-data-2.gz</p>
<p>&lt;http://www.suse.de/~mha/patch.ftp-data-2.gz&gt;.</p>
<p>5.9. Planuri de viitor</p>
<p>Realizarea de firewall si NAT-ul au fost rescrise pentru 2.4. Planuri si<br />
discutii sunt disponibile pe lista de discutii de la netfilter (vezi<br />
http://lists.samba.org &lt;http://lists.samba.org&gt;). Aceste versiuni noi ar<br />
trebui sa rezolve multe dintre problemele actuale de utilizare (realizarea de<br />
masquerading si firewall nu ar trebui sa fie asa de grea) si sa permite<br />
dezvoltarea de firewall-uri mai flexibile.</p>
<p>6. Probleme des intalnite</p>
<p>6.1. ipchains -L ingheata!</p>
<p>Probabil ca ai blocate cererile catre DNS; eventual va da timeout. Incearca sa<br />
folosesti optiunea &#8220;-n&#8221; (numeric), care previne ipchains sa rezolve numele.</p>
<p>6.2. Specificarea inversa nu poate fi realizata!</p>
<p>Trebuie sa pui semnul &#8220;!&#8221; singur, cu spatii de o parte si de alta. O greseala<br />
clasica este:</p>
<p># ipchains -A input -i !eth0 -j DENY<br />
#</p>
<p>Nu va exista niciodata o interfata numita &#8220;!eth0&#8243;, dar ipchains nu isi da<br />
seama de acest lucru.</p>
<p>6.3. Masqueradarea/Forwardarea nu se realizeaza!</p>
<p>Verifica daca forwardarea pentru pachete este setata (in kernelurile recente<br />
default este scos, insemnand ca pachetele nici macar nu vor incerca sa<br />
traverseze chain-ul &#8220;forward&#8221;). Poti sa ii pornesti aceasta facilitate prin:</p>
<p># echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
#</p>
<p>Daca aceasta comanda functioneaza, o poti pune intr-unul din scripturile ce<br />
ruleaza la bootare, pentru a avea tot timpul aceasta facilitate; desi vei dori<br />
sa iti configurezi firewall-ul, in caz contrar exista posibilitatea ca unele<br />
pachete sa treaca.</p>
<p>6.4. Tinta -j REDIR nu merge!</p>
<p>Trebuie sa permiti forwardarea de pachete (citeste mai sus) pentru ca<br />
redirectarea sa fie posibila; altfel codul de rutare ignora pachetul. Asa ca<br />
daca folosesti doar redirect, si nu ai forwarding-ul setat, ar trebui sa iti<br />
dai seama ca este de la asta.</p>
<p>Observa ca REDIR (fiind in chain-ul input) nu afecteaza conexiunile catre<br />
procesele locale.</p>
<p>6.5. Specificare mai multor interfete (ex &#8220;-i ppp+&#8221;) nu merge!</p>
<p>Exista un defect de programare in kernelurile ver. 2.1.102 si 2.1.103 (si<br />
in unele patch-uri mai vechi pe care le-am relizat) care determina<br />
comanda ipchains de specificare a mai multor interfete (ex &#8220;-i ppp+&#8221;) sa nu<br />
mearga.</p>
<p>Acest lucru a fost indreptat in kernelurile recente si in patch-ul 2.0.34 de<br />
pe site-ul web. Poti deasemenea sa il indrepti manual, in sursele kernelului<br />
modificand linia 63 din fisierul include/linux/ip_fw.h:</p>
<p>#define IP_FW_F_MASK    0x002F  /* All possible flag bits mask   */</p>
<p>In loc de 0x002F ar trebui sa fie &#8220;0x003F&#8221;. Modifica si recompileaza kernelul.</p>
<p>6.6. TOS nu merge!</p>
<p>Aceasta este greseala mea: setarea campului TOS nu a setat in realitate TOS<br />
in kernelurile ver. 2.1.102 pana la 2.1.111. Aceasta problema a fost rezolvata<br />
in 2.1.112.</p>
<p>6.7. ipautofw si ipportfw nu merg!</p>
<p>Pentru 2.0.x, aceasta este adevarat; nu am avut timp pentru a crea si mentine<br />
un patch pentru ipchains si ipautofw/ipportfw.</p>
<p>Pentru 2.1.x, downloadeaza ipmasqadm al lui Juan Ciarlante de la:<br />
&lt;url url=&#8221;http://juanjox.linuxhq.com/&#8221;<br />
name=&#8221;http://juanjox.linuxhq.com/&#8221;&gt;</p>
<p>si foloseste-l la fel ca si cum ai fi folosit ipautofw si ipportfw, cu<br />
exceptia faptului ca in loc de ipportfw tastezi ipmasqadm portfw, si in loc de<br />
ipautofw tastezi ipmasqadm autofw.</p>
<p>6.8. xosview este stricat!</p>
<p>Fa upgrade la versiunea 1.6.0 sau mai avansata, unde nu este necesar nici un<br />
fel de reguli in firewall pentru kernelurile 2.1.x. Se pare ca iar nu<br />
functioneaza in ver. 1.6.1.; te rog contacteaza autorul (nu este greseala<br />
mea!).</p>
<p>6.9. Segmentation Fault din cauza tintei &#8220;-j REDIRECT&#8221;!</p>
<p>Acesta este o eroare de programare in ipchains, ver. 1.3.3. Upgrade.</p>
<p>6.10. Nu pot preciza valori de timeout pentru masquerading!</p>
<p>Este adevarat (pentru kernelurile 2.1.x) pana la ver. 2.1.123. In 2.1.124,<br />
incercarea de a seta valori pentru timeout-ul din masqueradig cauza o blocare<br />
a kernelului (schimba return cu ret la linia 1328 din fisierul<br />
net/ipv4/ip_fw.c). In 2.1.125, functioneaza cum trebuie.</p>
<p>6.11. Vreau sa filtrez IPX!</p>
<p>Asta se pare ca vor si altii. Din pacate codul meu acopera doar IP. Insa,<br />
exista posibilitatea pentru a filtra IPX! Trebuie doar sa scrii codul, te voi<br />
ajuta unde este posibil.</p>
<p>7. Un exemplu serios</p>
<p>Acest exemplu a fost luat de la Michael Neuling si tutorialul meu din<br />
LinuxWorld din Martie 1999; acesta nu este singura cale pentru a rezova<br />
problema data, dar este probabil cea mai simpla. Sper ca o sa o gasesti<br />
interesanta.</p>
<p>7.1. Topologia retelei</p>
<p>- O retea interna masqueradata (sisteme de operare variate), pe care o numim<br />
&#8220;GOOD&#8221;.</p>
<p>- Servere expuse intr-o retea separata (numita &#8220;DMZ&#8221; de la zona<br />
demilitarizata).</p>
<p>- Conexiunea PPP catre Internet (numita &#8220;BAD&#8221;).</p>
<p>Retea externa    (BAD)<br />
|<br />
|<br />
ppp0|<br />
&#8212;&#8212;&#8212;&#8212;&#8212;<br />
| 192.84.219.1|           Reteaua de servere (DMZ)<br />
|             |eth0<br />
|             |&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
|             |192.84.219.250 |             |              |<br />
|             |               |             |              |<br />
|192.168.1.250|               |             |              |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;          &#8212;&#8212;&#8211;       &#8212;&#8212;-        &#8212;&#8212;-<br />
| eth1            | SMTP |       | DNS |        | WWW |<br />
|                 &#8212;&#8212;&#8211;       &#8212;&#8212;-        &#8212;&#8212;-<br />
|              192.84.219.128  192.84.219.129  192.84.218.130<br />
|<br />
Retea interna    (GOOD)</p>
<p>7.2. Scopurile</p>
<p>Filtrul de pachete de pe ruter:</p>
<p>PING orice retea<br />
Aceasta este folositor pentru a verifica daca un sistem este oprit.</p>
<p>TRACEROUTE orice retea<br />
Inca odata, folositor pentru analize.</p>
<p>Acces DNS<br />
Pentru a face ping-ul si DNS-ul mai folositor</p>
<p>In cadrul DMZ:<br />
Serverul de mail (SMTP):</p>
<p>- SMTP catre exterior<br />
- Permiterea accesului SMTP din interior si exterior<br />
- Permiterea accesului POP3 din interior.</p>
<p>Serverul de nume (DNS):</p>
<p>- Trimitere de pachete DNS catre exterior<br />
- Permiterea accesului DNS din reteaua interna, externa si de pe ruter.</p>
<p>Serverul WWW:</p>
<p>- Permiterea accesului http din exterior si interior<br />
- Permiterea accesului rsync din interior</p>
<p>Reteaua interna:</p>
<p>Permiterea accesului www, ftp, ssh si traceroute<br />
Aceastea sunt lucruri permise destul de standard, in unele<br />
locuri sistemele au voie sa faca orice, dar aici vom fi mai<br />
restrictivi.</p>
<p>Permiterea accesului SMTP catre serverul de mail<br />
Evident, dorim ca sa aiba posibilitatea sa trimita mailuri.</p>
<p>Permiterea accesului POP3 catre serverul de mail<br />
In acest mod isi pot citi mail-ul.</p>
<p>Permiterea accesului DNS catre nameserver<br />
Au nevoie de posibilitatea de a rezolva numele externe pentru<br />
www, ssh, ftp, si traceroute.</p>
<p>Permiterea accesului rsync catre serverul de web<br />
Acesta este modul prin care vor sincroniza serverul extern de<br />
web cu cel intern.</p>
<p>Permiterea accesului WWW catre serverul de WEB<br />
Evident, trebuie sa poata fi accesat serverul nostru extern<br />
de web.</p>
<p>Permiterea ping-ului catre ruter<br />
Pentru a realiza daca este jos ruterul, ca sa nu dea vina pe<br />
noi daca un server extern este jos.</p>
<p>7.3. Inainte de realizarea filtrarii de pachete</p>
<p>- Anti-spoofing<br />
Cum nu avem de a face cu rutare asimetrica, putem in mod simplu sa dam<br />
drumul la anti-spoofing pentru toate interfetele.</p>
<p># for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 &gt; $f; done<br />
#</p>
<p>- Configurarea filtrului de pachete sa interzica (DENY) toate pachetele<br />
Permitem insa traficul pentru interfata loopback, dar nu permiterm<br />
nimic alceva.</p>
<p># ipchains -A input -i ! lo -j DENY<br />
# ipchains -A output -i ! lo -j DENY<br />
# ipchains -A forward -j DENY<br />
#</p>
<p>- Configurarea interfetelor<br />
Aceasta este de obicei realizata in scripturile de initializare. Fii<br />
sigur ca pasii de mai sus sunt realizati inainte de configurarea<br />
interfetelor, pentru a preveni scaparea eventualelor pachete.</p>
<p>- Introduce modulele de masquerading specifice protocolului<br />
Este necesar sa introducem modulul de masquerading pentru FTP, astfel<br />
incat ftp activ si pasiv sa fie disponibile din reteaua interna.</p>
<p># insmod ip_masq_ftp<br />
#</p>
<p>7.4. Filtrarea de pachete pentru pachetele directe</p>
<p>Deorece se realizeaza masquerading, cel mai bine este sa le filtrezi in<br />
chain-ul forward.</p>
<p>Imparte chain-ul forward in diferite chain-uri definite de catre utilizator in<br />
functie de interfata sursa/destinatie; aceasta abordare imparte problema in<br />
bucati.</p>
<p>ipchains -N good-dmz<br />
ipchains -N bad-dmz<br />
ipchains -N good-bad<br />
ipchains -N dmz-good<br />
ipchains -N dmz-bad<br />
ipchains -N bad-good</p>
<p>Acceptarea erorile standard ICMP este un lucru obisnuit, asa ca specificam un<br />
chain pentru acestea.</p>
<p>ipchains -N icmp-acc</p>
<p>7.4.1. Trecerea spre alte chain-uri din chain-ul forward</p>
<p>Din nefericire, in chain-ul forward cunoastem doar interfata de iesire. De<br />
aceea, pentru a realiza interfata pe unde a intrat pachetul, ne folosim de<br />
adresa sursa (facilitatea anti-spoofing previne adresele sursa false).</p>
<p>Observa ca logam toate pachetele cu adresa sursa falsa (evident, aceasta nu ar<br />
trebui sa se intample niciodata).</p>
<p>ipchains -A forward -s 192.168.1.0/24 -i eth0 -j good-dmz<br />
ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j good-bad<br />
ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j dmz-bad<br />
ipchains -A forward -s 192.84.219.0/24 -i eth1 -j dmz-good<br />
ipchains -A forward -i eth0 -j bad-dmz<br />
ipchains -A forward -i eth1 -j bad-good<br />
ipchains -A forward -j DENY -l</p>
<p>7.4.2. Definirea chain-ului icmp-acc</p>
<p>Pachetele care sunt erori ICMP sunt acceptate, in caz contrar, traversarea va<br />
continua din chain-ul anterior.</p>
<p>ipchains -A icmp-acc -p icmp &#8211;icmp-type destination-unreachable -j ACCEPT<br />
ipchains -A icmp-acc -p icmp &#8211;icmp-type source-quench -j ACCEPT<br />
ipchains -A icmp-acc -p icmp &#8211;icmp-type time-exceeded -j ACCEPT<br />
ipchains -A icmp-acc -p icmp &#8211;icmp-type parameter-problem -j ACCEPT</p>
<p>7.4.3. Reguli pentru conexiuni reteaua interna ==&gt; DMZ</p>
<p>Restrictii interne:</p>
<p>- Este permis accesul WWW, ftp, traceroute, ssh catre exterior<br />
- Este permis accesul accesul SMTP catre serverul de mail<br />
- Este permis accesul pop3 catre serverul de mail<br />
- Este permis accesul DNS la namerserver<br />
- Este permis rsync catre serverul de Web<br />
- Este permis accesul WWW catre serverul de Web<br />
- Este permis ping catre ruter</p>
<p>Am putea sa realizam masquerading din reteaua interna catre DMZ, dar nu facem<br />
acest lucru. Cum nimeni din reteaua interna nu ar trebui sa incerce sa faca<br />
lucruri rele, logam toate pachetele ce sunt interzise.</p>
<p>Observati ca in versiunile mai vechi de Debian numesc &#8220;pop3&#8243; &#8220;pop-3&#8243; care nu<br />
respecta RFC1700.</p>
<p>ipchains -A good-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT<br />
ipchains -A good-dmz -p tcp -d 192.84.219.128 pop3 -j ACCEPT<br />
ipchains -A good-dmz -p udp -d 192.84.219.129 domain -j ACCEPT<br />
ipchains -A good-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT<br />
ipchains -A good-dmz -p tcp -d 192.84.218.130 www -j ACCEPT<br />
ipchains -A good-dmz -p tcp -d 192.84.218.130 rsync -j ACCEPT<br />
ipchains -A good-dmz -p icmp -j icmp-acc<br />
ipchains -A good-dmz -j DENY -l</p>
<p>7.4.5. Reguli pentru conexiuni din reteaua interna ==&gt; reteaua externa</p>
<p>Restrictionare in reteaua DMZ numai la:<br />
- serverul de mail:<br />
- SMTP catre exterior<br />
- acceptare acces SMTP din interior si exterior<br />
- acceptare acces pop3 din interior</p>
<p>- serverul de nume:<br />
- trimitere cereri DNS catre exterior<br />
- acceptarea acces DNS din reteaua interna, externa si ruter</p>
<p>- serverul de web:<br />
- acceptare acces HTTP din exterior si interior<br />
- acceptare acces rsync din interior</p>
<p>Lucruri pe care le permitem din Internet catre DMZ</p>
<p>- nu logam  violarile, deoarece se pot intampla.</p>
<p>ipchains -A bad-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT<br />
ipchains -A bad-dmz -p udp -d 192.84.219.129 domain -j ACCEPT<br />
ipchains -A bad-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT<br />
ipchains -A bad-dmz -p tcp -d 192.84.218.130 www -j ACCEPT<br />
ipchains -A bad-dmz -p icmp -j icmp-acc<br />
ipchains -A bad-dmz -j DENY</p>
<p>7.4.5. Reguli pentru conexiuni din reteaua interna ==&gt; reteaua externa</p>
<p>Restrictionare in reteaua interna numai la:<br />
- permiterea in exterior traficului WWW, ftp, traceroute, ssh<br />
- acceptare acces SMTP catre serverul de mail<br />
- acceptare acces POP-3 catre serverul de mail<br />
- acceptare acces DNS catre nameserver<br />
- acceptare acces rsync catre nameserver<br />
- acceptare acces WWW catre serverul de web<br />
- acceptare ping catre ruter<br />
- logare a violarilor<br />
- porturile UDP destinatie 33434 sunt permise si folosite de<br />
traceroute</p>
<p>Multi oameni permit totul din reteaua locala, noi nu.<br />
Ftp pasiv este utilizat cu ajutorul modulului de masquerading.</p>
<p>ipchains -A good-bad -p tcp &#8211;dport www -j MASQ<br />
ipchains -A good-bad -p tcp &#8211;dport ssh -j MASQ<br />
ipchains -A good-bad -p udp &#8211;dport 33434:33500 -j MASQ<br />
ipchains -A good-bad -p tcp &#8211;dport ftp -j MASQ<br />
ipchains -A good-bad -p icmp &#8211;icmp-type ping -j MASQ<br />
ipchains -A good-bad -j REJECT -l</p>
<p>7.4.6. Reguli pentru conexiuni din DMZ ==&gt; reteaua interna</p>
<p>Restrictionare in reteaua interna numai la:<br />
- permiterea in exterior traficului WWW, ftp, traceroute, ssh<br />
- acceptare acces SMTP catre serverul de mail<br />
- acceptare acces POP-3 catre serverul de mail<br />
- acceptare acces DNS catre nameserver<br />
- acceptare acces rsync catre nameserver<br />
- acceptare acces WWW catre serverul de web<br />
- acceptare ping catre ruter</p>
<p>Daca realizam masquerading din reteaua interna catre DMZ, pur si si<br />
simplu refuzam pachetele ce vin din cealalta parte. Astfel, permitem<br />
pachetele care nu pot fi decat parte a unei conexiuni stabilite.</p>
<p>ipchains -A dmz-good -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT<br />
ipchains -A dmz-good -p udp -s 192.84.219.129 domain -j ACCEPT<br />
ipchains -A dmz-good -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT<br />
ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 www -j ACCEPT<br />
ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT<br />
ipchains -A dmz-good -p icmp -j icmp-acc<br />
ipchains -A dmz-good -j DENY -l</p>
<p>7.4.7. Reguli pentru conexiuni din DMZ ==&gt; reteaua externa</p>
<p>Restrictionare in reteaua DMZ numai la:<br />
- serverul de mail:<br />
- SMTP catre exterior<br />
- acceptare acces SMTP din interior si exterior<br />
- acceptare acces pop3 din interior</p>
<p>- serverul de nume:<br />
- trimitere cereri DNS catre exterior<br />
- acceptarea acces DNS din reteaua interna, externa si ruter</p>
<p>- serverul de web:<br />
- acceptare acces HTTP din exterior si interior<br />
- acceptare acces rsync din interior</p>
<p>ipchains -A dmz-bad -p tcp -s 192.84.219.128 smtp -j ACCEPT<br />
ipchains -A dmz-bad -p udp -s 192.84.219.129 domain -j ACCEPT<br />
ipchains -A dmz-bad -p tcp -s 192.84.219.129 domain -j ACCEPT<br />
ipchains -A dmz-bad -p tcp ! -y -s 192.84.218.130 www -j ACCEPT<br />
ipchains -A dmz-bad -p icmp -j icmp-acc<br />
ipchains -A dmz-bad -j DENY -l</p>
<p>7.4.8. Reguli pentru conexiuni din reteaua externa ==&gt; reteaua interna</p>
<p>- Nu permitem nici o conexiune nemasqueradata din reteaua externa catre<br />
reteaua interna</p>
<p>ipchains -A bad-good -j REJECT</p>
<p>7.4.9. Filtrul de pachete pentru insusi sistemul care este ruter</p>
<p>- Daca doresti sa filtrezi pachetele ce au ca destinatie insusi ruterul,<br />
aceasta sa realizeaza in chain-ul input. Cream cate un chain pentru fiecare<br />
interfata destinatie.</p>
<p>ipchains -N bad-if<br />
ipchains -N dmz-if<br />
ipchains -N good-if</p>
<p>- Cream reguli pentru a sari la aceste chain-uri</p>
<p>ipchains -A input -d 192.84.219.1 -j bad-if<br />
ipchains -A input -d 192.84.219.250 -j dmz-if<br />
ipchains -A input -d 192.168.1.250 -j good-if</p>
<p>7.4.9.1. Interfata catre reteaua externa</p>
<p>Restrictionarea ruterului numai la:<br />
- PING catre orice retea<br />
- TRACEROUTE catre orice retea<br />
- acces catre DNS<br />
- Interfata externa primeste deasemenea replay-uri la pachetele<br />
masqueradate (masquerading foloseste porturile sursa 61000 si<br />
65095), erorile ICMP pentru acestea si replay-urile la PING.</p>
<p>ipchains -A bad-if -i ! ppp0 -j DENY -l<br />
ipchains -A bad-if -p TCP &#8211;dport 61000:65095 -j ACCEPT<br />
ipchains -A bad-if -p UDP &#8211;dport 61000:65095 -j ACCEPT<br />
ipchains -A bad-if -p ICMP &#8211;icmp-type pong -j ACCEPT<br />
ipchains -A bad-if -j icmp-acc<br />
ipchains -A bad-if -j DENY</p>
<p>7.4.9.2. Interfata catre reteaua de servere (DMZ)</p>
<p>Restrictionarea ruterului numai la:<br />
- PING catre orice retea<br />
- TRACEROUTE catre orice retea<br />
- acces catre DNS<br />
- interfata catre DMZ primeste replay-uri DNS, ping si erori ICMP</p>
<p>ipchains -A dmz-if -i ! eth0 -j DENY<br />
ipchains -A dmz-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT<br />
ipchains -A dmz-if -p UDP -s 192.84.219.129 53 -j ACCEPT<br />
ipchains -A dmz-if -p ICMP &#8211;icmp-type pong -j ACCEPT<br />
ipchains -A dmz-if -j icmp-acc<br />
ipchains -A dmz-if -j DENY -l</p>
<p>7.4.9.3. Interfata catre reteaua interna</p>
<p>Restrictionarea ruterului numai la:<br />
- PING catre orice retea<br />
- TRACEROUTE catre orice retea<br />
- acces catre DNS</p>
<p>Restrictionarea retelei interne numai la:<br />
- permiterea in exterior traficului WWW, ftp, traceroute, ssh<br />
- acceptare acces SMTP catre serverul de mail<br />
- acceptare acces POP-3 catre serverul de mail<br />
- acceptare acces DNS catre nameserver<br />
- acceptare acces rsync catre nameserver<br />
- acceptare acces WWW catre serverul de web<br />
- acceptare ping catre ruter<br />
- interfata interna primeste ping-uri, replay-uri la ping si erori ICMP</p>
<p>ipchains -A good-if -i ! eth1 -j DENY<br />
ipchains -A good-if -p ICMP &#8211;icmp-type ping -j ACCEPT<br />
ipchains -A good-if -p ICMP &#8211;icmp-type pong -j ACCEPT<br />
ipchains -A good-if -j icmp-acc<br />
ipchains -A good-if -j DENY -l</p>
<p>7.5. In final</p>
<p>- Stergerea regulilor ce blocheaza pachetele:</p>
<p>ipchains -D input 1<br />
ipchains -D forward 1<br />
ipchains -D output 1</p>
<p>8. Anexa: Diferente intre ipchains si ipfwadm</p>
<p>Unele dintre aceste modificari sunt un rezultat al schimbarilor din kernel, si<br />
unele al faptului ca ipchains este diferit de ipfwadm</p>
<p>1. Multe argumente au fost schimbate: literele mari indica o comanda, literele<br />
mici indica o optiune.</p>
<p>2. Chain-uri arbitrare sunt posibile, deci chiar si chain-urile predefinite<br />
au nume intregi in loc de argumente (ex. &#8220;input&#8221; in loc de &#8220;-I&#8221;).</p>
<p>3. Optiunea &#8220;-k&#8221; a disparut: foloseste &#8220;! -y&#8221;.</p>
<p>4. Optiunea &#8220;-b&#8221; defapt introduce/sterge/adauga doua reguli, ma degraba decat<br />
o singura regula bidirectionala.</p>
<p>5. Optiunea &#8220;-b&#8221; poate fi folosita impreauna cu &#8220;-C&#8221; pentru a realiza doua<br />
verificari (cate una in fiecare directie).</p>
<p>6. Optiunea &#8220;-x&#8221; in folosire cu &#8220;-l&#8221; a fost inlocuit cu &#8220;-v&#8221;.</p>
<p>7. Porturi multiple sursa si destinatie nu mai sunt suportate. Din fericire<br />
faptul ca se pot nega siruri de porturi a indreptat pe undeva acest lucru.</p>
<p>8. Interfetele pot fi specificate numai prin nume (nu si prin adrese). Vechea<br />
sintaxa s-a schimbat in liniste oricum pentru kernelurile versiunea 2.1.</p>
<p>9. Fragmentele sunt examinate, nu mai sunt permise automat.</p>
<p>10. Accounting chain-urile explicite au fost inlaturate</p>
<p>11. Protocoale diferite peste IP pot fi testate.</p>
<p>12. Comportamentul vechi pentru potrivirea SYN si ACK (care inainte a fost<br />
ignorat pentru pachetele non-TCP) s-a schimbat; optiunea SYN nu este valida<br />
pentru reguli care nu sunt specifice TCP.</p>
<p>13. Counterele sunt acum pe 64 de biti pentru masini pe 32 de bit, nu pe 32 de<br />
biti.</p>
<p>14. Inversarea optiunilor este posibila.</p>
<p>15. Codurile ICMP sunt suportate acum.</p>
<p>16. Definirea mai multe interfete odata este suportata.</p>
<p>17. Manipularea TOS este acum verificata: inainte kernelul te oprea in<br />
liniste, acum ipchains returneaza o eroare pentru cazurile invalide.</p>
<p>8.1. Tabel pentru informare rapida</p>
<p>[ In principal, argumentele pentru comenzi sunt cu litere mari, si argumentele<br />
pentru optiuni sunt cu litere mici ]</p>
<p>Inca un lucru de observat, masquerading este specificat prin &#8220;-j MASQ&#8221;, este<br />
complet diferit fata de &#8220;-j ACCEPT&#8221;, si nu tratat doar ca un efect secundar,<br />
cum face ipfwadm.</p>
<p>================================================================<br />
| ipfwadm      | ipchains              | Note<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -A [both]    | -N acct               | Creeaza un chain &#8220;acct&#8221;<br />
|              |&amp; -I 1 input -j acct   | si determina pachetele din<br />
|              |&amp; -I 1 output -j acct  | chain-ul input si output<br />
|              |&amp; acct                 | sa il traverseze<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -A in        | input                 | O regula fara nici o tinta<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -A out       | output                | O regula fara nici o tinta<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -F           | forward               | Foloseste acesta ca [chain].<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -I           | input                 | Foloseste acesta ca [chain].<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -O           | output                | Foloseste acesta ca [chain].<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -M -l        | -M -L                 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -M -s        | -M -S                 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -a policy    | -A [chain] -j POLICY  | (dar vezi -r si -m).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -d policy    | -D [chain] -j POLICY  | (dar vezi -r si -m).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -i policy    | -I 1 [chain] -j POLICY| (dar vezi -r si -m).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -l           | -L                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -z           | -Z                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -f           | -F                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -p           | -P                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -c           | -C                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -P           | -p                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -S           | -s                    | Accepta un port sau un sir<br />
|              |                       | nu valori multiple.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -D           | -d                    | Accepta un port sau un sir<br />
|              |                       | nu valori multiple.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -V           | &lt;none&gt;                | Foloseste -i [nume].<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -W           | -i                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -b           | -b                    | Acum sunt defapt 2 reguli.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -e           | -v                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -k           | ! -y                  | Nu functioneaza daca nu<br />
|              |                       | este specificat -p tcp.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -m           | -j MASQ               |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -n           | -n                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -o           | -l                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -r [redirpt] | -j REDIRECT [redirpt] |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -t           | -t                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -v           | -v                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -x           | -x                    |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| -y           | -y                    | Nu functioneaza daca nu<br />
|              |                       | este specificat -p tcp.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>8.2. Exemple de comenzi ipfwadm translatate in ipchains</p>
<p>Comanda veche: ipfwadm -F  -p deny</p>
<p>Comanda noua: ipchains -P forward DENY</p>
<p>Comanda veche: ipfwadm -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0</p>
<p>Comanda noua: ipchains -A forward -j MASQ -s 192.168.0.0/24 -d<br />
0.0.0.0/0</p>
<p>Comanda veche: ipfwadm -I -a accept -V 10.1.2.1 -S 10.0.0.0/8 -D<br />
0.0.0.0/0</p>
<p>Comanda noua: ipchains -A input -j ACCEPT -i eth0 -s 10.0.0.0/8 -d<br />
0.0.0.0/0</p>
<p>(Observa ca nu exista nici un echivalent pentru a specifica interfata prin<br />
adresa: foloseste numele interfetei. Pe aceasta masina, 10.1.2.1 corespunde cu<br />
eth0).</p>
<p>9. Anexa: Folosirea scriptului ipfwadm-wrapper</p>
<p>Scriptul ipfwadm-wrapper ar trebui sa fie un inlocuitor pentru ipfwadm pentru<br />
compatibilitate cu ipfwadm 2.3a.</p>
<p>Singura optiune pe care nu o poate folosi este &#8220;-V&#8221;. Cand aceasta este<br />
folosita un avertisment este afisat. Daca optiunea &#8220;-W&#8221; este deasemenea<br />
folosita, optiunea &#8220;-V&#8221; este ignorata. In caz contrar, scriptul incearca sa<br />
gaseasca numele interfetei asociata cu aceea adresa folosind ifconfig. Daca<br />
acest lucru nu reuseste (cum ar fi din cauza ca interfata nu este activata)<br />
atunci scriptul se opreste cu un mesaj de eroare.</p>
<p>Acest avertizment poate fi ascuns daca se inlocuieste &#8220;-V&#8221; cu &#8220;-W&#8221;, sau<br />
redirectand output-ul scriptului catre /dev/null.</p>
<p>Daca gasesti greseli in acest script, sau lucruri care sunt diferite intre<br />
realul ipfwadm si acest script, te rog sa imi trimiti bug-ul: trimite un<br />
e-mail la rusty@linuxcare.com cu &#8220;BUG-REPORT&#8221; in campul subiectului. Te rog sa<br />
listezi versiunea ta de ipfwadm  (ipfwadm -h), versiunea de ipchains (ipchains<br />
&#8211;version) si versiunea scriptului ipfwadm wrapper (ipfwadm-wrapper<br />
&#8211;version). Trimite de asemenea output-ul pentru ipchains-save. Multumiri<br />
anticipate.</p>
<p>Folosirea impreuna a acestui script si ipchains este riscul tau.</p>
<p>10. Anexa: Multumiri.</p>
<p>Multe multumiri pentru Michael Neuling, care a realizat prima versiune de cod<br />
pentru IP chains in timp ce lucra pentru mine. Imi cer scuze in mod public<br />
pentru ca nu am luat in considerare ideea sa de result-caching, pe care a<br />
propus-o mai tarziu Alan Cox, si pe care in final am inceput sa o implementez,<br />
observand greselile mele.</p>
<p>Multumiri lui Alan Cox, pentru tech suport de 24 de ore prin e-mail, si pentru<br />
incurajari.</p>
<p>Multumiri tuturor autorilor codului ipfwadm si ipfw, in special lui Jos Vos.</p>
<p>Multumiri pentru beta-testeri si vanatorii de bug-uri in special lui: Jordan<br />
Mendelson, Shaw Carruthers, Kevin Moule, Dr. Liviu Daia, Helmut Adams,<br />
Franck Sicard, Kevin Littlejohn, Matt Kemner, John D. Hardin, Alexey<br />
Kuznetsov, Leos Bitto, Jim Kunzman, Gerard Gerritsen, Serge Sivkov,<br />
Andrew Burgess, Steve Schmidtke, Richard Offer, Bernhard Weisshuhn,<br />
Larry Auton, Ambrose Li, Pavel Krauz, Steve Chadsey, Francesco<br />
Potorti`, Alain Knaff, Casper Boden-Cummins and Henry Hollenberg.</p>
<p>10.1. Traduceri</p>
<p>Oamenii care realizeaza traduceri ar trebui sa se puna la inceputul paginii de<br />
Multumiri, astfel:&#8221;Multe multumiri lui XXX, pentru traducerea exacta din<br />
engleza. Apoi spune-mi despre traducere ta, pentru a putea sa te includ aici.</p>
<p>Arnaud Launay, asl@launay.org:</p>
<p>http://www.freenix.fr/unix/linux/HOWTO/IPCHAINS-HOWTO.html</p>
<p>&lt;http://www.freenix.fr/unix/linux/HOWTO/IPCHAINS-HOWTO.html&gt;</p>
<p>Giovanni Bortolozzo, borto@pluto.linux.it:</p>
<p>http://www.pluto.linux.it/ildp/HOWTO/IPCHAINS-HOWTO.html</p>
<p>&lt;http://www.pluto.linux.it/ildp/HOWTO/IPCHAINS-HOWTO.html&gt;</p>
<p>Herman Rodrнguez, herman@maristas.dhis.org:</p>
<p>http://netfilter.kernelnotes.org/ipchains/spanish/HOWTO.html</p>
<p>&lt;http://netfilter.kernelnotes.org/ipchains/spanish/HOWTO.html&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://resurse-educationale.uv.ro/?feed=rss2&#038;p=165</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CUM SA administrati rapid un DNS. HOWTO</title>
		<link>http://resurse-educationale.uv.ro/?p=162</link>
		<comments>http://resurse-educationale.uv.ro/?p=162#comments</comments>
		<pubDate>Wed, 06 Apr 2011 12:29:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Servers]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[administrare]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[controler]]></category>
		<category><![CDATA[dialup]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domen]]></category>
		<category><![CDATA[domeniu]]></category>
		<category><![CDATA[hosturi]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[isdn]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[name]]></category>
		<category><![CDATA[named]]></category>
		<category><![CDATA[nume]]></category>
		<category><![CDATA[rezolutie]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[servere]]></category>
		<category><![CDATA[slip]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://resurse-educationale.uv.ro/?p=162</guid>
		<description><![CDATA[DNS HOWTO Nicolai Langfeldt (janl@linpro.no), Jamie Norrish and others Version 3.1, 2001-01-18 Traducerea: Victor Plugaru(vuk@go.ro). Cu scuzele de rigoare pentru eventualele greseli si/sau inadvertente. CUM SA administrati rapid un DNS. ______________________________________________________________________ Cuprins 1. Preambul 1.1 Chestiuni legale 1.2 Credit si &#8230; <a href="http://resurse-educationale.uv.ro/?p=162">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>DNS HOWTO<br />
Nicolai Langfeldt (janl@linpro.no), Jamie Norrish and others<br />
Version 3.1, 2001-01-18<br />
Traducerea: Victor Plugaru(vuk@go.ro). Cu scuzele de rigoare<br />
pentru eventualele greseli si/sau inadvertente.</p>
<p>CUM SA administrati rapid un DNS.<br />
______________________________________________________________________</p>
<p>Cuprins</p>
<p>1. Preambul</p>
<p>1.1 Chestiuni legale<br />
1.2 Credit si cereri de suport.<br />
1.3 Dedicatie</p>
<p>2. Introducere.</p>
<p>3. Caching name server.</p>
<p>3.1 Pornirea lui named<br />
3.2 Resolvere<br />
3.3 Felicitari</p>
<p>4. Forwarding</p>
<p>5. Un domeniu simplu</p>
<p>5.1 Intai teorie seaca<br />
5.2 Propriul nostru domeniu<br />
5.3 Zona reverse<br />
5.4 Cuvinte de atentionare<br />
5.5 De ce nu functioneaza interogarile inverse.<br />
5.5.1 Zona reverse nu este investita.<br />
5.5.2 Aveti un subnet fara clase<br />
5.6 Servere slave (sclav)</p>
<p>6. Optiuni de securitate fundamentale.</p>
<p>6.1 Restrictionarea transferurilor pe zone<br />
6.2 Protectia in situatii de spoofing<br />
6.3 Rularea lui named ca non-root</p>
<p>7. Un exemplu real de domeniu</p>
<p>7.1 /etc/named.conf (sau /var/named/named.conf)<br />
7.2 /var/named/root.hints<br />
7.3 /var/named/zone/127.0.0<br />
7.4 /var/named/zone/land-5.com<br />
7.5 /var/named/zone/206.6.177</p>
<p>8. Intretinere</p>
<p>9. Conversia de la versiunea 4 la versiunea 8</p>
<p>10. Intrebari si raspunsuri</p>
<p>11. Cum sa deveniti un administrator DNS la scara mare.</p>
<p><span id="more-162"></span></p>
<p>______________________________________________________________________</p>
<p>1. Preambul</p>
<p>Cuvinte cheie: DNS, BIND, BIND 4, BIND 8, named, dialup, ppp, slip, ISDN,<br />
internet, domeniu, nume, rezolutie, hosturi, caching.</p>
<p>Acest document este parte din Proiectul Documentatiei Linux (Linux<br />
Documentation Project)</p>
<p>1.1. Chestiuni legale</p>
<p>(C)opyright 1995-2001 Nicolai Langfeldt, Jamie Norrish &amp; Co.<br />
Nu distribuiti modificand fara copyright, distribuiti liberi dar<br />
pastrati mesajul de copyright.</p>
<p>1.2. Credite si cereri de suport</p>
<p>Vreau sa multumesc lui Arnt Gulbrandsen caruia i-am cauzat suferinta<br />
cu aceste tiparituri si care mi-a oferit multe sugestii utile. Vreau<br />
sa multumesc de asemeni numeroselor persoane care mi-au trimis sugestii si<br />
note prin e-mail.</p>
<p>Acesta nu va fi niciodata un document final; va rog sa imi trimiteti<br />
e-mailuri despre problemele si succesele dumneavoastra. Puteti da o mana<br />
de ajutor la imbunatatirea acestui HOWTO. Asa ca va rog sa trimiteti<br />
comentarii si/sau sugestii la janl@linpro.no. Sau cumparati cartea mea<br />
despre DNS. Vedeti bibliografia despre informatii in legatura cu aceasta<br />
chestiune. Daca trimiteti un e-mail si asteptati raspunsuri, dati dovada de<br />
curtoazie si asigurati-va ca adresa de reply este corecta si functioneaza.<br />
Tot astfel, va rog sa cititi sectiunea &#8220;qanda&#8221; inainte de a-mi trimite<br />
e-mail. Inca un lucru, inteleg doar limbile norvegiana si engleza.</p>
<p>Acesta este un HOWTO (CUM_SA). L-am intretinut ca parte a LDP din 1995. Am<br />
scris, in timpul anului 2000 o carte pe aceiasi tema. Vreau sa spun ca,<br />
desi acest HOWTO este asemanator cartii din multe puncte de vedere, nu<br />
este o versiune redusa astfel incat sa promovez vinderea cartii. Veti gasi<br />
cartea in bibliografie in finalul acestui HOWTO. Cititorii acestui HOWTO<br />
m-au ajutat sa inteleg ceea ce e dificil de inteles in legatura cu<br />
DNS. Aceasta m-a ajutat la carte, iar cartea m-a ajutat de asemeni<br />
sa inteleg la ce ar servi acest HOWTO. Acest HOWTO a completat cartea.<br />
Cartea a completat versiunea 3 a acestui HOWTO. Multumirile mele<br />
editorului cartii, care si-a incercat norocul cu mine <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>1.3. Dedicatie</p>
<p>Acest HOWTO este dedicat lui Anne Line Norheim Langfeldt, desi dansa nu il<br />
va citi niciodata pentru ca nu e genul.</p>
<p>1. Introducere</p>
<p>Ce este si ce nu este aceasta.</p>
<p>DNS este Domain Name System (Sistemul Domeniului de Nume). DNS converteste<br />
numele masinilor (de calcul) in adrese IP pe care toate masinile de pe<br />
Internet le au.  Translateaza (sau &#8220;mapeaza&#8221; cum se zice in jargon) din<br />
nume in adrese si din adrese in nume, precum si alte cateva lucruri. Acest<br />
HOWTO documenteaza definirea acestor mapari folosind sisteme UNIX, cu<br />
cateva lucruri specifice Linux-ului.</p>
<p>O mapare este o simpla asociere intre doua lucruri, in acest caz un nume<br />
de masina, ca ftp.linux.org, si IP-ul masinii (sau adresa)<br />
199.249.150.4. DNS-ul contine de asemeni mapari si in alt sens, din<br />
IP catre numele masinii; aceasta se numeste &#8220;mapare inversa&#8221;</p>
<p>DNS este, pentru neinitiati (dumneavoastra <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , una dintre<br />
cele mai obscure domenii din administrarea retelelor. Din fericire, DNS nu<br />
este chiar asa de greu. Acest HOWTO va incerca sa va clarifice<br />
cateva lucruri. Descrie cum sa setati un server de nume DNS simplu,<br />
incepand doar cu un server cache si pana la a seta un sever DNS primar<br />
pentru domeniu. Pentru setari mai complexe consultati sectiunea &#8220;qanda&#8221;<br />
din acest document. Daca nu este descris acolo (ceea ce va trebuie),<br />
va trebui sa consultati documentatie &#8220;adevarata&#8221;. Voi reveni si voi arata<br />
in ce consta aceasta documentatie &#8220;adevarata&#8221; in &#8220;ultimul capitol&#8221;.</p>
<p>Inainte de a incepe ar trebui sa va configurati masina astfel incat sa<br />
puteti folosi telnet de la si catre aceasta masina si sa puteti face tot<br />
felul de conexiuni in retea, si in special sa puteti da telnet 127.0.0.1<br />
si sa reusiti sa intrati pe propria masina (ar trebui sa incercati<br />
asta chiar acum!). Va trebuie de asemeni fisierele /etc/nsswitch.conf,<br />
/etc/resolv.conf si /etc/hosts corecte, ca punct de plecare pentru ca nu<br />
le voi explica functiile aici. Daca nu aveti toate acestea configurate si<br />
in stare de functionare, Networking-HOWTO si/sau Networking-Overview-HOWTO<br />
explica cum sa le configurati. CItiti-le.</p>
<p>Cand spun &#8220;masina dumneavoastra&#8221; inteleg masina pe care vreti<br />
sa configurati DNS, nu orice alta masina pe care o aveti si care ar fi<br />
implicata in efortul de a pune la punct reteaua.</p>
<p>Presupun ca nu sunteti in spatele nici unui fel de firewall care blocheaza<br />
interogarile de nume. Daca sunteti in atare situatie, vedeti sectiunea<br />
&#8220;quanda&#8221;.</p>
<p>Serverul de nume in UNIX este indeplinit de un program numit named. Acesta<br />
este o parte a pachetului &#8220;BIND&#8221; coordonat de The Internet<br />
Software Cosortium. Named este inclus in majoritatea distributiilor de Linux<br />
si este de obicei instalat in /usr/sbin/named, de obicei dintr-un pachet<br />
BIND.</p>
<p>Daca aveti un named probabil ca il puteti si folosi. Daca nu aveti unul,<br />
puteti lua distributia binara de de pe un site ftp Linux, sau luati ultima<br />
si cea mai &#8220;tare&#8221; sursa de la &lt;ftp://ftp.isc.org/isc/bind/src/&gt;. Acest<br />
HOWTO se refera la BIND versiunea 8. Versiunea veche a acestui document,<br />
despre BIND 4 este inca disponibila la &lt;http://www.math.uio.no/~janl/DNS/&gt;.<br />
in caz ca folositi BIND 4. Daca paginile man ale named (chiar la sfarsit,<br />
in sectiunea FILES) fac referire la named.conf, aveti BIND 8. Daca fac<br />
referire la named.boot, aveti BIND 4. Daca aveti BIND 4<br />
si sunteti constient de problemele de securitate, ar fi bine sa faceti<br />
uprade la BIND 8. Acum.</p>
<p>DNS este o baza de date distribuita in retea. Aveti grija ce puneti in ea.<br />
Daca puneti &#8220;balarii&#8221; in ea, dumneavoastra si altii, tot &#8220;balarii&#8221;<br />
veti avea. Mentineti DNS-ul restrans si consistent si veti avea parte de<br />
servicii de buna calitate de la el. Invatati sa il folositi, administrati,<br />
depanati si veti fi inca un bun administrator, evitand ingenuncherea<br />
Internetului din cauza prostului management.</p>
<p>Indicatie: faceti copii de rezerva a tuturor fisierelor pe care va indic<br />
sa le modificati, daca le aveti deja, asa incat daca trecand<br />
prin acestea (configurari, modificari) nimic nu mai merge, sa puteti<br />
reveni la vechea dumneavoastra stare de functionare.</p>
<p>3. Caching name server</p>
<p>Un prim model de configurarie DNS, foarte util pentru dialup, modem<br />
de cablu si utilizatori ADSL.</p>
<p>In distributiile Redhat si inrudite puteti obtine aceleasi rezultate<br />
practice ca in prima sectiune a acestui HOWTO, instaland<br />
pachetul BIND, utilitarele bind si caching-nameserver-ul. Daca<br />
folositi Debian, instalati bind si bind-doc. Bine inteles ca<br />
doar instaland aceste pachete nu veti invata atat de mult ca si cand ati<br />
citi acest HOWTO. Asa ca instalati pachetele si verificati fisierele<br />
instalate.</p>
<p>Un server cache de nume va gasi raspunsuri la interogarile de nume si va<br />
memora aceste raspunsuri pentru data viitoare cand veti<br />
avea nevoie. Aceasta va scurta semnificativ timpul de asteptare urmatoarea<br />
data, in special daca aveti o conexiune lenta.</p>
<p>In primul rand aveti nevoie de un fisier numit /etc/named.conf<br />
(Debian: /etc/bind/named.conf). Acesta este citit cand named porneste.<br />
Deocamdata ar trebui sa contina pur si simplu:</p>
<p>______________________________________________________________________<br />
// Config file for caching only name server</p>
<p>options {<br />
directory &#8220;/var/named&#8221;;</p>
<p>// Uncommenting this might help if you have to go through a<br />
// firewall and things are not working out.  But you probably<br />
// need to talk to your firewall admin.</p>
<p>// query-source port 53;<br />
};</p>
<p>zone &#8220;.&#8221; {<br />
type hint;<br />
file &#8220;root.hints&#8221;;<br />
};</p>
<p>zone &#8220;0.0.127.in-addr.arpa&#8221; {<br />
type master;<br />
file &#8220;pz/127.0.0&#8243;;<br />
};<br />
______________________________________________________________________</p>
<p>Pachetele distributiilor Linux pot folosi diferite nume de fisiere<br />
pentru fiecare tip de fisier mentionat aici, cu toate acestea, continutul<br />
va fi identic.</p>
<p>Linia &#8220;directory&#8221; ii spune lui named unde sa caute fisiere. Toate fisierele<br />
named subsecvente vor fi relative la aceasta. pz este un director sub<br />
/var/named, de ex. /var/named/pz. /var/named este directorul corect<br />
potrivit Standardului de Fisiere Linux.</p>
<p>Fisierul /var/named/root.hints ar trebui sa contina urmatoarele: (daca<br />
execuati cut si paste dintr-o versiune electronica a acestui document,<br />
aveti in vedere ca nu trebuie sa existe spatii de inceput in acest fisier,<br />
de exemplu toate liniile trebuie sa inceapa cu un caracter<br />
non-blank. Anumite programe de procesare de text vor insera spatii<br />
la inceputul liniilor, cauzand confuzie. In acest caz va rog<br />
sa indepartati spatiile goale.)</p>
<p>______________________________________________________________________<br />
;<br />
; There might be opening comments here if you already have this file.<br />
; If not don&#8217;t worry.<br />
;<br />
.                       6D IN NS        M.ROOT-SERVERS.NET.<br />
.                       6D IN NS        I.ROOT-SERVERS.NET.<br />
.                       6D IN NS        E.ROOT-SERVERS.NET.<br />
.                       6D IN NS        D.ROOT-SERVERS.NET.<br />
.                       6D IN NS        A.ROOT-SERVERS.NET.<br />
.                       6D IN NS        H.ROOT-SERVERS.NET.<br />
.                       6D IN NS        C.ROOT-SERVERS.NET.<br />
.                       6D IN NS        G.ROOT-SERVERS.NET.<br />
.                       6D IN NS        F.ROOT-SERVERS.NET.<br />
.                       6D IN NS        B.ROOT-SERVERS.NET.<br />
.                       6D IN NS        J.ROOT-SERVERS.NET.<br />
.                       6D IN NS        K.ROOT-SERVERS.NET.<br />
.                       6D IN NS        L.ROOT-SERVERS.NET.<br />
;<br />
M.ROOT-SERVERS.NET.     6D IN A         202.12.27.33<br />
I.ROOT-SERVERS.NET.     6D IN A         192.36.148.17<br />
E.ROOT-SERVERS.NET.     6D IN A         192.203.230.10<br />
D.ROOT-SERVERS.NET.     6D IN A         128.8.10.90<br />
A.ROOT-SERVERS.NET.     6D IN A         198.41.0.4<br />
H.ROOT-SERVERS.NET.     6D IN A         128.63.2.53<br />
C.ROOT-SERVERS.NET.     6D IN A         192.33.4.12<br />
G.ROOT-SERVERS.NET.     6D IN A         192.112.36.4<br />
F.ROOT-SERVERS.NET.     6D IN A         192.5.5.241<br />
B.ROOT-SERVERS.NET.     6D IN A         128.9.0.107<br />
J.ROOT-SERVERS.NET.     6D IN A         198.41.0.10<br />
K.ROOT-SERVERS.NET.     6D IN A         193.0.14.129<br />
L.ROOT-SERVERS.NET.     6D IN A         198.32.64.12<br />
______________________________________________________________________</p>
<p>Fisierul descrie serverele de nume &#8220;radacina&#8221; din lume. Acestea se schimba<br />
in timp si trebuie mentinute permanent. Vedeti sectiunea &#8220;intretinere&#8221;<br />
despre cum sa mentineti la curent acest fisier.</p>
<p>Urmatoarea sectiune in named.conf este ultima zona. II voi explica<br />
utilizarea intr-un capitol ulterior. Deocamdata creati din aceasta un<br />
fisier numit 127.0.0 in subdirectorul pz (din nou, indepartati<br />
spatiile goale daca executati cut si paste).</p>
<p>______________________________________________________________________<br />
$TTL 3D<br />
@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (<br />
1       ; Serial<br />
8H      ; Refresh<br />
2H      ; Retry<br />
4W      ; Expire<br />
1D)     ; Minimum TTL<br />
NS      ns.linux.bogus.<br />
1                       PTR     localhost.<br />
______________________________________________________________________</p>
<p>Pe urma, aveti nevoie de un fisier /etc/resolv.conf care sa arate cam asa:<br />
(indepartati spatiile!)</p>
<p>______________________________________________________________________<br />
search subdomain.your-domain.edu your-domain.edu<br />
nameserver 127.0.0.1<br />
______________________________________________________________________</p>
<p>Linia &#8220;search&#8221; specifica ce domenii ar trebui cautate pentru un nume de<br />
host la care vreti sa va conectati. Linia &#8220;nameserver&#8221; indica serverul<br />
dumneavoastra de nume, in acest caz propria dumneavoastra masina,<br />
daca acolo ruleaza named (127.0.0.1 e perfect, nu conteaza ca mai aveti si<br />
alta adresa IP). Daca doriti sa apara mai multe servere de nume, puneti<br />
cate o linie &#8220;nameserver&#8221; pentru fiecare. (Nota: named niciodata<br />
nu citeste acest fisier, ci rezolverul, programul care il utilizeaza<br />
pe named. Nota2 :in unele fisiere resolv.conf gasiti o linie &#8220;domain&#8221;. E<br />
in regula, dar nu folositi si &#8220;search&#8221; si &#8220;domain&#8221;, doar una dintre ele va<br />
merge).</p>
<p>Pentru a ilustra ce face acest fisier: daca un client incearca<br />
sa caute (hostul) &#8220;foo&#8221;, atunci foo.subdomeniu.domeniul-tau.edu este<br />
incercat primul, apoi foo.domeniul-tau.edu si apoi foo. Nu e de preferat<br />
sa puneti prea multe domenii in linia &#8220;search&#8221; pentru ca va dura mult sa<br />
le interogheze pe toate.</p>
<p>Exemplul de mai sus presupune ca apartineti domeniului<br />
subdomeniu.domeniul-tau.edu; atunci masina dumneavoastra este numita<br />
probabil masina-ta.subdomeniu.domeniul-tau.edu Linia &#8220;search&#8221; n-ar trebui<br />
sa contina TLD-ul dumneavoastra (Top Level Domain &#8220;edu&#8221;- Domeniul de Nivel<br />
Inalt) in acest caz. Daca aveti nevoie sa va conectati<br />
la hosturi din alt domeniu, in mod frecvent, puteti adauga acel domeniu in<br />
linia &#8220;search&#8221; astfel: (indepartati spatiile!)</p>
<p>______________________________________________________________________<br />
search subdomain.your-domain.edu your-domain.edu other-domain.com<br />
______________________________________________________________________</p>
<p>si asa mai departe. Evident, trebuie sa puneti nume reale de domeniu<br />
in locul celor din exemplu. Importat: observati lipsa punctelor de<br />
la sfarsitul numelor de domeniu.</p>
<p>3.1 Pornirea lui named</p>
<p>Dupa toate acestea este timpul sa pornim named. Daca folositi o conexiune<br />
dialup, conectati-va intai. Dati comanda &#8220;ndc start&#8221; si apasati Enter,<br />
fara nici o optiune. Daca nu merge asa, incercati &#8220;/usr/sbin/ndc start&#8221;.<br />
Daca tot nu merge, vedeti sectiunea &#8220;qanda&#8221;. Daca observati in<br />
fisierul mesajelor syslog (de obicei /var/adm/messages sau<br />
/var/log/messages) in timp ce porniti named (incercati tail -f<br />
/var/log/messages), ar trebui sa vedeti ceva asemanator :</p>
<p>(liniile care se incheie in \ continua pe linia urmatoare)</p>
<p>Dec 15 23:53:29 localhost named[3768]: starting.  named 8.2.2-P7 \<br />
Fri Nov 10 04:50:23 EST 2000^Iprospector@porky.\<br />
devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_P7/\<br />
src/bin/named<br />
Dec 15 23:53:29 localhost named[3768]: hint zone &#8220;&#8221; (IN) loaded\<br />
(serial 0)<br />
Dec 15 23:53:29 localhost named[3768]:Zone &#8220;0.0.127.in-addr.arpa&#8221;\<br />
(file pz/127.0.0): No default TTL set using SOA\<br />
minimum instead<br />
Dec 15 23:53:29 localhost named[3768]: master zone\<br />
&#8220;0.0.127.in-addr.arpa&#8221; (IN) loaded (serial 1)<br />
Dec 15 23:53:29 localhost named[3768]:listening on [127.0.0.1].53 (lo)<br />
Dec 15 23:53:29 localhost named[3768]: listening on [10.0.0.129].53\<br />
(wvlan0)<br />
Dec 15 23:53:29 localhost named[3768]: Forwarding source address is\<br />
[0.0.0.0].1034<br />
Dec 15 23:53:29 localhost named[3769]: Ready to answer queries.</p>
<p>Daca sunt multe mesaje de eroare, trebuie sa fie o greseala<br />
pe undeva. Named va indica fisierul unde se afla greseala. Reveniti si<br />
verificati fisierul respectiv. Dati comanda &#8220;ndc restart&#8221; si ati<br />
rezolvat problema.</p>
<p>Acum puteti testa configurarea. In mod traditional, un program numit<br />
nslookup e folosit pentru aceasta. In mod curent, dig e recomandat.</p>
<p>$ dig -x 127.0.0.1</p>
<p>; &lt;&lt;&gt;&gt; DiG 8.2 &lt;&lt;&gt;&gt; -x<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 4<br />
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY:1, ADDITIONAL: 0<br />
;; QUERY SECTION:<br />
;;      1.0.0.127.in-addr.arpa, type = ANY, class = IN</p>
<p>;; ANSWER SECTION:<br />
1.0.0.127.in-addr.arpa.  1D IN PTR  localhost.</p>
<p>;; AUTHORITY SECTION:<br />
0.0.127.in-addr.arpa.   1D IN NS        ns.penguin.bv.</p>
<p>;; Total query time: 30 msec<br />
;; FROM: lookfar to SERVER: default &#8212; 127.0.0.1<br />
;; WHEN: Sat Dec 16 00:16:12 2000<br />
;; MSG SIZE  sent: 40  rcvd: 110</p>
<p>Daca ati obtinut aceasta, serviciul functioneaza. Speram. Daca treburile<br />
stau altfel, reveniti si verificati totul. De fiecare data cand moficati<br />
fisierul named.conf, trebuie sa reporniti named cu comanda ndc restart.</p>
<p>Acum puteti efectua o interogare. Incercati sa cautati o masina apropiata.<br />
pat.uio.no este apropiata de mine, la Universitatea din Oslo.</p>
<p>$ dig pat.uio.no</p>
<p>; &lt;&lt;&gt;&gt; DiG 8.2 &lt;&lt;&gt;&gt; pat.uio.no<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode:QUERY, status: NOERROR, id: 4<br />
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY:3, ADDITIONAL: 3<br />
;; QUERY SECTION:<br />
;;      pat.uio.no, type = A, class = IN</p>
<p>;; ANSWER SECTION:<br />
pat.uio.no.             1D IN A		 129.240.130.16</p>
<p>;; AUTHORITY SECTION:<br />
uio.no.                 1D IN NS        nissen.uio.no.<br />
uio.no.                 1D IN NS        ifi.uio.no.<br />
uio.no.                 1D IN NS        nn.uninett.no.</p>
<p>;; ADDITIONAL SECTION:<br />
nissen.uio.no.          1D IN A         129.240.2.3<br />
ifi.uio.no.             1H IN A         129.240.64.2<br />
nn.uninett.no.          1D IN A         158.38.0.181</p>
<p>;; Total query time: 112 msec<br />
;; FROM: lookfar to SERVER: default &#8212; 127.0.0.1<br />
;; WHEN: Sat Dec 16 00:23:07 2000<br />
;; MSG SIZE  sent: 28  rcvd: 162</p>
<p>De data aceasta dig a cerut lui named sa caute masina pat.uio.no.<br />
A contactat una dintre masinile server de nume indicate in fisierul<br />
root.hints si a cerut calea de acolo. Poate dura putin pana obtine<br />
rezultatul, dupa cum va trebui sa caute in domeniile din /etc/resolv.conf.<br />
Observati &#8220;aa&#8221; in linia &#8220;flags:&#8221;. Inseamna ca raspunsul este<br />
autoritativ, venit proaspat de la un server autoritativ. Voi explica<br />
ce inseamna &#8220;autoritativ&#8221; mai tarziu.</p>
<p>Daca veti face aceiasi interogare din nou, veti obtine aceasta:</p>
<p>$ dig pat.uio.no</p>
<p>; &lt;&lt;&gt;&gt; DiG 8.2 &lt;&lt;&gt;&gt; pat.uio.no<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status:NOERROR, id: 4<br />
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3<br />
;; QUERY SECTION:<br />
;;      pat.uio.no, type = A, class = IN</p>
<p>;; ANSWER SECTION:<br />
pat.uio.no.             23h59m58s IN A  129.240.130.16</p>
<p>;; AUTHORITY SECTION:<br />
UIO.NO.                 23h59m58s IN NS  nissen.UIO.NO.<br />
UIO.NO.                 23h59m58s IN NS  ifi.UIO.NO.<br />
UIO.NO.                 23h59m58s IN NS  nn.uninett.NO.</p>
<p>;; ADDITIONAL SECTION:<br />
nissen.UIO.NO.          23h59m58s   IN A  129.240.2.3<br />
ifi.UIO.NO.             1d23h59m58s IN A  129.240.64.2<br />
nn.uninett.NO.          1d23h59m58s IN A  158.38.0.181</p>
<p>;; Total query time: 4 msec<br />
;; FROM: lookfar to SERVER: default &#8212; 127.0.0.1<br />
;; WHEN: Sat Dec 16 00:23:09 2000<br />
;; MSG SIZE  sent: 28  rcvd: 162</p>
<p>Observati lipsa flagului &#8220;aa&#8221; din acest rezultat. Inseamna ca named<br />
nu a mai iesit in retea pentru a afla acest raspuns, daca informatia se<br />
afla in cache acum. Dar informatia din cache poate fi veche (stale). Asa<br />
ca sunteti informati despre aceasta (foarte subtil)<br />
prin lipsa lui &#8220;aa&#8221;. Dar oricum, acum stiti ca serviciul cache functioneaza.</p>
<p>3.2. Rezolvere</p>
<p>Toate sistemele de operare care implementeaza standardul C API fac uz de<br />
apelul gethostbyname si gethostbyaddr. Acestea pot obtine informatii din<br />
diverse surse. Din ce surse se alimenteaza, este indicat in fisierul<br />
/etc/nsswitch.conf in Linux (si alte UNIX-uri). Acesta este un fisier lung<br />
care specifica din ce fisier sau baza de date se vor obtine diferitele<br />
tipuri de date. De obicei contine informatii folositoare la inceput, pe<br />
care ar trebui sa le cititi. Dupa aceasta, cautati linia incapand cu<br />
&#8220;hosts:&#8221;; va trebui sa aveti:</p>
<p>______________________________________________________________________<br />
hosts:      files dns<br />
______________________________________________________________________</p>
<p>(va aduceti aminte de spatiile de inceput, nu-i asa? Nu le voi mai mentiona)</p>
<p>Daca nu exista nici o linie cu &#8220;hosts:&#8221;, puneti una ca mai<br />
sus. Aceasta indica cum ca programele ar trebui sa examineze<br />
fisierul /etc/hosts intai, apoi sa verifice DNS-ul conform /etc/resolv.conf.</p>
<p>3.3. Felicitari</p>
<p>Acum deja stiti cum sa configurati un named cu caching. Luati o bere, un<br />
lapte acru si sarbatoriti.</p>
<p>4. Forwarding</p>
<p>In retele mari, bine organizate, academice sau ISP (Internet Service<br />
Provider &#8211; Furnizor de Servicii Internet), veti constata uneori ca<br />
administratorii de retea au pus la punct o ierarhie de servere DNS<br />
pentru forwarding (inaintare- transfer), care usureaza<br />
incarcarea retelei interiorare si exterioare. Nu e usor de stiut daca va<br />
aflati intr-o asemenea retea sau nu. Oricum, nu este important si,<br />
folosind serverul DNS al furnizorului dumneavoastra din retea ca &#8220;forwarder&#8221;<br />
puteti obtine raspunsurile mai rapid si cu o incarcare mai mica a retelei.<br />
Daca folositi un modem, aceasta poate fi chiar un castig. De<br />
dragul acestui exemplu sa presupunem ca furnizorul are doua servere de<br />
nume pe care vrea sa le folositi cu IP-urile 10.0.0.1 si 10.1.0.1. Atunci,<br />
in named.conf la dumneavoastra, in interiorul sectiunii &#8220;options&#8221;,<br />
inserati aceste linii:</p>
<p>______________________________________________________________________<br />
forward first;<br />
forwarders {<br />
10.0.0.1;<br />
10.1.0.1;<br />
};<br />
______________________________________________________________________</p>
<p>Exista de asemeni o smecherie draguta pentru masinile dialup care folosesc<br />
&#8220;forwardere&#8221;. Este descrisa in sectiunea &#8220;qanda&#8221;.</p>
<p>Restartati serverul de nume si testati-l cu dig. Ar trebui sa mearga perfect.</p>
<p>5. Un domeniu simplu</p>
<p>Cum configurati propriul domeniu.</p>
<p>5.1. Intai teorie seaca</p>
<p>In primul rand: ati citit tot pana aici, nu? Trebuie.</p>
<p>Inainte de a porni intr-adevar aceasta sectiune, va voi expune ceva<br />
teorie si un exemplu despre cum functioneaza DNS. Si o veti citi pentru ca<br />
va este necesara. Daca nu doriti, ar trebui macar sa o parcurgeti rapid.<br />
Opriti-va din cititul printre randuri cand ajungeti la ceea ce ar trebui<br />
sa aveti in fisierul named.conf.</p>
<p>DNS este un sistem ierarhic, arborescent. Varful este notat &#8220;.&#8221; si<br />
este denumit &#8220;root&#8221;, cum este uzual pentru structurile de<br />
date arborescente. Dedesubt exista un numar de Top Level Domain &#8211; Domenii<br />
de Nivel Inalt &#8211; TLD-uri. Cele mai cunoscute sunt .COM .ORG .EDU .NET, dar<br />
sunt mai multe. Ca si la un arbore, exista o radacina care se imparte pe<br />
ramuri. Daca aveti ceva cunostinte despre computere, veti recunoaste DNS<br />
ca un arbore de cautare si veti fi capabili sa gasiti nodurile nodurile<br />
mici (leaf nodes) si marginile (edges). Punctele sunt noduri, marginile<br />
sunt in nume. Cand cautati o masina, interogarea porneste recursiv<br />
in ierarhie, plecand de la radacina (root). Daca doriti sa aflati adresa<br />
pentru prep.ai.mit.edu, serverul dumneavoastra de nume va incepe<br />
sa caute undeva. Incepe prin a cauta in cache. Daca stie raspunsul,<br />
avandu-l in cache mai dinainte, va raspunde imediat, asa cum am vazut in<br />
ultima sectiune. Daca nu stie, va indeparta partea din nume incepand de la<br />
stanga, verificand daca stie ceva despre ai.mit.edu, apoi mit.edu., apoi<br />
edu., si apoi daca nu cumva &#8220;.&#8221; are cunostinta, pentru ca asa s-a specificat in<br />
fisierul hints (indicii). Apoi va intreba un server &#8220;.&#8221; (root)<br />
despre prep.ai.mit.edu. Acest server &#8220;.&#8221; nu va sti raspunsul dar<br />
va ajuta serverul dumneavoastra in calea sa, dandu-i o referinta,<br />
spunandu-i unde sa mai caute. Aceste referinte vor conduce eventual<br />
serverul dumneavoastra catre un server de nume care cunoaste<br />
raspunsul. Voi ilustra aceasta acum, &#8220;+norec&#8221; inseamna ca &#8220;dig&#8221; aplica<br />
interogari ne-recursive, asa ca va trebui sa aplicam chiar noi<br />
recursivitatea. Cealalta optiune ar fi sa reducem cantitatea de date<br />
pe care &#8220;dig&#8221; o produce asa incat sa nu avem de-a face cu prea multe pagini:</p>
<p>$ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu.<br />
;; res options: init defnam dnsrch<br />
;; got answer:<br />
; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 13<br />
;; AUTHORITY SECTION:<br />
.                       5d23h48m47s IN NS  I.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  E.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  D.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  A.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  H.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  C.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  G.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  F.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  B.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  J.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  K.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  L.ROOT-SERVERS.NET.<br />
.                       5d23h48m47s IN NS  M.ROOT-SERVERS.NET.</p>
<p>;; ADDITIONAL SECTION:<br />
I.ROOT-SERVERS.NET.     6d23h48m47s IN A  192.36.148.17<br />
E.ROOT-SERVERS.NET.     6d23h48m47s IN A  192.203.230.10<br />
D.ROOT-SERVERS.NET.     6d23h48m47s IN A  128.8.10.90<br />
A.ROOT-SERVERS.NET.     6d23h48m47s IN A  198.41.0.4<br />
H.ROOT-SERVERS.NET.     6d23h48m47s IN A  128.63.2.53<br />
C.ROOT-SERVERS.NET.     6d23h48m47s IN A  192.33.4.12<br />
G.ROOT-SERVERS.NET.     6d23h48m47s IN A  192.112.36.4<br />
F.ROOT-SERVERS.NET.     6d23h48m47s IN A  192.5.5.241<br />
B.ROOT-SERVERS.NET.     6d23h48m47s IN A  128.9.0.107<br />
J.ROOT-SERVERS.NET.     6d23h48m47s IN A  198.41.0.10<br />
K.ROOT-SERVERS.NET.     6d23h48m47s IN A  193.0.14.129<br />
L.ROOT-SERVERS.NET.     6d23h48m47s IN A  198.32.64.12<br />
M.ROOT-SERVERS.NET.     6d23h48m47s IN A  202.12.27.33</p>
<p>Aceasta este referinta. Ne ofera doar o &#8220;sectiune autoritativa&#8221;<br />
nu o &#8220;sectiune de raspuns&#8221;. Propriul nostru nameserver ne raporteaza<br />
la alt nameserver. Alegeti la intamplare:</p>
<p>$ dig +norec +noH +noques +nostats +nocmd<br />
prep.ai.mit.edu. @H.ROOT-SERVE<br />
; (1 server found)<br />
;; res options: init defnam dnsrch<br />
;; got answer:<br />
; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 3<br />
;; AUTHORITY SECTION:<br />
MIT.EDU.                2D IN NS        BITSY.MIT.EDU.<br />
MIT.EDU.                2D IN NS        STRAWB.MIT.EDU.<br />
MIT.EDU.                2D IN NS        W20NS.MIT.EDU.</p>
<p>;; ADDITIONAL SECTION:<br />
BITSY.MIT.EDU.          2D IN A         18.72.0.3<br />
STRAWB.MIT.EDU.         2D IN A         18.71.0.151<br />
W20NS.MIT.EDU.          2D IN A         18.70.0.160</p>
<p>Se refera la serverele MIT.EDU odata. Din nou, alegeti unul la intamplare:</p>
<p>$ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. @bitsy.mit.edu<br />
; (1 server found)<br />
;; res options: init defnam dnsrch<br />
;; got answer:<br />
; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4<br />
;; ANSWER SECTION:<br />
prep.ai.mit.edu.        3h50m7s IN A    198.186.203.18</p>
<p>;; AUTHORITY SECTION:<br />
AI.MIT.EDU.             6H IN NS        FEDEX.AI.MIT.EDU.<br />
AI.MIT.EDU.             6H IN NS        LIFE.AI.MIT.EDU.<br />
AI.MIT.EDU.             6H IN NS        ALPHA-BITS.AI.MIT.EDU.<br />
AI.MIT.EDU.             6H IN NS        BEET-CHEX.AI.MIT.EDU.</p>
<p>;; ADDITIONAL SECTION:<br />
FEDEX.AI.MIT.EDU.       6H IN A         192.148.252.43<br />
LIFE.AI.MIT.EDU.        6H IN A         128.52.32.80<br />
ALPHA-BITS.AI.MIT.EDU.  6H IN A         128.52.32.5<br />
BEET-CHEX.AI.MIT.EDU.   6H IN A         128.52.32.22</p>
<p>DE data aceasta avem o &#8220;sectiune de raspuns&#8221; si un raspuns la interogarea<br />
noastra. &#8220;Sectiunea autoritativa&#8221; contine informatii despre ce servere<br />
sa interogam despre ai.mit.edu data viitoare. Asa ca le puteti interoga<br />
data viitoare direct despre ce nume va intereseaza din domeniul ai.mit.edu.</p>
<p>Deci pornind de la &#8220;.&#8221; am gasit serverele de nume pentru fiecare nivel<br />
in numele de domeniu, prin referinte. Daca ati folosit propriul<br />
server de nume in loc de alte servere,<br />
nameserverul dumneavoastra a stocat, bineinteles in cache, toata<br />
informatia pe care a gasit-o &#8220;sapand&#8221; (comanda &#8220;dig&#8221;) pentru aceasta, si<br />
nu va trebui sa cerceteze mult pentru raspunsuri, un timp.</p>
<p>In structura arborescenta analoga, fiecare &#8220;.&#8221; este un punct<br />
de ramificatie si fiecare parte intre &#8220;.&#8221; reprezinta<br />
numele ramurilor individuale in arbore. Unul urca pe arbore luand numele<br />
pe care il dorim (prep.ai.mit.edu) intreband root-ul &#8220;.&#8221; sau orice<br />
server parinte dinspre root  catre prep.ai.mit.edu despre care<br />
avem informatii in cache. Odata ce limitele cache-ului<br />
sunt atinse, rezolverul recursiv &#8220;iese&#8221; interogand serverele, obtinand<br />
referinte (margini &#8211; edges) in nume.</p>
<p>Un domeniu mai putin discutat, dar la fel de important<br />
este in-addr.arpa. Este de asemeni catalogat ca un domeniu &#8220;normal&#8221; ne<br />
permite sa obtinem numele host-ului cand ii cunoastem adresa. Un lucru<br />
important de retinut aici este ca adresele IP sunt scrise in<br />
ordine inversa in domeniul in-addr.arpa. Daca aveti adresa unei masini, de<br />
exemplu 192.148.52.43, named procedeaza ca in exemplul cu<br />
prep.ai.mit.edu:<br />
cauta serverele arpa. , cauta serverele in-addr.arpa, cauta serverele<br />
192.in-addr.arpa. , cauta serverele 148.192.in-addr.arpa., cauta serverele<br />
52.148.192.in-addr.arpa. , cauta inregistrarile necesare pentru<br />
43.52.148.192.in-addr.arpa. Inteligent, nu? (Spuneti &#8220;da&#8221;.) Reversia<br />
numerelor poate crea confuzie.</p>
<p>5.2. Propriul nostru domeniu</p>
<p>Acum sa definim propriul nostru domeniu. Vom face domeniul linux.bogus<br />
si vom defini masini in el. Voi folosi nume de domenii total aiurea,<br />
astfel incat sa ne asiguram ca nu deranjam pe nimeni Acolo Afara.</p>
<p>Inca un lucru inainte de a incepe. Nu toate caracterele sunt permise<br />
in numele de domenii. Suntem restrictionati la caracterele din alfabetul<br />
englez: a-z si numere 0-9 si caracterul &#8220;-&#8221;. Limitati-va la aceste<br />
caractere. Caracterele majuscule si minuscule sunt identice pentru DNS,<br />
deci pat.uio.no este identic cu Pat.Uio.No.</p>
<p>Am pornit deja aceasta parte cu o linie in named.conf:</p>
<p>______________________________________________________________________<br />
zone &#8220;0.0.127.in-addr.arpa&#8221; {<br />
type master;<br />
file &#8220;pz/127.0.0&#8243;;<br />
};<br />
______________________________________________________________________</p>
<p>Va rog sa observati lipsa lui &#8220;.&#8221; la sfarsitul numelor de domeniu in acest<br />
fisier. Acesta spune ca acum vom definit zona 0.0.127.in-addr.arpa, care<br />
este serverul master pentru ea si care este stocat in fisierul numit<br />
pz/127.0.0. Deja am configurat acest fisier, care arata:</p>
<p>______________________________________________________________________<br />
$TTL 3D<br />
@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (<br />
1       ; Serial<br />
8H      ; Refresh<br />
2H      ; Retry<br />
4W      ; Expire<br />
1D)     ; Minimum TTL<br />
NS      ns.linux.bogus.<br />
1                       PTR     localhost.<br />
______________________________________________________________________</p>
<p>Observati &#8220;.&#8221; la sfarsitul fiecarui nume de domeniu in acest fisier,<br />
in contrast cu named.conf de mai sus. Unii prefera sa inceapa fiecare zona<br />
cu directiva $ORIGIN, dar aceasta configurare este superflua. Originea<br />
(din care face parte ierarhia DNS) unei fisier zona este specificata<br />
in sectiunea &#8220;zone&#8221; din fisierul named.conf; in acest caz este<br />
0.0.127.in-addr.arpa.</p>
<p>Acest &#8220;fisier zona&#8221; contine 3 &#8220;inregistrari resursa&#8221; (RR): A SOA RR.  A NS<br />
RR si un PTR RR. SOA este prescurtarea pentru Start of Authority. &#8220;@&#8221;<br />
este notatia speciala semnificand originea, si cum coloana &#8220;domain&#8221; pentru<br />
acest fisier indica 0.0.127.in-addr.arpa, prima linie inseamna in realitate:</p>
<p>0.0.127.in-addr.arpa.   IN      SOA &#8230;</p>
<p>NS este name server RR. Nu este nici un &#8220;@&#8221; la inceputul acestei linii;<br />
este implicit pentru ca inceputul liniei anterioare incepe cu un &#8220;@&#8221;. Va<br />
scuteste de redactat. Astfel, linia NS poate fi scrisa deasemeni:</p>
<p>0.0.127.in-addr.arpa.   IN      NS      ns.linux.bogus</p>
<p>Aceasta spune DNS-ului ce masina este name-serverul pentru<br />
domeniul 0.0.127.in-addr.arpa, este ns.linux.bogus. &#8220;ns&#8221; este un nume<br />
uzitat pentru serverele de nume, dar ca si pentru serverele web care<br />
sunt numite www.ceva numele poate fi oricare.</p>
<p>Si, in final, inregistrarea PTR (Domain Name Pointer &#8211; Pointerul Numelui<br />
de Domeniu) arata ca hostul de la adresa 1 din<br />
subnetul 0.0.127.in-addr.arpa, de exemplu 127.0.0.1 este numit localhost.</p>
<p>Inregistrarea SOA este preambulul tuturor fisierelor de zona, si ar trebui<br />
sa fie exact cate una pentru fiecare fisier de zona. Aceasta descrie zona,<br />
de unde vine (o masina numita ns.linux.bogus), cine este responsabil<br />
pentru continutul ei (hostmaster@linux.bogus; ar trebui sa inserati adresa<br />
dumneavoastra de e-mail aici), ce versiune a fisierului zona este (serial:1)<br />
si alte lucruri care au de-a face cu cachingul si serverele DNS secundare.<br />
Pentru restul campurilor (refresh, retry, expire si minimum)<br />
folositi numerele utilizate in acest HOWTO si ar trebui sa fiti in<br />
siguranta. Inainte de SOA apare o linie esentiala, linia $TTL 3D. Puneti<br />
in ea toate fisierele de zona.</p>
<p>Acum reporniti named (cu comanda ndc restart) si folositi &#8220;dig&#8221; pentru a<br />
examina rezultatele. -x cere o interogare inversa:</p>
<p>$ dig -x 127.0.0.1</p>
<p>; &lt;&lt;&gt;&gt; DiG 8.2 &lt;&lt;&gt;&gt; -x<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 4<br />
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0<br />
;; QUERY SECTION:<br />
;;      1.0.0.127.in-addr.arpa, type = ANY, class = IN</p>
<p>;; ANSWER SECTION:<br />
1.0.0.127.in-addr.arpa.  1D IN PTR  localhost.</p>
<p>;; AUTHORITY SECTION:<br />
0.0.127.in-addr.arpa.   1D IN NS        ns.penguin.bv.</p>
<p>;; Total query time: 5 msec<br />
;; FROM: lookfar to SERVER: default &#8212; 127.0.0.1<br />
;; WHEN: Sat Dec 16 01:13:48 2000<br />
;; MSG SIZE  sent: 40  rcvd: 110</p>
<p>Deci se descurca sa obtina localhostul din 127.0.0.1, e OK. Acum, pentru<br />
scopul nostru principal, inserati o noua sectiune zona (&#8220;zone&#8221;) in<br />
named.conf:</p>
<p>______________________________________________________________________<br />
zone &#8220;linux.bogus&#8221; {<br />
notify no;<br />
type master;<br />
file &#8220;pz/linux.bogus&#8221;;<br />
};<br />
______________________________________________________________________</p>
<p>Observati din nou lipsa &#8220;.&#8221; din numele de domeniu din fisierul named.conf.<br />
In fisierul zona linux.bogus vom pune niste date total aiurea.</p>
<p>______________________________________________________________________<br />
;<br />
; Zone file for linux.bogus<br />
;<br />
; The full zone file<br />
;<br />
$TTL 3D<br />
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (<br />
199802151       ; serial, todays date + todays serial<br />
8H              ; refresh, seconds<br />
2H              ; retry, seconds<br />
4W              ; expire, seconds<br />
1D )            ; minimum, seconds<br />
;<br />
NS      ns              ; Inet Address of name server<br />
MX      10 mail.linux.bogus     ; Primary Mail Exchanger<br />
MX      20 mail.friend.bogus.   ; Secondary Mail Exchanger<br />
;<br />
localhost       A       127.0.0.1<br />
ns              A       192.168.196.2<br />
mail            A       192.168.196.4<br />
______________________________________________________________________</p>
<p>Doua lucruri trebuie observate in legatura cu inregistrarea SOA:<br />
ns.linux.bogus trebuie sa fie o masina cu inregistrare &#8220;A&#8221;. Nu este in<br />
regula sa avem o inregistrarea CNAME pentru masina mentionata in<br />
inregistrarea SOA. Numele ei nu este obligatoriu sa fie &#8220;ns&#8221;, poate<br />
fi orice nume &#8220;legal&#8221;, acceptabil, de host. Apoi, hostmaster.linux.bogus<br />
trebuie citit ca hostmaster@linux.bogus. Acesta ar trebui sa fie un mail<br />
alias sau un mailbox (cutie postala) unde persoanele care intretin DNS-ul<br />
ar trebui sa citeasca frecvent mailul. Orice mail privind domeniul va fi<br />
trimis la adresa listata aici. Numele nu e necesar<br />
sa fie &#8220;hostmaster&#8221;, paote fi adresa dumneavoastra normala<br />
de e-mail, dar adresa de e-mail &#8220;hostmaster&#8221; ar trebui sa functioneze<br />
la fel de bine.</p>
<p>Exista un tip nou &#8220;RR&#8221; in acest fisier, RR-ul &#8220;MX&#8221;-ului sau<br />
Mail Exchanger-ului. Acesta indica sistemului de e-mail unde<br />
sa trimita mailul adresat cuiva@linux.bogus, dupa nume<br />
mail.linux.bogus sau mail.friend.bogus. Numerele din fata fiecarei<br />
masini este prioritatea RR-ului MailExchangerului. RR-ul<br />
cu cel mai mic numar (10) este unde mailul ar trebui sa fie trimis daca<br />
este posibil. Daca acesta rateaza, mailul va fi trimis urmatorului<br />
cu numar mai mare, un manager de e-mail secundar (mail handler),<br />
de exemplu mail.friend.bogus, care are prioritatea 20 aici.</p>
<p>Restartati named cu &#8220;ndc restart&#8221;. Examinati rezultatul cu &#8220;dig&#8221;:</p>
<p>$ dig any linux.bogus +pfmin<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 23499<br />
;; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 1<br />
;; QUERY SECTION:<br />
;;      linux.bogus, type = ANY, class = IN</p>
<p>;; ANSWER SECTION:<br />
linux.bogus.            3D IN MX        10 mail.linux.bogus.linux.bogus.<br />
linux.bogus.            3D IN MX        20 mail.friend.bogus.<br />
linux.bogus.            3D IN NS        ns.linux.bogus.<br />
linux.bogus.            3D IN SOA       ns.linux.bogus.hostmaster.linux<br />
199802151       ; serial<br />
8H              ; refresh<br />
2H              ; retry<br />
4W              ; expiry<br />
1D )            ; minimum</p>
<p>Examinand cu atentie rezultatele de mai sus, veti descoperi o hiba. Linia</p>
<p>linux.bogus.            3D IN MX		10 mail.linux.bogus.linux.bogus.</p>
<p>este total gresita. Ar trebui sa fie:</p>
<p>linux.bogus.            3D IN MX        10 mail.linux.bogus.</p>
<p>Am facut intentionat o greseala, ca sa puteti invata din ea <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Privind<br />
in fisierul zona, vom observa aceasta linie;</p>
<p>MX      10 mail.linux.bogus     ; Primary Mail Exchanger</p>
<p>Lipseste un punct. Sau are prea multe &#8220;linux.bogus&#8221;. Daca un nume de<br />
masina nu se termina cu punct intr-un fisier zona, originea este adaugata<br />
la sfarsitul lui, cauzand dublura linux.bogus.linux.bogus. Asa ca ori</p>
<p>______________________________________________________________________<br />
MX      10 mail.linux.bogus.    ; Primary Mail Exchanger<br />
______________________________________________________________________</p>
<p>ori</p>
<p>______________________________________________________________________<br />
MX      10 mail                 ; Primary Mail Exchanger<br />
______________________________________________________________________</p>
<p>este corect. Prefer ultima forma, e mai putin de scris.<br />
Sunt anumiti experti in BIND care dezaproba, si altii care aproba aceasta.<br />
Intr-un fisier zona, domeniul ar trebui sa fie ori scris si terminat<br />
in &#8220;.&#8221; ori ne inclus deloc, caz in care ramane implicita originea.</p>
<p>Trebuie sa va stresez cu ideea ca in fisierul named.conf nu trebuie sa fie<br />
semne &#8220;.&#8221; dupa numele de domenii. N-aveti idee de cate ori<br />
prea multe sau prea putine &#8220;.&#8221; au pus in stare de confuzie utilizatorii.</p>
<p>Deci, ideea mea aici este noul fisier zona , cu cateva informatii in plus:</p>
<p>______________________________________________________________________<br />
;<br />
; Zone file for linux.bogus<br />
;<br />
; The full zone file<br />
;<br />
$TTL 3D<br />
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (<br />
199802151       ; serial, todays date + todays serial<br />
8H              ; refresh, seconds<br />
2H              ; retry, seconds<br />
4W              ; expire, seconds<br />
1D )            ; minimum, seconds<br />
;<br />
TXT     &#8220;Linux.Bogus, your DNS consultants&#8221;<br />
NS      ns              ; Inet Address of name server<br />
NS      ns.friend.bogus.<br />
MX      10 mail         ; Primary Mail Exchanger<br />
MX      20 mail.friend.bogus. ; Secondary Mail Exchanger</p>
<p>localhost       A       127.0.0.1</p>
<p>gw              A       192.168.196.1<br />
HINFO   &#8220;Cisco&#8221; &#8220;IOS&#8221;<br />
TXT     &#8220;The router&#8221;</p>
<p>ns              A       192.168.196.2<br />
MX      10 mail<br />
MX      20 mail.friend.bogus.<br />
HINFO   &#8220;Pentium&#8221; &#8220;Linux 2.0&#8243;<br />
www             CNAME   ns</p>
<p>donald          A       192.168.196.3<br />
MX      10 mail<br />
MX      20 mail.friend.bogus.<br />
HINFO   &#8220;i486&#8243;      &#8220;Linux 2.0&#8243;<br />
TXT     &#8220;DEK&#8221;</p>
<p>mail            A       192.168.196.4<br />
MX      10 mail<br />
MX      20 mail.friend.bogus.<br />
HINFO   &#8220;386sx&#8221; &#8220;Linux 1.2&#8243;</p>
<p>ftp             A       192.168.196.5<br />
MX      10 mail<br />
MX      20 mail.friend.bogus.<br />
HINFO   &#8220;P6&#8243; &#8220;Linux 2.1.86&#8243;<br />
______________________________________________________________________</p>
<p>Aici sunt cateva noi RR-uri: HINFO (Host INFOrmation) are doua parti; e un<br />
obicei bun sa le comentati pe fiecare. Prima parte este harware-ul si<br />
CPU-ul din respectiva masina, iar a doua parte<br />
este software-ul sau sitemul de operare de pe masina. Masina &#8220;ns&#8221; este<br />
un Pentium si ruleaza Linux 2.0. CNAME (Canonical NAME) este o cale de a<br />
da fiecarei masini mai multe nume. Deci &#8220;www&#8221; este un alias pentru &#8220;ns&#8221;.</p>
<p>Utilizarea inregistrarii CNAME este controversata. Dar e in OK sa urmati<br />
regula potrivit careia o inregistrare MX, CNAME sau SOA nu trebuie sa nu<br />
se refere niciodata la o inregistrare CNAME, trebuie intotdeauna sa se<br />
refere la o inregistrare &#8220;A&#8221;, deci este inadmisibil sa avem:</p>
<p>______________________________________________________________________<br />
foobar          CNAME   www                     ; NO!<br />
______________________________________________________________________</p>
<p>dar corect sa avem</p>
<p>______________________________________________________________________<br />
foobar          CNAME   ns                      ; Yes!<br />
______________________________________________________________________</p>
<p>Este de asemeni sigur sa presupunem ca un CNAME nu este un nume de<br />
host corect pentru o adresa de e-mail: webmaster@www.linux.bogus<br />
este o adresa de e-mail ilegala, incorecta, data de configurarea de mai sus.<br />
Va puteti chiar astepta la cativa administratori de e-mail de Afara sa<br />
restrictioneze aceasta regula, daca pentru<br />
dumneavoasta functioneaza. Calea pentru a evita aceasta este sa folositi<br />
inregistrari &#8220;A&#8221; (si poate si altele, cum ar fi reguli MX) in loc:</p>
<p>______________________________________________________________________<br />
www             A       192.168.196.2<br />
______________________________________________________________________</p>
<p>Un numar de arch-BIND-wizards recomanda sa nu utilizati de loc<br />
CNAME. Dar discutia legata aceasta nu face obiectul acestui HOWTO.</p>
<p>Dar cum vedeti, acest HOWTO si multe site-uri nu urmeaza aceasta regula.</p>
<p>Incarcati noua baza de date cu &#8220;ndc reload&#8221; ceea ce il obliga<br />
pe named sa-si reciteasca fisierele.</p>
<p>$ dig linux.bogus axfr</p>
<p>; &lt;&lt;&gt;&gt; DiG 8.2 &lt;&lt;&gt;&gt; linux.bogus axfr<br />
$ORIGIN linux.bogus.<br />
@                       3D IN SOA       ns hostmaster (<br />
199802151       ; serial<br />
8H              ; refresh<br />
2H              ; retry<br />
4W              ; expiry<br />
1D )            ; minimum</p>
<p>3D IN NS        ns<br />
3D IN NS        ns.friend.bogus.<br />
3D IN MX        10 mail<br />
3D IN MX        20 mail.friend.bogus.<br />
3D IN TXT       &#8220;Linux.Bogus, your DNS consultants&#8221;<br />
gw                      3D IN TXT       &#8220;The router&#8221;<br />
3D IN HINFO     &#8220;Cisco&#8221; &#8220;IOS&#8221;<br />
3D IN A         192.168.196.1<br />
localhost               3D IN A         127.0.0.1<br />
mail                    3D IN HINFO     &#8220;386sx&#8221; &#8220;Linux 1.2&#8243;<br />
3D IN MX        10 mail<br />
3D IN MX        20 mail.friend.bogus.<br />
3D IN A         192.168.196.4<br />
www                     3D IN CNAME     ns<br />
donald                  3D IN TXT       &#8220;DEK&#8221;<br />
3D IN HINFO     &#8220;i486&#8243; &#8220;Linux 2.0&#8243;<br />
3D IN MX        10 mail<br />
3D IN MX        20 mail.friend.bogus.<br />
3D IN A         192.168.196.3<br />
ns                      3D IN HINFO     &#8220;Pentium&#8221; &#8220;Linux 2.0&#8243;<br />
3D IN MX        10 mail<br />
3D IN MX        20 mail.friend.bogus.<br />
3D IN A         192.168.196.2<br />
ftp                     3D IN HINFO     &#8220;P6&#8243; &#8220;Linux 2.1.86&#8243;<br />
3D IN MX        10 mail<br />
3D IN MX        20 mail.friend.bogus.<br />
3D IN A         192.168.196.5<br />
@                       3D IN SOA       ns hostmaster (<br />
199802151       ; serial<br />
8H              ; refresh<br />
2H              ; retry<br />
4W              ; expiry<br />
1D )            ; minimum</p>
<p>;; Received 29 answers (29 records).<br />
;; FROM: lookfar to SERVER: 127.0.0.1<br />
;; WHEN: Sat Dec 16 01:35:05 2000</p>
<p>Asta e bine. Si observati ca arata chiar ca fisierul zona. Sa verificam ce<br />
spune doar pentru www:</p>
<p>$ dig www.linux.bogus +pfmin<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 27345<br />
;; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1<br />
;; QUERY SECTION:<br />
;;      www.linux.bogus, type = A, class = IN</p>
<p>;; ANSWER SECTION:<br />
www.linux.bogus.        3D IN CNAME     ns.linux.bogus.<br />
ns.linux.bogus.         3D IN A         192.168.196.2</p>
<p>Cu alte cuvinte, numele real al lui www.linux.bogus este ns.linux.bogus,<br />
si va da si cateva informatii despre &#8220;ns&#8221; de asemeni, suficient pentru a<br />
va conecta la el daca cere un program.</p>
<p>Acum suntem la jumatatea drumului.</p>
<p>5.3. Zona reverse</p>
<p>Acum programele pot converti numele din linux.bogus in adrese la care se<br />
conecteaza. Dar de asemeni este ceruta o zona reverse, una care sa<br />
faca DNS-ul capabil sa converteasca adresele in nume. Acest nume<br />
este folosit de o multime de servere de diverse tipuri (FTP, WWW, IRC si<br />
altele) pentru a decide daca vor comunica cu dumneavoastra sau nu, si daca<br />
da, ce prioritate vi se va acorda. Pentru acces deplin la toate serviciile<br />
Internet , o zona reverse este necesara.</p>
<p>Puneti aceasta in named.conf:</p>
<p>______________________________________________________________________<br />
zone &#8220;196.168.192.in-addr.arpa&#8221; {<br />
notify no;<br />
type master;<br />
file &#8220;pz/192.168.196&#8243;;<br />
};<br />
______________________________________________________________________</p>
<p>Este exact acelasi lucru ca si cu 0.0.127.in-addr.arpa si continuturile<br />
sunt similare:</p>
<p>______________________________________________________________________<br />
$TTL 3D<br />
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (<br />
199802151 ; Serial, todays date + todays serial<br />
8H      ; Refresh<br />
2H      ; Retry<br />
4W      ; Expire<br />
1D)     ; Minimum TTL<br />
NS      ns.linux.bogus.</p>
<p>1               PTR     gw.linux.bogus.<br />
2               PTR     ns.linux.bogus.<br />
3               PTR     donald.linux.bogus.<br />
4               PTR     mail.linux.bogus.<br />
5               PTR     ftp.linux.bogus.<br />
______________________________________________________________________</p>
<p>Acum restartati named-ul cu &#8220;ndc restart&#8221; si examinati rezultatele cu &#8220;dig&#8221;:</p>
<p>______________________________________________________________________<br />
$ dig -x 192.168.196.4 +pfmin<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 8764<br />
;; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1<br />
;; QUERY SECTION:<br />
;;      4.196.168.192.in-addr.arpa, type = ANY, class = IN</p>
<p>;; ANSWER SECTION:<br />
4.196.168.192.in-addr.arpa.  3D IN PTR  mail.linux.bogus.<br />
______________________________________________________________________</p>
<p>deci arata OK, executati &#8220;dig&#8221; pentru toata configuratia pentru a o examina:</p>
<p>______________________________________________________________________<br />
dig -x 192.168.196 AXFR</p>
<p>; &lt;&lt;&gt;&gt; DiG 8.2 &lt;&lt;&gt;&gt; -x AXFR<br />
$ORIGIN 196.168.192.in-addr.arpa.<br />
@                       3D IN SOA       ns.linux.bogus. hostmaster.linux.bogus. (<br />
199802151       ; serial<br />
8H              ; refresh<br />
2H              ; retry<br />
4W              ; expiry<br />
1D )            ; minimum</p>
<p>3D IN NS        ns.linux.bogus.<br />
4                   3D IN PTR       mail.linux.bogus.<br />
2                   3D IN PTR       ns.linux.bogus.<br />
5                   3D IN PTR       ftp.linux.bogus.<br />
3                   3D IN PTR       donald.linux.bogus.<br />
1                   3D IN PTR       gw.linux.bogus.<br />
@                   3D IN SOA       ns.linux.bogus. hostmaster.linux.bogus. (<br />
199802151       ; serial<br />
8H              ; refresh<br />
2H              ; retry<br />
4W              ; expiry<br />
1D )            ; minimum</p>
<p>;; Received 8 answers (8 records).<br />
;; FROM: lookfar to SERVER: 127.0.0.1<br />
;; WHEN: Sat Dec 16 01:44:03 2000<br />
____________________________________________________________________</p>
<p>Arata bine! Daca output-ul dumneavoastra nu arata la fel, cautati eroarea<br />
in mesajele din syslog. Am explicat cum sa faceti aceasta in prima<br />
sectiune la paragraful &#8220;Pornirea lui named&#8221;.</p>
<p>5.4. Cuvinte de atentionare.</p>
<p>Trebuie sa adaug niste lucruri aici. Numerele IP utilizate in exemplele de<br />
mai sus sunt luate din blocul &#8220;retelelor private&#8221;, ele nu sunt permise a<br />
se utiliza in Internet, deci sunt potrivite a fi utilizate intr-un exemplu<br />
ca acest HOWTO. Al doilea lucru este numarul de notificare:linia. Acesta<br />
ii spune lui named sa nu notifice serverele secundare (slave)<br />
cand a suferit o actualizare la unul dintre fisierele sale &#8220;zone&#8221;. In BIND 8<br />
named poate notifica celelalte servere listate in inregistrarile NS in<br />
fisierul &#8220;zone&#8221; cand o zona este actualizata. Aceasta situatie<br />
este avantajoasa in mod normal. Dar pentru experimente private<br />
cu zone, aceasta optiune ar trebui sa fie dezactivata &#8211; nu vrem sa<br />
poluam Internetul cu experimentele noastre, nu?</p>
<p>Si, bineinteles, acest domeniu este total aiurea si la fel<br />
sunt toate adresele din el. Pentru un exemplu real vedeti urmatoarea<br />
sectiune principala.</p>
<p>5.5. De ce nu functioneaza interogarile inverse (reverse lookups).</p>
<p>Sunt cateva &#8220;chestii&#8221; care in mod normal sunt evitate la interogarile<br />
de nume vazute adesea la configurarea zonelor inverse. Inainte<br />
de a trece mai departe, trebuie ca pe masinile dumneavoastra, interogarile<br />
inverse sa fie functionale pe propriul nameserver. Daca nu functioneaza,<br />
reveniti si puneti totul la punct inainte de a continua.</p>
<p>Voi discuta doua situatii de nefunctionare a interogarilor<br />
inverse, asa cum sunt vazute din afara retelei dumneavoastra.</p>
<p>5.5.1 Zona inversa nu este investita.</p>
<p>Cand cereti unui provider o plaja de adrese si un nume de domeniu,<br />
numele de domeniu este in mod normal investit. Investirea este &#8220;eticheta&#8221;<br />
pe care NS (Name Server) o inregistreaza si care va ajuta sa treceti de la<br />
un nameserver la altul, asa cum am explicat in &#8220;teoria seaca&#8221; de mai<br />
sus. Ati citit aceasta, nu-i asa? Daca zona inversa nu functioneaza,<br />
reveniti si cititi-o. Acum.</p>
<p>Zona inversa trebuie de asemeni investita. Daca aveti clasa 192.168.196 de<br />
la provider cu domeniul linux.bogus, ei trebuie sa insereze inregistrarile<br />
NS atat pentru zona directa (forward) cat si pentru cea inversa. Daca<br />
urmati lantul de la in-addr.arpa in sus pana la reteaua dvs, probabil<br />
gasiti o ruptura in acest lant, cel mai probabil la providerul dvs. Gasind<br />
ruptura din lant, contactati providerul si cereti-i sa corecteze eroarea.</p>
<p>5.5.2. Aveti un subnet fara clase.</p>
<p>Acesta este oarecum un subiect avansat, dar subneturile fara clase sunt<br />
ceva comun in ziua de azi si probabil ca aveti unul daca sunteti intr-o<br />
firma mica.</p>
<p>Un subnet fara clase este ceea ce tine Internetul in picioare in<br />
zilele noastre. Cu cativa ani in urma au fost discutii intense cu privire<br />
la limitarile adreselor IP. Tipii de la IETF (Internet Engineering<br />
Task Force &#8211; ei mentin Internetul in stare de functionare) si-au stors<br />
creierii si au rezolvat problema. Cu un pret. Pretul este ca veti<br />
obtine mai putin de un subnet de clasa &#8220;C&#8221; si unele lucruri s-ar putea<br />
sa crape. Va rog consultati ASK MR DNS la:<br />
&lt;http://www.acmebw.com/askmrdns/00007.htm&gt; pentru o buna explicatie<br />
cu privire la aceste lucruri, si cum sa va descurcati.</p>
<p>Ati citit-o? Eu nu o voi explica, asa ca, va rog cititi-o!</p>
<p>Prima parte a acestei probleme este ca ISP-ul dvs. trebuie<br />
sa inteleaga tehnica descrisa de Mr. DNS. Nu toti ISP-stii mici au habar<br />
de aceasta problema. Daca asa sta treaba, va trebui sa le explicati<br />
problema si sa si insistati. Asigurati-va ca ati inteles-o dvs. intai. <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ei vor configura atunci o zona inversa foarte draguta pe serverul lor,<br />
pe care o puteti examina spre corectitudine cu &#8220;dig&#8221;.</p>
<p>A doua si ultima parte a problemei este ca trebuie sa intelegeti<br />
tehnica. Daca nu sunteti sigur, reveniti si recititi-o. Atunci puteti sa<br />
va configurati propria zona inversa fara clase, asa cum este descrisa<br />
de Mr. DNS.</p>
<p>Mai e o capcana care pandeste aici. Rezolverele vechi nu vor fi capabile<br />
sa urmeze &#8220;fenta&#8221; cu CNAME in lantul de rezolvare si vor esua in<br />
incercarea de a rezolva invers masina dvs. Rezultatul poate fi acela<br />
ca serverul ii aloca o clasa de acces incorecta,<br />
interzicerea accesului sau ceva de genul aceasta. Daca va impotmoliti<br />
intr-un asemena serviciu, singura solutie (despre care am cunostinta) este<br />
pentru ISP sa insereze inregistrarea dvs. PTR direct in fisierul zonei<br />
fara clase in loc de inregistrare CNAME.</p>
<p>Alte ISP-uri ofera alte cai de a rezolva aceasta problema, cum ar fi<br />
formularele bazate pe Web care va permit sa va introduceti maparile inverse.</p>
<p>5.6. Servere slave (sclav)</p>
<p>Odata ce v-ati setat corect zonele pe serverele master, trebuie sa<br />
configurati macar un server slave (&#8220;sclav&#8221;). Serverele slave sunt necesare<br />
pentru a asigura robustetea serviciilor. Daca serverul master a picat,<br />
oamenii de pe internet vor putea totusi primit date despre doemeniu de<br />
la serverul slave. Un server slave ar trebui sa fie cat mai indepartat<br />
de dvs posibil si sa imparta cu serverul master cat mai<br />
putine din resursele de alimentare cu energie, LAN, ISP, oras, tara.<br />
Daca toate aceste lucruri sunt diferite de ale serverului master, aveti un<br />
bun server slave.</p>
<p>Un server slave este pur si simplu un nameserver care copie fisierele zone<br />
de la master. Il configurati astfel:</p>
<p>______________________________________________________________________<br />
zone &#8220;linux.bogus&#8221; {<br />
type slave;<br />
file &#8220;sz/linux.bogus&#8221;;<br />
masters { 192.168.196.2; };<br />
};<br />
______________________________________________________________________</p>
<p>Un mecanism numit trasfer de zone este folosit pentru a copia datele.<br />
Transferul de zone este controlat de inregistrarea SOA:</p>
<p>______________________________________________________________________<br />
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (<br />
199802151       ; serial, todays date + todays serial<br />
8H              ; refresh, seconds<br />
2H              ; retry, seconds<br />
4W              ; expire, seconds<br />
1D )            ; minimum, seconds<br />
______________________________________________________________________</p>
<p>O zona este transferata doar daca numarul serial al masterului este mai<br />
mare decat al slave-ului. Dupa fiecare interval de refresh, slave-ul<br />
va verifica daca masterul a fost actualizat.<br />
Daca verificarea esueaza (pentru ca masterul nu este disponibil)<br />
va reincerca verificarea. Daca va continua sa esueze atat timp cat dureaza<br />
intervalul de expirare, slave-ul va sterge zona din propriul sistem de<br />
fisiere si nu va mai actiona ca server pentru acea zona.</p>
<p>6. Optiuni fundamentale de securitate.</p>
<p>de Jamie Norrish</p>
<p>Seterea optiunilor de configurare pentru a reduce posibilitatea aparitiei<br />
problemelor</p>
<p>Sunt cativa pasi simpli pe care ii puteti parcurge si care va vor asigura<br />
un server mai sigur si totodata ii vor reduce incarcarea. Materialul<br />
prezentat aici nu este mai mult decat un puct de plecare. Daca va preocupa<br />
securitatea (si ar trebui sa va preocupe), va rog sa consultati si<br />
alte resurse de pe Internet (vedeti &#8220;ultimul capitol&#8221;).</p>
<p>Urmatoarele directive de configurare apar in named.conf.<br />
Daca o directiva apare in sectiunea &#8220;options&#8221; din fisier, se<br />
aplica tuturor zonelor listate in acel fisier. Daca apare in optiunile<br />
unei zone, se aplica numai acelei zone. On optiune dintr-o<br />
zona suprascrie, anuleaza o inregistrare din zona &#8220;options&#8221;.</p>
<p>6.1. Restrictionarea trasferului pe zone.</p>
<p>Pentru ca serverele slave sa fie capabile sa raspunda interogarilor spre<br />
domeniul dvs. trebuie sa fie capabile sa transfere informatia zona de la<br />
serverul primar. In foarte putine cazuri e nevoie de aceasta. De<br />
aceea, restrictionati transferurile pe zona, folosind optiunea<br />
&#8220;allow-trasfer&#8221;. Presupunand ca 194.168.1.4 este adresa IP a lui<br />
ns.friend.bogus, si adaugandu-va in scop de depanare:</p>
<p>______________________________________________________________________<br />
zone &#8220;linux.bogus&#8221; {<br />
allow-transfer { 192.168.1.4; localhost; };<br />
};<br />
______________________________________________________________________</p>
<p>Restrictionand transferul pe zone, va asigurati ca singura<br />
informatie disponibila utilizatorilor este cea pe care acestia o cer<br />
direct = nimeni nu poate cere, interoga toate detaliile configurarii dvs.</p>
<p>6.2. Protectia impotriva spoofing-ului.</p>
<p>In primul rand, dezactivati orice interogari pentru domenii care nu va<br />
apartin, cu exceptia masinii dvs. interne/locale. Aceasta nu<br />
doar preintampina utilizarea frauduloasa a serverului dvs. DNS, dar reduce<br />
si utilizarea ne-necesara a acestuia.</p>
<p>______________________________________________________________________<br />
options {<br />
allow-query { 192.168.196.0/24; localhost; };<br />
};</p>
<p>zone &#8220;linux.bogus&#8221; {<br />
allow-query { any; };<br />
};</p>
<p>zone &#8220;196.168.192.in-addr.arpa&#8221; {<br />
allow-query { any; };<br />
};<br />
______________________________________________________________________</p>
<p>Mai departe, dezactivati interogarile recursive cu exceptia celor de<br />
la masinile locale/interne. Aceasta reduce riscul atacurilor<br />
prin &#8220;otravirea&#8221; cache-ului, cand date false alimenteaza serverul.</p>
<p>______________________________________________________________________<br />
options {<br />
allow-recursion { 192.168.196.0/24; localhost; };<br />
};<br />
______________________________________________________________________</p>
<p>6.3. Rularea lui named ca non-root.</p>
<p>Este o idee buna sa rulati named ca utilizator altul decat root, asa incat<br />
daca acesta este compromis, privilegiile castigate de catre cracker<br />
sa fie cat mai limitate. Intai trebuie sa creati un grup si un<br />
utilizator sub care named sa ruleze, si apoi sa modificati scriptul pe<br />
care il folositi pentru a porni named. Transferati noul grup si utilizator<br />
catre named folosind flagurile -d si -u.</p>
<p>De exemplu, in Debian GNU/Linux 2.2 ati putea modifica scriptul /etc/init.d/bind<br />
pentru a contine urmatoarea linie (unde userul si grupul &#8220;named&#8221; au fost<br />
deja create):</p>
<p>______________________________________________________________________<br />
start-stop-daemon &#8211;start &#8211;quiet &#8211;exec /usr/sbin/named &#8212; -u named -g named<br />
______________________________________________________________________</p>
<p>La fel se procedeaza si cu RedHat si cu celelalte distributii. Dave Lugo a<br />
descris un setup dual chroot<br />
&lt;http://www.etherboy.com/dns/chrootdns.html&gt; care s-ar putea<br />
sa fie interesant de citit.</p>
<p>7. Un exemplu real de domeniu.</p>
<p>Unde vom lista fisiere reale de zona.</p>
<p>Utilizatorii mi-au sugerat sa includ un exemplu real de domeniu, ca si<br />
unul tutorial, de instructaj.</p>
<p>Folosesc acest exemplu cu permisiunea lui David Bullock de la LAND-5.<br />
Aceste fisiere dateaza din 24 septembrie 1996, si au fost editate pentru a<br />
se conforma restrictiilor BIND 8 si folosesc extensii scrise<br />
de mine. Deci, ceea ce vedeti aici s-ar putea sa difere de ceea<br />
ce ati putea afla interogand LAND-5 acum.</p>
<p>7.1.  /etc/named.conf (sau /var/named/named.conf)</p>
<p>Aici gasim zona master pentru cele doua zone inverse necesare: reteaua<br />
127.0.0  si subreteaua (subnetul) de la LAND-5  206.6.177 ca linie primara<br />
pentru zona de forward a LAND-5 land-5.com. Observati ca in loc ca toate<br />
fisierele sa fie adunate nu in directorul &#8220;pz&#8221; asa cum am facut in acest<br />
HOWTO, le pune intr-un director numit &#8220;zone&#8221;.</p>
<p>______________________________________________________________________<br />
// Boot file for LAND-5 name server</p>
<p>options {<br />
directory &#8220;/var/named&#8221;;<br />
};</p>
<p>zone &#8220;.&#8221; {<br />
type hint;<br />
file &#8220;root.hints&#8221;;<br />
};</p>
<p>zone &#8220;0.0.127.in-addr.arpa&#8221; {<br />
type master;<br />
file &#8220;zone/127.0.0&#8243;;<br />
};</p>
<p>zone &#8220;land-5.com&#8221; {<br />
type master;<br />
file &#8220;zone/land-5.com&#8221;;<br />
};</p>
<p>zone &#8220;177.6.206.in-addr.arpa&#8221; {<br />
type master;<br />
file &#8220;zone/206.6.177&#8243;;<br />
};<br />
______________________________________________________________________</p>
<p>Daca puneti aceasta in fisierul dvs. named.conf spre a va juca, VA ROG<br />
puneti &#8220;notify no: &#8221; in sectiunea zone, pentru cele doua zone land-5,<br />
spre a evita incidentele.</p>
<p>7.2.  /var/named/root.hints</p>
<p>Tineti minte ca acest fisier este dinamic, iar cel listat aici este<br />
vechi. Mai bine folositi unul produs cu &#8220;dig&#8221; asa cum am<br />
explicat mai devreme:</p>
<p>______________________________________________________________________<br />
; &lt;&lt;&gt;&gt; DiG 8.1 &lt;&lt;&gt;&gt; @A.ROOT-SERVERS.NET.<br />
; (1 server found)<br />
;; res options: init recurs defnam dnsrch<br />
;; got answer:<br />
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 10<br />
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13<br />
;; QUERY SECTION:<br />
;;      ., type = NS, class = IN</p>
<p>;; ANSWER SECTION:<br />
.                     6D IN NS        G.ROOT-SERVERS.NET.<br />
.                     6D IN NS        J.ROOT-SERVERS.NET.<br />
.                     6D IN NS        K.ROOT-SERVERS.NET.<br />
.                     6D IN NS        L.ROOT-SERVERS.NET.<br />
.                     6D IN NS        M.ROOT-SERVERS.NET.<br />
.                     6D IN NS        A.ROOT-SERVERS.NET.<br />
.                     6D IN NS        H.ROOT-SERVERS.NET.<br />
.                     6D IN NS        B.ROOT-SERVERS.NET.<br />
.                     6D IN NS        C.ROOT-SERVERS.NET.<br />
.                     6D IN NS        D.ROOT-SERVERS.NET.<br />
.                     6D IN NS        E.ROOT-SERVERS.NET.<br />
.                     6D IN NS        I.ROOT-SERVERS.NET.<br />
.                     6D IN NS        F.ROOT-SERVERS.NET.</p>
<p>;; ADDITIONAL SECTION:<br />
G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4<br />
J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10<br />
K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129<br />
L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12<br />
M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33<br />
A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4<br />
H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53<br />
B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107<br />
C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12<br />
D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90<br />
E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10<br />
I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17<br />
F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241</p>
<p>;; Total query time: 215 msec<br />
;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET.  198.41.0.4<br />
;; WHEN: Sun Feb 15 01:22:51 1998<br />
;; MSG SIZE  sent: 17  rcvd: 436<br />
______________________________________________________________________</p>
<p>7.3.  /var/named/zone/127.0.0</p>
<p>Doar bazele, inregistrarea SOA obligatorie, si o inregistrare<br />
care mapeaza 127.0.0.1 catre localhost. Ambele sunt necesare. Nimic mai<br />
mult nu ar trebui sa fie in acest fisier. Nu vor<br />
trebui niciodata updatate, decat daca nameserver-ul sau adresa hostmaster<br />
a dvs se modifica.</p>
<p>______________________________________________________________________<br />
@               IN      SOA     land-5.com. root.land-5.com. (<br />
199609203       ; Serial<br />
28800   ; Refresh<br />
7200    ; Retry<br />
604800  ; Expire<br />
86400)  ; Minimum TTL<br />
NS      land-5.com.</p>
<p>1                       PTR     localhost.<br />
______________________________________________________________________</p>
<p>Daca veti cauta intr-o instalare BIND aleatorie, veti observa probabil<br />
ca linia $TTL lipseste. Nu a fost folosita inainte si doar versiunea 8.2<br />
BIND avertizeaza asupra lipsei acesteia. Va recomand sa puneti linia $TTL<br />
in fisierele zona cand observati ca lipseste.</p>
<p>7.4.  /var/named/zone/land-5.com</p>
<p>Aici observam inregistrarea SOA obligatorie, inregistrarea<br />
NS necesara. Putem vedea ca are un nameserver secundar la ns2.psi.net. Asa<br />
ar trebui sa fie, intotdeauna sa fie un al doilea nameserver<br />
in afara retelei, ca backup. Observam ca exista un host master numit<br />
land-5 care se ocupa de multiplele servicii Internet, si ca acesta<br />
este inregistrat cu CNAME ( o alternativa este utilizarea inregistrarii A).</p>
<p>Asa cum vedem din inregistrarea SOA, fisierul zona incepe cu land-5.com,<br />
persoana de contact este root@land-5.com. hostmaster este o alta<br />
adresa folosita adesea pentru persoana de contact. Numarul serial este<br />
obisnuitul format yyyymmdd cu numarul serial de astazi adaugat. Aceasta<br />
este probabil a sasea versiune a fisierului zona, din 20<br />
septembrie 1996. Tineti minte ca numarul serial trebuie sa creasca<br />
monoton, aici este un singur digit pentru numarul serial de astazi, dupa 9<br />
editari va trebui sa astepam pana maine inainte<br />
de a edita din nou fisierul. Ganditi-ba la posibilitatea de a folosi 2<br />
digiti.</p>
<p>______________________________________________________________________<br />
@       IN      SOA     land-5.com. root.land-5.com. (<br />
199609206       ; serial, todays date + todays serial<br />
8H              ; refresh, seconds<br />
2H              ; retry, seconds<br />
4W              ; expire, seconds<br />
1D )            ; minimum, seconds<br />
NS      land-5.com.<br />
NS      ns2.psi.net.<br />
MX      10 land-5.com.  ; Primary Mail Exchanger<br />
TXT     &#8220;LAND-5 Corporation&#8221;</p>
<p>localhost       A       127.0.0.1</p>
<p>router          A       206.6.177.1</p>
<p>land-5.com.     A       206.6.177.2<br />
ns              A       206.6.177.3<br />
www             A       207.159.141.192</p>
<p>ftp             CNAME   land-5.com.<br />
mail            CNAME   land-5.com.<br />
news            CNAME   land-5.com.</p>
<p>funn            A       206.6.177.2</p>
<p>;<br />
;       Workstations<br />
;<br />
ws-177200       A       206.6.177.200<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177201       A       206.6.177.201<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177202       A       206.6.177.202<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177203       A       206.6.177.203<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177204       A       206.6.177.204<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177205       A       206.6.177.205<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
; {Many repetitive definitions deleted &#8211; SNIP}<br />
ws-177250       A       206.6.177.250<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177251       A       206.6.177.251<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177252       A       206.6.177.252<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177253       A       206.6.177.253<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
ws-177254       A       206.6.177.254<br />
MX      10 land-5.com.   ; Primary Mail Host<br />
______________________________________________________________________</p>
<p>Daca veti examina nameserverul lui land-5, veti observa ca numele<br />
hosturilor sunt exprimate in forma ws_number. De la ultimele versiuni de<br />
BIND4 ,named a inceput sa intareasca restrictiile in legatura<br />
cu caracterele ce pot fi folosite in numele hosturilor. Asa ca aceasta<br />
nu functioneaza sub BIND8, asa ca am inlocuit caracterul &#8220;-&#8221; (liniuta)<br />
cu caracterul &#8220;_&#8221; pentru a fi folosit in acest HOWTO.</p>
<p>Un alt lucru de remarcat este ca statiile de lucru nu au nume individuale,<br />
ci mai curand un prefix urmat de doua din ultimile parti ale<br />
IP-ului. Folosirea unei astfel de conventii poate simplifica<br />
intretinerea semnificativ, dar poate fi un pic impersonala si,<br />
in fapt, o sursa de iritare printre clientii dumneavoastra.</p>
<p>De asemeni, observam ca funn.land-5.com este un alias<br />
pentru land-5.com, dar folosind inregistrarea A nu CNAME. Aceasta este o<br />
buna politica, asa cum am spus si mai devreme.</p>
<p>7.5.  /var/named/zone/206.6.177</p>
<p>Voi face comentariile dupa acest fisier:</p>
<p>______________________________________________________________________<br />
@               IN      SOA     land-5.com. root.land-5.com. (<br />
199609206       ; Serial<br />
28800   ; Refresh<br />
7200    ; Retry<br />
604800  ; Expire<br />
86400)  ; Minimum TTL<br />
NS      land-5.com.<br />
NS      ns2.psi.net.<br />
;<br />
;       Servers<br />
;<br />
1       PTR     router.land-5.com.<br />
2       PTR     land-5.com.<br />
2       PTR     funn.land-5.com.<br />
;<br />
;       Workstations<br />
;<br />
200     PTR     ws-177200.land-5.com.<br />
201     PTR     ws-177201.land-5.com.<br />
202     PTR     ws-177202.land-5.com.<br />
203     PTR     ws-177203.land-5.com.<br />
204     PTR     ws-177204.land-5.com.<br />
205     PTR     ws-177205.land-5.com.<br />
; {Many repetitive definitions deleted &#8211; SNIP}<br />
250     PTR     ws-177250.land-5.com.<br />
251     PTR     ws-177251.land-5.com.<br />
252     PTR     ws-177252.land-5.com.<br />
253     PTR     ws-177253.land-5.com.<br />
254     PTR     ws-177254.land-5.com.<br />
______________________________________________________________________</p>
<p>Zona inversa este partea de configurare care da dureri de cap. Este<br />
folosita pentru a identifica numele de host daca aveti IP-ul<br />
unei masini. Exemplu: sunteti un server IRC si acceptati conexiuni de la<br />
clientii IRC. Oricum, sunteti un server norvegian si acceptati<br />
doar conexiuni de la clientii din Norvegia si celelalte tari scandinave.<br />
Cand primiti o conexiune de la un client, biblioteca C e capabila sa<br />
va spune IP-ul masinii client, pentru ca numarul IP este continut in toate<br />
pachetele care traverseaza reteaua. Acum puteti invoca o functie<br />
numita gethostbyaddr care cauta numele unui host avand data adresa IP.<br />
Gethostbyaddr va interoga un server DNS, care va traversa reteaua<br />
de servere DNS cautand masina respectiva. Sa presupunem ca conexiunea client<br />
este de la ws-177200.land-5.com. Numarul IP pe care biblioteca C il<br />
livreaza catre serverul IRC este 206.6.177.200. Pentru a afla numele<br />
acelei masini trebuie sa gasim 200.177.6.206.in-addr.arpa. Serverul DNS va<br />
trebui intai sa gaseasca serverele arpa. , apoi in-addr.arpa. ,<br />
urmand calea inversa spre 206, apoi 6, in final gasind serverul pentru<br />
177.6.206.in-addr.arpa la LAND-5. De unde va lua raspunsul final, cum ca<br />
pentru 200.177.6.206.in-addr.arpa avem o inregistrare &#8220;PTR<br />
ws-177200.land-5.com&#8221; insemnand ca numele care insoteste 206.6.177.200<br />
este ws-177200.land-5.com.</p>
<p>Inapoi la exemplul cu serverele IRC. Serverul IRC accepta doar conexiuni<br />
din tari scandinave, de exemplu:  *.no, *.se, *.dk, numele<br />
ws-177200.land-5.com e clar ca nu indeplineste aceasta conditie si<br />
serverul ii va respinge conexiunea. Daca nu a fost<br />
mapare inversa a lui 206.2.177.200 prin zona in-addr.arpa serverul nu va<br />
fi capabil sa gaseasca numele deloc si nici sa compare 206.2.177.200<br />
cu *.no, *.se and *.dk, asa ca acestea nu se vor potrivi nicicum.</p>
<p>Unii va vor spune ca maparea inversa nu este importanta pentru servere sau<br />
nu este importanta deloc. Nu este asa: multe servere FTP, news, IRC<br />
si unele servere WWW (web) nu vor accepta conexiuni de la masini ale caror<br />
nume nu le pot afla. Deci maparea inversa este de fapt obligatorie<br />
si necesara.</p>
<p>8. Intretinere.</p>
<p>Tineti-l in viata.</p>
<p>Exista o sarcina de intretinere cand aveti de-a face cu named-uri, alta<br />
decat a le mentine ruland. Aceea de a mentine fisierul<br />
root.hints actualizat, la zi. Cea mai usoara cale este cu &#8220;dig&#8221;. Prima<br />
data rulati &#8220;dig&#8221; fara nici un argument, si veti obtine datele din<br />
&#8220;root.hints&#8221; conform propriului nameserver. Apoi interogati unul<br />
dintre rootservere listate cu &#8220;dig @rootserver&#8221;. Veti observa ca<br />
rezultatul seamana foarte bine cu un<br />
fisier &#8220;root.hints&#8221;. Salvati-l intr-un fisier (dig<br />
@e.root-servers.net . ns &gt;root.hints.new) si inlocuiti vechiul<br />
root.hints cu el.</p>
<p>Nu uitati sa restartati named dupa inlocuirea fisierului cache.</p>
<p>Al Longyear mi-a trimis acest script care rulat, poate actualiza automat<br />
fisierul root.hints. Instalati-l intr-o intrare crontab pentru a<br />
fi rulat odata pe luna si puteti uita de el. Scriptul presupune ca<br />
va merge serviciul de mail si ca este definita adresa de hostmaster.<br />
Puteti sa il modificati pentru a se potrivi configuratiei dvs.</p>
<p>______________________________________________________________________<br />
#!/bin/sh<br />
#<br />
# Update the nameserver cache information file once per month.<br />
# This is run automatically by a cron entry.<br />
#<br />
# Original by Al Longyear<br />
# Updated for BIND 8 by Nicolai Langfeldt<br />
# Miscelanious error-conditions reported by David A. Ranch<br />
# Ping test suggested by Martin Foster<br />
# named up-test suggested by Erik Bryer.<br />
#<br />
(<br />
echo &#8220;To: hostmaster &lt;hostmaster&gt;&#8221;<br />
echo &#8220;From: system &lt;root&gt;&#8221;</p>
<p># Is named up? Check the status of named.<br />
case &#8216;ndc status 2&gt;&amp;1 in<br />
*&#8217;cannot connect to command channel&#8217;*)<br />
echo &#8220;named is DOWN. root.hints was NOT updated&#8221;<br />
echo<br />
exit 0<br />
;;<br />
esac<br />
PATH=/sbin:/usr/sbin:/bin:/usr/bin:<br />
export PATH<br />
# NOTE: /var/named must be writable only by trusted users or this script<br />
# will cause root compromise/denial of service opportunities.<br />
cd /var/named 2&gt;/dev/null || {<br />
echo &#8220;Subject: Cannot cd to /var/named, error $?&#8221;<br />
echo<br />
echo &#8220;The subject says it all&#8221;<br />
exit 1<br />
}</p>
<p># Are we online?  Ping a server at your ISP<br />
case &#8216;ping -qnc 1 some.machine.net 2&gt;&amp;1&#8242; in<br />
*&#8217;100% packet loss&#8217;*)<br />
echo &#8220;Subject: root.hints NOT updated.  The network is DOWN.&#8221;<br />
echo<br />
echo &#8220;The subject says it all&#8221;<br />
exit 1<br />
;;<br />
esac</p>
<p>dig @e.root-servers.net . ns &gt;root.hints.new 2&gt; errors</p>
<p>case &#8216;cat root.hints.new&#8217; in<br />
*NOERROR*)<br />
# It worked<br />
:;;<br />
*)<br />
echo &#8220;Subject: The root.hints file update has FAILED.&#8221;<br />
echo<br />
echo &#8220;The root.hints update has failed&#8221;<br />
echo &#8220;This is the dig output reported:&#8221;<br />
echo<br />
cat root.hints.new errors<br />
exit 1<br />
;;<br />
esac</p>
<p>echo &#8220;Subject: The root.hints file has been updated&#8221;<br />
echo<br />
echo &#8220;The root.hints file has been updated to contain the following<br />
information:&#8221;<br />
echo<br />
cat root.hints.new</p>
<p>chown root.root root.hints.new<br />
chmod 444 root.hints.new<br />
rm -f root.hints.old errors<br />
mv root.hints root.hints.old<br />
mv root.hints.new root.hints<br />
ndc restart<br />
echo<br />
echo &#8220;The nameserver has been restarted to ensure that the update is complete&#8221;<br />
echo &#8220;The previous root.hints file is now called<br />
/var/named/root.hints.old.&#8221;<br />
) 2&gt;&amp;1 | /usr/lib/sendmail -t<br />
exit 0<br />
______________________________________________________________________</p>
<p>Unii dintre dvs v-ati prins ca fisierul root.hints este disponibil<br />
prin ftp din Internic. Va rog nu folositi ftp<br />
pentru a actualiza root.hints, metoda de mai sus este mult mai prietenoasa<br />
pentru net si Internic.</p>
<p>9. Conversia de la versiunea 4 la versiunea 8.</p>
<p>Aceasta a fost la inceput o sectiune despre folosirea lui BIND 8 scrisa de<br />
David E.  Smith (dave@bureau42.ml.org). Am editat cate ceva pentru a<br />
se potrivi noului nume al sectiunii.</p>
<p>Nu sunt prea multe de spus. Cu exceptia inlocuirii fisierului named.boot<br />
cu named.conf, restul este identic. Iar BIND 8 vine cu un script PERL care<br />
converteste totul de la vechiul la noul format. Exemplu de fisier<br />
named.boot (vechiul stil) pentru caching nameserver:</p>
<p>______________________________________________________________________<br />
directory /var/named<br />
cache   .                                     root.hints<br />
primary 0.0.127.IN-ADDR.ARPA                    127.0.0.zone<br />
primary localhost                               localhost.zone<br />
______________________________________________________________________</p>
<p>In linia de comanda, in directorul bind8/src/bin/named (aceasta presupune<br />
ca aveti sursele distributiei). Daca aveti pachetul binar, scriptul e prin<br />
preajma&#8230; Dati comanda :</p>
<p>______________________________________________________________________<br />
./named-bootconf.pl &lt; named.boot &gt; named.conf<br />
______________________________________________________________________</p>
<p>care va crea named.conf:</p>
<p>______________________________________________________________________<br />
// generated by named-bootconf.pl</p>
<p>options {<br />
directory &#8220;/var/named&#8221;;<br />
};</p>
<p>zone &#8220;.&#8221; {<br />
type hint;<br />
file &#8220;root.hints&#8221;;<br />
};</p>
<p>zone &#8220;0.0.127.IN-ADDR.ARPA&#8221; {<br />
type master;<br />
file &#8220;127.0.0.zone&#8221;;<br />
};</p>
<p>zone &#8220;localhost&#8221; {<br />
type master;<br />
file &#8220;localhost.zone&#8221;;<br />
};<br />
______________________________________________________________________</p>
<p>Functioneaza pentru orice intra intr-un fisier named.boot, desi nu<br />
adauga toate imbunatatirile si optiunile de configuratie pe care<br />
le permite BIND8. Aici este un named.conf care face aceleasi<br />
lucruri, dar ceva mai eficient:</p>
<p>______________________________________________________________________<br />
// This is a configuration file for named (from BIND 8.1 or later).<br />
// It would normally be installed as /etc/named.conf.<br />
// The only change made from the tock&#8217; named.conf (aside from this<br />
// comment <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  is that the directory line was uncommented, since I<br />
// already had the zone files in /var/named.</p>
<p>options {<br />
directory &#8220;/var/named&#8221;;<br />
datasize 20M;<br />
};</p>
<p>zone &#8220;localhost&#8221; IN {<br />
type master;<br />
file &#8220;localhost.zone&#8221;;<br />
};</p>
<p>zone &#8220;0.0.127.in-addr.arpa&#8221; IN {<br />
type master;<br />
file &#8220;127.0.0.zone&#8221;;<br />
};</p>
<p>zone &#8220;.&#8221; IN {<br />
type hint;<br />
file &#8220;root.hints&#8221;;<br />
};<br />
______________________________________________________________________</p>
<p>In directorul bind8/src/bin/named/test din distributia BIND 8<br />
gasiti aceasta si copii ale fisierelor zona, pe care multi utilizatori<br />
le pot instala si folosi ca atare. Formatele pentru fisierele root.hints<br />
si fisierele zone sunt identice, ca si comenzile  pentru actualizarea lor.</p>
<p>10 Intrebari si raspunsuri.</p>
<p>Va rog sa cititi aceasta sectiune inainte de a imi trimite e-mail.</p>
<p>1. named-ul meu &#8220;vrea&#8221; un fisier named.boot</p>
<p>Cititi un HOWTO gresit.Vedeti vechea versiune a acestui HOWTO, care<br />
studiaza BIND4 la &lt;http://www.math.uio.no/~janl/DNS/&gt;</p>
<p>2. Cum folosesc DNS-ul  din interiorul unui firewall ?</p>
<p>Indicatie: forward-only . Sau puteti folosi</p>
<p>___________________________________________________________________<br />
query-source port 53;</p>
<p>___________________________________________________________________</p>
<p>in sectiunea &#8220;options&#8221; a lui named.conf.</p>
<p>3. Cum fac DNS-ul sa se &#8220;plimbe&#8221; prin adresele disponibile, pentru<br />
un serviciu, sa zicem www.busy.site, pentru a obtine un efect de<br />
egalizare a incarcarii (loadbalancing), sau similar?</p>
<p>Faceti cateva inregistrari &#8220;A&#8221; pentru www.busy,site  si folositi BIND<br />
4.9.3 sau mai nou. Atunci, BIND va functiona ca perpetuum-mobile in<br />
cautare de raspunsuri. Nu va functiona cu versiuni mai vechi de BIND.</p>
<p>4. Vreau sa configurez un DNS intr-un Intranet (inchis). Cum fac?</p>
<p>Lasati fisierul root.hints si ocupati-va numai de fisierele zone.<br />
Asta inseamna de asemeni ca nu trebuie sa actualizati fiserul .hint<br />
tot timpul</p>
<p>5. Cum configurez un server secundar (slave) ?</p>
<p>Daca serverul primar/master are adresa 127.0.0.1, puneti o linie ca<br />
aceasta in named.conf-ul de la serverul secundar:</p>
<p>___________________________________________________________________<br />
zone &#8220;linux.bogus&#8221; {<br />
type slave;<br />
file &#8220;sz/linux.bogus&#8221;;<br />
masters { 127.0.0.1; };<br />
};</p>
<p>___________________________________________________________________</p>
<p>Puteti lista si alte servere master de unde pot fi copiate zonele,<br />
separate de punct si virgula &#8220;;&#8221;</p>
<p>6. Vreau sa rulez BIND cand sunt deconectat de la Internet.</p>
<p>Sunt patru chestiuni privind aceasta problema:</p>
<p>- Specific lui BIND 8, Adam L Rice mi-a trimis acest e-mail despre cum<br />
sa rulezi DNS fara dureri de cap pe o masina dialup:</p>
<p>Am descoperit in noile versiuni ca acest fisier [&lt;em/shuffeling files,<br />
-ed/] nu mai este necesar. Exista o directiva &#8220;forward&#8221; pe linga<br />
&#8220;forwarderi&#8221;, directiva care controleaza cum aceastia sunt<br />
utilizati. Setarea implicita este &#8220;forward first&#8221;, care interogheaza intai<br />
fiecare dintre &#8220;forwarderi&#8221;, apoi incearca abordarea normala<br />
daca prima varianta esueaza. Aceasta face ca functia gethostbyname() sa se<br />
comporte familiar, luand un timp foarte lung cand legatura<br />
nu functioneaza. Dar daca &#8220;forward only&#8221; este setat, BIND renunta cand<br />
nu primeste un raspuns de la forwarderi iar gethostbyname() raspunde<br />
imediat.</p>
<p>In cazul meu, am adaugat liniile:</p>
<p>forward only;<br />
forwarders { 193.133.58.5; };</p>
<p>in sectiunea options { } din fisierul meu named.conf. Functioneaza<br />
foarte frumos, singurul dezavantaj este ca reduce o incredibil<br />
de sofisticata masinarie software care este DNS la statutul de cache<br />
chior. As fi preferat sa pot rula un cache simplu in loc, dar nu exita asa<br />
ceva care sa inlocuiasca DNS pentru Linux.</p>
<p>- Am receptionat acest mail de la Ian Clark &lt;ic@deakin.edu.au&gt; unde<br />
el explica modul in care face aceasta:</p>
<p>Rulez named pe masina mea &#8220;masquerade&#8221; (cu mascaradare). Am doua fisiere<br />
root.hints, unul numita root.hints.real care contine numele reale ale<br />
root-serverelor si celalalt numit root.hints.fake care contine&#8230;</p>
<p>&#8212;-<br />
; root.hints.fake<br />
; this file contains no information<br />
&#8212;-</p>
<p>cand inchid conexiunea (dialup), copii root.hints.fake peste root.hints si<br />
restartez named.<br />
Cand pornesc conexiunea, copii root.hints.real peste root.hints<br />
si restartez named. Asta o fac din ip-up si ip-down. Prima data cand fac o<br />
interogare offline pe un nume de domeniu, named nu are detalii de oferit<br />
si pune o intrare ca aceasta in mesaje:</p>
<p>Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN</p>
<p>care nu ma deranjeaza.</p>
<p>Deci functioneaza cu siguranta. Pot folosi nameserverul pentru<br />
masinile locale cand sunt deconectat de la Internet fara intarzieri de<br />
timeout pentru interogarile domeniilor externe.</p>
<p>Peter Denison crede ca Ian nu a ajuns prea departe. El scrie:</p>
<p>Cand sunt conectat) alimenteaza toate intrarile din cache (si reteaua locala)<br />
imediat, pentru intrarile reinregistrate in cache,<br />
forward catre nameserver-ul ISP-ului</p>
<p>Cand nu sunt conectat) alimenteaza interogarile retelei locale<br />
imediat, abandoneaza orice alte interogari IMEDIAT</p>
<p>Combinatia dintre schimbarea fisierului root cache si interogarile forward<br />
nu functioneaza.</p>
<p>Deci am configurat (cu unele discutii pe Linux User Group-ul local) doua<br />
named-uri, dupa cum urmeaza:</p>
<p>named-online:   forwards to ISPs nameserver<br />
master for localnet zone<br />
master for localnet reverse zone (1.168.192.in-addr.arpa)<br />
master for 0.0.127.in-addr.arpa<br />
listens on port 60053</p>
<p>named-offline:  no forwarding<br />
&#8220;fake&#8221; root cache file<br />
slave for 3 local zones (master is 127.0.0.1:60053)<br />
listens on port 61053</p>
<p>Si combinand aceasta cu port-forwarding-ul, pentru a trimite portul<br />
53 catre portul 61053 cand suntem off-line si catre portul 60053 cand<br />
suntem online (folosesc noul pachet netfilter sub 2.3.18, dar si vechiul<br />
mecanism ipchains functioneaza).</p>
<p>Observati ca aceasta nu va merge chiar &#8220;din tzeava&#8221; de vreme ce exista<br />
un mic bug in BIND 8.2 pe care l-am semnalat dezvoltatorilor,<br />
care impiedica un server slave sa aiba un master pe aceiasi adresa iP<br />
(chiar si pe un port diferit).</p>
<p>- Am primit informatii despre cum BIND interactioneaza cu NFS si<br />
portmapper-ul pe o masina mai mult off-line, de la Karl-Max Wanger :</p>
<p>Obisnuiesc sa rulez propriul meu named pe toate masinile care se<br />
conecteaza ocazional la Internet prin modem. Nameserverul singur<br />
actioneaza ca un cache, nu are nici o arie de autoritate, si<br />
interogheaza serverele din fisierul root.cache. Ca de obicei in Slackware,<br />
este pornit inainte de nfsd si mountd.</p>
<p>Cu una dintre masinile mele (un notebook Libretto 30) am avut probleme<br />
ca adesea nu puteam sa il montez dintr-un sistem conectat la reteaua mea<br />
LAN. Aceleasi probleme le aveam si din punct de vedere<br />
al legaturilor PPP sau PLIP.</p>
<p>Dupa ceva timp de cercetari si experimente am constatat ca named s-a<br />
incurcat in inregistrarea serviciilor initiate de nfsd si mountd precum si<br />
cu portmapper-ul. Pornind named-ul dupa nfsd si mountd, am scapat complet<br />
de probleme.</p>
<p>Cum nu sunt dezavantaje de asteptat in urma unei asemenea modificari<br />
in ordinea de boot, recomand tuturor sa treaca la aceasta,<br />
pentru a preintampina necazurile.</p>
<p>- In final, exista ceva informatii despre aceasta la Ask MR. DNS la<br />
&lt;http://www.acmebw.com/askmrdns/#linux-dialup&gt;.  Este despre BIND<br />
4, asa ca trebuie sa faceti adaptari la BIND 8.</p>
<p>7. Unde stocheaza caching-nameserver-ul cache-ul si cum pot controla<br />
dimensiunea acestuia?</p>
<p>Cache-ul este stocat complet in memorie, nu este scris pe disc in nici<br />
un moment. De fiecare data cand dati kill lui named, cache-ul este<br />
pierdut. Cache-ul nu este controlabil nicicum, named il controleaza dupa<br />
cateva reguli simple, si cam asta e tot. Nu puteti controla cache-ul sau<br />
dimensiunea acestuia nicicum si pentru nici un motiv. Daca<br />
doriti neaparat, puteti incerca sa hackuiti  named , dar nu este recomandat.</p>
<p>8. Named-ul salveaza cache-ul intre restart-uri? Pot sa il fac sa salveze?</p>
<p>NU, named nu salveaza cache-ul cand dispare. Aceasta inseamna ca<br />
cache-ul trebuie reconstruit de la zero de fiecare data cand named<br />
este repornit. Nu exista nici o metoda de a-l face pe named sa salveze<br />
cache-ul intr-un fisier.</p>
<p>9. Cum imi procur un domeniu? Vreau sa imi configurez propriul<br />
domeniu, denumit de exemplu linux-rules.net. Cum pot sa obtin domeniul<br />
pe care il doresc alocat mie?</p>
<p>Va rog sa va contactati provider-ul. Ei va vor putea ajuta cu<br />
aceasta. Aveti in vedere ca in cele mai multe parti ale lumii,<br />
aceast lucru costa (obtinerea unui nume de domeniu).</p>
<p>10. Cum securizez serverul meu DNS? Cum configurez un DNS split? (separat)</p>
<p>Ambele sunt chestiuni avansate si sunt analizate in<br />
&lt;http://www.etherboy.com/dns/chrootdns.html&gt;. de aceea nu le voi<br />
expune aici.</p>
<p>11. Cum sa devii un DNS de talie mare.</p>
<p>Documentatii si utilitare.</p>
<p>Exista documentatie &#8220;reala&#8221;. Online si tiparita. Citirea acesteia este<br />
necesara pentru a face pasul de la un administrator DNS de mica anvergura<br />
la unul de talie mare. Am tiparit Ghidul Concis al DNS si BIND<br />
(Nicolai Langfeldt) publicata de QUE (ISDN  0-7897-2273-9). Cartea seamana<br />
cu acest HOWTO. Doar mai multe detalii si mai multe despre toate aspectele.<br />
Dar cartea standard este &#8220;DNS and BIND  by C. Liu and P. Albitz<br />
from O&#8217;Reilly &amp; Associates (ISBN   0-937175-82-X). Este excelenta.<br />
Faceti rost de editia a 3-a, care acopera BIND 8 ca si BIND 4. Exista de<br />
asemeni o sectiune DNS si in TCP/IP Network Administration Guide. by Craig<br />
Hunt from O&#8217;Reilly (ISBN 0-937175-82-X).  O alta carte buna si pentru DNS<br />
si pentru orice este Zen and the Art of Motorcycle Maintenance (Zen si<br />
arta intretinerii motocicletei <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   de Robert M. Pirsig <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ISBN 0688052304\<br />
si altii.</p>
<p>Online veti gasi multe chestii la: &lt;http://www.dns.net/dnsrd/&gt; (DNS<br />
Resources Directory),  &lt;http://www.isc.org/bind.html&gt;; FAQ si manual<br />
de referinta  (BOG; BIND Operations Guide) ca si documente si definitii de<br />
protocol si &#8220;hack-uri&#8221; DNS (acestea &#8211; ma rog, nu toate- ca si RFC-urile<br />
sunt continute in distributia BIND). N-am citit chiar toate aceastea,<br />
dar nici mare administrator DNS nu sunt.  Arnt Gulbrandsen pe de<br />
alta parte a citit BOG (BIND Operation Guide) si este extaziat de acesta <img src='http://resurse-educationale.uv.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Newsgrupul   &lt;news:comp.protocols.tcp-ip.domains&gt;  este despre DNS.<br />
Pe langa asta, exista un numar de RFC-uri despre DNS, cele mai<br />
importante sunt probabil cele listate aici. Cele care au BCP (Best Current<br />
Practice) sunt cele mai recomandate.</p>
<p>RFC 2671<br />
P. Vixie, Extension Mechanisms for DNS (EDNS0) August 1999.</p>
<p>RFC 2317<br />
, BCP 20, H. Eidnes et. al. Classless IN-ADDR.ARPA delegation,<br />
March 1998. This is about CIDR, or classless subnet reverse<br />
lookups.</p>
<p>RFC 2308<br />
, M. Andrews, Negative Caching of DNS Queries, March 1998.<br />
About negative caching and the $TTL zone file directive.</p>
<p>RFC 2219<br />
, BCP 17, M. Hamilton and R. Wright, Use of DNS Aliases for<br />
Network Services, October 1997.  About CNAME usage.</p>
<p>RFC 2182<br />
, BCP 16, R. Elz et. al., Selection and Operation of Secondary<br />
DNS Servers, July 1997.</p>
<p>RFC 2052<br />
A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location<br />
of services (DNS SRV), October 1996</p>
<p>RFC 1918<br />
Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear,<br />
Address Allocation for Private Internets, 02/29/1996.</p>
<p>RFC 1912<br />
D. Barr, Common DNS Operational and Configuration Errors,<br />
02/28/1996.</p>
<p>RFC 1912 Errors<br />
B. Barr Errors in RFC 1912, this is available at<br />
&lt;http://www.cis.ohio-state.edu/~barr/rfc1912-errors.html&gt;</p>
<p>RFC 1713<br />
A. Romao, Tools for DNS debugging, 11/03/1994.</p>
<p>RFC 1712<br />
C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of<br />
Geographical Location, 11/01/1994.</p>
<p>RFC 1183<br />
R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR<br />
Definitions, 10/08/1990.</p>
<p>RFC 1035<br />
P. Mockapetris, Domain names &#8211; implementation and specification,<br />
11/01/1987.</p>
<p>RFC 1034<br />
P. Mockapetris, Domain names &#8211; concepts and facilities,<br />
11/01/1987.</p>
<p>RFC 1033<br />
M. Lottor, Domain administrators operations guide, 11/01/1987.</p>
<p>RFC 1032<br />
M. Stahl, Domain administrators guide, 11/01/1987.</p>
<p>RFC 974<br />
C. Partridge, Mail routing and the domain system, 01/01/1986.</p>
]]></content:encoded>
			<wfw:commentRss>http://resurse-educationale.uv.ro/?feed=rss2&#038;p=162</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
