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