Osnovi na
iptables
Sled versiia
2.4 na iadroto , GNU/Linux
predstavi iztsialo nov softuer
za obrabotka na paketi, narechen Netfilter.
Instrumentut,
izpolzvan
za kontrolirane na
Netfilter,
iptables,
e golemiiat brat na po- starata komanda
ipchains,
izpolzvana
v iadrata ot versiia 2.2. iptables
prilaga podredeni “verigi” ot pravila
za mrezhovite paketi. Naborite ot verigi
sustaviat “tablitsi” i se izpolzvat za
obrabotka
na opredeleni vidove trafik. Vuzmozhnite
verigi sa INPUT, OUTPUT, FORWARD, PREPOUTING i
POSTROUTING, a tablitsite sa filter, nat, mangle i
raw.
Tablitsi i verigi na IPTABLES
Vsichki pravila v iptables imat osnoven
sintaksis. Tozi sintaksis e:
iptables [-t tablitsa] komanda
veriga spetsifikatsiia-na-pravilo [optsii]
Purvata chast ot sintaksisa na iptables e
nezadulzhitelnata optsiia -t tablitsa.
Podrazbirashtata se tablitsa na iptables se
naricha “filter”.
Verigite ot pravila v neia se izpolzvat
za filtrirane na paketite na
mrezhoviia trafik. Tablitsata filter
sudurzha tri podrazbirashti se verigi
– INPUT, FORWARD i OUTPUT. Vseki
paket, koito se obrabotva ot iadroto, se
propuska prez tochno edna ot tiah.
Pravilata
vuv verigata
INPUT
se prilagat vurhu trafika, adresiran
kum lokalniia host. Pri.
- paketi, koito sa nasocheni samo
kum
rutera.
Pravilata
vuv verigata
OUTPUT
se prilagat vurhu trafika, idvasht ot
lokalniia host (lokalno
generiranite
paketi).
Pri.
- paketi, koito vodiat nachaloto si ot
rutera. Neshta izprashtani
ot
rutera, kato
syslog do otdalechen syslog survur, otgovor
na ping (echo)
zaiavki i
dr.
Pravilata
vuv verigata FORWARD
se prilagat vurhu vsichki paketi, koito
pristigat na mrezhoviia interfeis i
triabva da se prenasochat kum drug. Pri.
- paketi, koito vlizat v rutera i shte
budat izprateni kum drugi ustroistva.
Da pomislim
po tozi nachin... Ako iskam da kontroliram
trafika mezhdu internet
i potrebitelite, koito preminava prez
ruter, togava shte triabva da izpolzvam
FORWARD verigata,
za da filtriram/upravliavam tozi trafik.
Ako iskam da ogranicha tezi, koito mogat
da se svurzhat s moia ruter, shte triabva da
izpolzvam INPUT verigata.
Ako iskam da upravliavam glavniia trafik,
shte izpolzvam OUTPUT verigata.
Pochti ne se sreshta da vidite goliam
upravliavasht red v OUTPUT verigata,
kato povecheto ot trafika, koito se
svurzva s OUTPUT verigata
e upravliaem ili chrez upravliavashtite
nastroiki (naprimer konfigurirashti
syslog survura) ili chrez kontrolirane na
INPUT (bez da e nuzhno da ogranichavate echo
otgovorite, ako prosto kontrolirate,
ot kude mozhe da dopusnem da idvat echo
zaiavkite). MNOGO E VAZHNO da ne mislite
za tezi tri
verigi,
kato che li imat neshto obshto s posokata na
trafika, kakto se otnasia kum mrezhata.
Mnogo chesta greshka e
da
postavite uslovie v INPUT verigata,
misleiki, che tova shte predotvrati trafika
ot internet ot skaniraneto na kompyutrite
na potrebitelite.
Tablitsata
„nat”
sudurzha verigi pravila za kontrol na
Network
Address
Translation
(tuk “nat”
e imeto na tablitsata na iptables,
a “NAT”
e imeto na shemata za prevod na mrezhovi
adresi). Tazi tablitsa se vzema v predvid
samo kogato paketa, koito suzdava nova
vruzka e neochakvano sreshtnat. Tablitsata
nat se izpolzva za DNAT (Destination NAT), SNAT (Source
NAT) i maskirane (masquerade). Tia implementira
verigite:
PREROUTING
(predi
marshrutizirane,
iztochnik;
Destination NAT - za vlizashti paketi)
POSTROUTING
(sled
marshrutizirane,
nasoka;
Source NAT -
za izlizashti paketi) i
OUTPUT.
Tablitsata
„mangle”
sudurzha verigi, koito modifitsirat ili
promeniat sudurzhanieto na mrezhovite
paketi izvun konteksta na NAT
i filtriraneto na paketi. Tia
se izpolzva, kogato iskate da modifitsirate
TOS (Type of Service) bitove ili da postavite
vurhu paketa marker, koito netfilter mozhe
da izpolzva za postaviane v opashka i na
drugi neshta.
Vupreki, che tia e mnogo polezna za spetsialni
obrabotki na paketi, kato naprimer
promianata na vremeto na zhivot na IP
paketite , tia obiknoveno ne se izpolzva
v povecheto proizvodstveni sredi.
Komandi i Optsii na iptables
-A (-append) dobaviane
-Dobaviane na pravilo kum kraia na dadena
veriga. Tazi komanda priema kato
zadulzhitelni argumenti ime na veriga
i spetsifikatsiia na pravilo
iptables -A INPUT -p tcp –dport
23 -j DROP
Tazi komanda dobavia uslovie v
kraia na sistemata INPUT, koiato shte donese
vsichkiia nasochen trafik kum rutera
zapomnete za kakvo e INPUT sistemata) i e
tcp paketa s nasokata port 23 (telnet).
-D (-delete) iztrivane -
Iztrivane na pravilata ot dadena veriga.
Tazi komanda priema kato zadulzhitelni
argumenti ime na veriga i spetsifikatsiia
na pravilo ili nomer na pravilo.
iptables -D INPUT 4
Tazi komanda bi iztrila 4-toto
pravilo v INPUT verigata. Pravilata sa
nomerirani, zapochvaiki ot 1 (ne 0).
-C (check) proverka -
iziskvat se -s, -d, -p, -i . Tazi komanda priema
kato zadulzhitelni argumenti ime na
veriga i spetsifikatsiia na pravilo.
-I (-insert) vmukvane
- Vmukvane na pravila v zadadena veriga.
Razshirenie na -A, no spetsifikatsiiata na
pravilo se postavia pred zadaden nomer
na pravilo. Tazi komanda priema kato
zadulzhitelni argumenti ime na veriga,
nomer na pravilo, pred koeto se vmukva
i spetsifikatsiiata na pravilo.
iptables –insert INPUT 2 -p tcp
–dport 22 -j DROP
Tazi komanda vmukva pravilo vuv
vtorata pozitsiia na verigata INPUT, koiato
shte izpusne TCP trafika, predopredelen za
port 22 (ssh). Praviloto shte bude postaveno
mezhdu predishnite pravila v pozitsiia 1 i
2 (staroto pravilo nomer 2 shte stane nomer
3).
-R (-replace) zameniane
- Zameniane na pravilo v zadadena
veriga. Kombinatsiia ot Insert i Delete. Tazi
komanda priema kato zadulzhitelni
argumenti ime na veriga, nomer na pravilo
i spetsifikatsiia na pravilo. Spetsifikatsiiata
zamestva nomera v zadadenata veriga.
-F (-flush) izchistvane
- Iztrivane na vsichki pravila v dadena
veriga ili vuv vsichki verigi, ako ne e
zadadeno ime na veriga.
-L (-list) spisuk
- Izvezhdane na spisuk na vsichki pravila
v dadena veriga ili vuv vsichki verigi,
ako ne e zadadeno ime na veriga.
-z (-zero) nulirane -
Nulirane na broiachite. Nulira broiachite
v zadadena veriga ili vuv vsichki verigi,
ako ne e zadadeno ime na veriga.
-N
(-new)nova - Suzdavane
na potrebitelski definirana veriga.
Tazi komanda iziskva samo ime na
verigakato zadulzhitelen argument.
-X
Iztrivane na potrebitelski definirana
veriga - Tazi komanda iziskva ime na
veriga. Tazi veriga triabva da bude
prazna. Podrazbirashtite se verigi ne
mogat da budat izchisteni.
-P (-policy)
politika - Zadavane na politika
za dadena veriga. Tazi komanda priema
kato zadulzhitelni argumenti ime na
veriga i tsel
-E (-rename chain)
preimenuvane na veriga - Tazi
komanda priema kato zadulzhitelni
argumenti staro ime na veriga i novo
ime na veriga.
-h (-help)
pomosht - Pomosht za sintaksisa na
komandite..
TSeli (politiki) v iptables
Vsiako pravilo,
koeto sustavia veriga, ima klauza “target”
(tsel), koiato opredelia kakvo se pravi s
otgovariashtite i paketi. Kogato niakoi
paket otgovaria na dadeno pravilo, sudbata
mu v povecheto sluchai e reshena okonchatelno,
ne se izpolzvat dopulnitelni pravila.
Vupreki che mnogo tseli sa definirani
vutreshno v iptables,
vse pak se pozvoliava kato tsel na pravilo
da se podade druga veriga.
TSelite, nalichni za izpolzvane
v pravilata na tablitsata filter,
sa ACCEPT, DROP,
REJECT, LOG,
MIRROR, QUEUE,
REDIRECT, RETURN
i ULOG. Kogato praviloto
vodi do izpolzvane na
ACCEPT
– propuskane na paketite
DROP - othvurlia
paketite tiho
REJECT - othvurlia
paketite i vrushta ICMP
suobshtenie za greshka
MASQUERADE - maskirane na paketa. Izpolzva se s POSTROUTING
LOG - dava prost
nachin za proslediavane na paketite,
koito otgovariat na pravilata
ULOG - predostavia
po- razshireni dnevnitsi.
REDIRECT - otkloniava
paketite kum proksi, vmesto da gi ostavi
da produlzhat po putia si. Tazi funktsiia
mozhe da se izpolzva, za da se prekara
tseliia ueb trafik na saita prez ueb kesh,
kakuvto e Squid.
RETURN
- terminira
definirani ot potrebitelite pravila
i e analogichna na kontraktsiiata return
pri izvikvane na podprotsedura.
MIRROR - razmenia
IP adresite
na iztochnika i destinatsiiata, predi da
izprati paketa.
QUEUE
-
podava
paketite na lokalni potrebitelski
programi chrez modul na iadroto.
Optsii na IPTABLES
S izvesten broi
optsii mozhete da izpolzvate znaka ! za
obrushtane na znachenieto im.
-p [!]
protokol - Tozi parametur svurzva
protokola na paketa. Tova mozhe da e edin
ot tcp, udp, icmp, or all, ili koito i da e protokol,
izbroen v /etc/protocols ili prosto mozhete da
polzvate nomera na protokola. Pulniiat
spisuk ot protokolni nomera mozhe da
bude nameren na
http://www.iana.org/assignments/protocol-numbers.
Toz primer priema vseki TCP paket
iptables -A INPUT -p tcp -j ACCEPT
Tozi primer priema OSPF (protokol nomer
89)
iptables -A INPUT -p 89 -j ACCEPT
Tozi trafik izpuska vseki paket, koito
ne e NOT UDP
iptables -A INPUT -p !udp -j DROP
-s [!] (–source) adres - Adres
na iztochnika. Mozhe da priema !, mrezhova
maska ili port. Adresut 0/0 otgovaria na
vsichki adresi i e podrazbirashtiiat se,
ako ne zadadete optsiia -s.
-d [!] (–destination) adres -
Adres na poluchatelia, posokata na IP adresa
. Sushtite kriterii kakto za -s.
--sport
[!] port[:port] - Validna e samo sle optsiia
-r tcp ili -r udp. Zadava port na iztochnika
ili diapazon ot portove ( diapazonite
se zadavat chrez izpolzvane na znakovete
- ili : za razdeliane na krainata i nachalnata
stoinost na diapazona). Mozhete da ia
izpolzvate s optsiiata -m multiport ( do 15 porta
mogat da budat zadadeni). Eto niakoi
primerni fragmenti ot pravilata:
-p tcp --sport 0:1023
-m multiport -p tcp
--sport 25,110
--dport [!] port[:port] - Validna e samo
sled niakoia ot optsiite -r tcp ili -p udp.
Podobna e na optsiiata --sport, no zadava
porta (portovete) na mestonaznachenieto.
-i [!] ime - Ime na vhodniia interfeis.
Priema v imeto na interfeisa nastavka
+, koiato oboznachava vsichki interfeisi
ot suotvetniia tip; toest rrr+ oznachava
vsichki RRR interfeisi (rrr0 - rrrN). Tazi
optsiia mozhe da se otnasia samo kum vhodniia
interfeis, taka che ne mozhe da bude
izpolzvana vuv verigite OUTPUT ili
POSTROUTING (ili vuv verigi, izvikani ot tezi
verigi).
-o [!] ime - Ime na izhodniia
interfeis. Podobna e na optsiiata -i, no se
prilaga samo za izhodniia interfeis i
suotvetnite verigi.
-j tsel -
Deistvieto (tselta) za pravilnoto (ime
na potrebitelski definirana veriga ili
spetsialna stoinost), ako paketut otgovaria
na nego. Spetsialnite stoinosti ACCEPT (
propuskane na paketa), DROP ( othvurliane na paketa),
QUEUE ( predavane na paketa kum prostranstvoto
na potrebitelia ) ili RETURN ( spirane na
izpulnenieto na tazi veriga i produlzhavane
ot sledvashtoto pravilo v predhodnata
[izvikvashta] veriga ), zavurshvat verigata.
-n - Ukazva adresite i portovete
da se izvedat kato chisla. Po podrazbirane
iptables se opitva da gi preobrazuva.
-v
- Rezhim na podrobno izvezhdane. Izvezhda
interfeisniia adres , optsiite na pravilata
(ako ima takiva), TOS maskite i broiachite
na paketite i baitovete. Izpolzvaite
-vv (2 v-ta) za izklyuchitelno podrobno
izvezhdane.
-x Razshiriavane na
chislata. Kogato broiachite na paketite i
baitovete se vizualizirat, ne se izpolzvat
sukrashteniiata K, M ili G, a se vizualizirat
samo nuli.
[!] -f - Vtoriiat i sledvashtite
fragmenti. Mozhe da bude predshestvana
ot !.
--line-numbers - Izpolzva se pri
izvezhdane na pravilata i pokazva nomerata
na redovete predi spetsifikatsiite.
--tcp-flags [!] spisuk s flagove - Validna
e samo sled optsiiata -r tcp. Tazi optsiia
izsledva spisuka s flagove i dava
suvpadenie samo ako te sa edinstvenite
vdignati flagove. Vuzmozhnite flagove
vklyuchvat: SYN, ACK, FIN, RST, URG, PSH i ALL NONE. Ako
iskate da izsledvate flagovete SYN, ACK,
RST i FIN, no da priemate samo tezi, koito
sa s vdignati SYN i ACK flagove (otgovor za
nova konektsiia), fragmentut ot praviloto
shte izglezhda po sledniia nachin:
-p
tcp --tcp-flags SYN,ACK,RST,FIN SYN,ACK
[!]--syn - Validna e samo sled
optsiiata -p tcp. Ekvivalentna e na slednoto:
--tcp-flags
SYN,RST,ACK SYN
--icmp-type [!]ICMP [pod]tip
- Validna e samo s optsiiata -p icmp.
Sledvat
validnite ICMP tipove i podtipove ( s
otmestvane navutre pod glavniia tip):
echo-replay (pong)
destination-unreachable
network-unreachable
host-unreachable
protocol-unreachable
port-unreachable
fragmentation-needed
source-route-failed
network-unknown
host-unknown
network-prohibited
host-prohibited
TOS-network-unreachable
TOS-host-unreachable
communication-prohibited
host-precedence-violation
precedence-cutoff
source-quench
redirect
network-redirect
host-redirect
TOS-network-redirect
TOS-host-redirect
echo-request (ping)
router-advertisement
router-solicitation
time-exceeded (ttl-exceeded)
ttl-zero-during-transmit
ttl-zero-during-reassembly
parameter-problem
ip-header-bad
required-option-missing
timestamp-request
timestamp-reply
address-mask-request
address-mask-reply
--mac-source
[!]mac-adres - Validna samo sled optsiata
-m mac. Polezna e vuv verigite INPUT ili
PREROUTING. Fragmentut ot praviloto shte
izglezhda po sledniia nachin:
-m mac --mac-source 00:00:ab:c0:45:a8
--limit skorost - Maksimalnata skorost
na suvpadeniiata (sredna stoinost).
Stoinostta po podrazbirane e 3/hour; vsichko
pod tazi skorost se othvurlia. Ako vashata
sistema ne mozhe da poddurzha poveche ot
edna nova konektsiia za sekunda, mozhete
da izpolzvate limit sus sledniia fragment
ot pravilo
-p tcp --syn
za da predpazite vashiia survur ot
pretovarvane, vupreki che tova obiknoveno
se izpolzva s tselta LOG, za da predpazite
dnevnitsite ot prekaleno burzo razrastvane.
Skorostta mozhe da vklyuchva period ot
vreme( podrazbirashtata se stoinost e
/hour) - /minute, /second, /hour ili /day. Eto edin
primeren fragment ot pravilo:
-m limit --limit 1/sec
--limit-burst broi - Maksimalniiat nachalen
broi paketi, koito da suvpadat, predi
da zapochne izpolzvaneto na predhodiashtoto
--limit skorost. Tazi stoinost se uvelichava
s edno vseki put, kogato predhodiashtoto
uslovie --limit skorost ne e izpulneno.
Podrazbirashtata se stoinost za --limit-burst
e 5.
--port [port[,port]] - Validna e
samo s optsiiata -p tcp ili -p udp i sle optsiiata
-m multiport ( vizhte fragmenta ot praviloto,
koito sledva).Suvpadenie ima samo ako
adresut na iztochnika, i adresut na
poluchatelia sa edni i sushti i suvpadat s
optsionalno zadadeniia port ( pozvoleni
sa do 15 razdeleni sus zapetai portove).
Eto edin primeren fragment ot pravioto
za mnozhestvo portove, koito suvpada
samo s portovete 25 i 110:
-m multiport -p tcp -- port 25,110
--mark stoinost[/maska] - Suvpada s
paketite s daden marker (stoinost bez
znak). Tazi stoinost triabva da bude
zadadena chrez tselta MARK.
--uid-owner uid
-Validna e samo kogato se izpolzva vuv
verigata OUTPUT. Identifitsira paketite,
suzdadeni ot opredelen potrebitel, i
dori togava raboti samo za niakoi lokalno
suzdadeni paketi.
iptables -F
veriga
iptables -P
veriga_tsel
iptables -A
veriga -i
interfeis -j
tsel
Purviiat format (-F)
izchistva vsichki predishni pravila ot
verigata. Vtoriiat format (-P)
nastroiva podrazbirashtata se politika
(ili oshte tsel) za verigata. Preporuchva se
izpolzvaneto na DROP
za podrazbirashtata se tsel na verigata.
Tretiiat format (-A) dobavia
tekushtata spetsifikatsiia kum verigata.
Osven ako ne se konkretizira tablitsa s
argument -t , komandite shte
sa prilagat kum tablitsata filter.
Parameturut -i prilaga
pravilo kum imenuvan interfeis, a -j
identifitsira tselta.
Podbral: mystical
Iztegli
.odt
variant
Izpolzvana literatura:
http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=programs&key=360886781#ss3.1
www.dhstudio.eu/iptables.odt
http://myfreesoft.net/phpBB2/viewtopic.php?t=346
http://itservice-bg.net/?p=53
http://mytech.bg/uroci/19/Unix/1396/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%B8+iptables
http://megimg.info/mg/modules/booklists/knigi/Comp/Internet/NAT%20HOWTO.txt