<?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; masquerading</title>
	<atom:link href="http://resurse-educationale.uv.ro/?feed=rss2&#038;tag=masquerading" 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>
	</channel>
</rss>
