Zabranite icmp promet vašem VPN-u. Cisco ACL za napredne. Proširene pristupne liste. Resetirajte ili dopustite promet s određenih MAC adresa
Dakle, nastavimo se baviti ACL-ovima. Ovaj put imamo proširene ACL-ove. Uzet ćemo topologiju iz prethodnog članka, nadam se da ste je temeljito proučili. Ako to nije slučaj, toplo preporučujem da ga pročitate kako bi materijali u ovom članku bili razumljiviji.
Prije svega, počet ću s time što su prošireni ACL-ovi. Prošireni ACL-ovi omogućuju vam da navedete protokol, odredišnu adresu i priključke uz izvorišnu adresu. Kao i posebni parametri određenog protokola. Najbolje je učiti iz primjera, pa napravimo novi zadatak, komplicirajući prethodni. Usput, netko bi mogao biti zainteresiran za rješavanje pitanja distribucije prometa po prioritetu nakon ovoga, preporučujem QoS klasifikaciju i označavanje dobar članak, doduše na engleskom. Pa, za sada, vratimo se našem zadatku:
Zadatak.
- Dopusti echo zahtjeve od hostova na mreži 192.168.0.0/24 prema poslužitelju.
- S poslužitelja – zabrani echo zahtjeve internoj mreži.
- Dopusti WEB pristup poslužitelju s čvora 192.168.0.11.
- Dopusti FTP pristup poslužitelju s hosta 192.168.0.13.
Složen zadatak. I to ćemo riješiti cjelovito. Prije svega, pogledat ću sintaksu za korištenje proširenog ACL-a.
Proširene ACL opcije
<номер от 100 до 199> <действие permit, deny> <протокол> <источник> <порт> <назначение> <порт> <опции>
Brojevi portova navedeni su samo za TCP / UDP protokole, naravno. Mogu postojati i prefiksi ekv(broj porta jednak navedenom), gt/lt(broj porta je veći/manji od navedenog), nekv(broj porta nije jednak navedenom), domet(raspon luka).
Imenovani ACL-ovi
Usput, pristupne liste ne mogu se samo numerirati, već i imenovati! Možda će vam se ova metoda činiti prikladnijom. Ovaj put ćemo učiniti upravo to. Ove se naredbe izvode u kontekstu globalne konfiguracije, a sintaksa je:
Router(config)#ip access-list proširen<имя>
Dakle, počnimo s oblikovanjem pravila.
- Dopuštanje pingova s mreže 192.168.0.0/24
na poslužitelj. Tako, jeka-zahtjevi su protokol ICMP, odabrat ćemo našu podmrežu kao izvornu adresu, adresu poslužitelja kao odredišnu adresu, vrstu poruke – na dolaznom sučelju jeka, na izlazu - echo-odgovor. Router(config)#ip access-list extended INT_IN Router(config-ext-nacl)#permit icmp 192.168.0.0 0.0.0.255 host 10.0.0.100 echo Ups, što nije u redu s podmrežnom maskom? Da, ovo je trik ACL. Takozvani Zamjenski znak-maska. Izračunava se kao inverzna maska od uobičajene. Oni. 255.255.255.255
- Maska podmreže. U našem slučaju, podmreža 255.255.255.0
, nakon oduzimanja ono što ostaje je samo 0.0.0.255
.Mislim da ovo pravilo ne treba objašnjenje? Protokol icmp, adresa izvora – podmreža 192.168.0.0/24
, adresa odredišta - host 10.0.0.100, vrsta poruke – jeka(zahtjev). Inače, to je lako primijetiti host 10.0.0.100 ekvivalent 10.0.0.100 0.0.0.0
.Ovo pravilo primjenjujemo na sučelje. Router(config)#int fa0/0
Router(config-if)#ip access-group INT_IN u Pa, tako nešto. Sada, ako provjerite pingove, lako je vidjeti da sve radi dobro. Ovdje nas, međutim, čeka jedno iznenađenje koje će se pojaviti nešto kasnije. Neću još otkriti. Tko je pogodio - bravo! - S poslužitelja – zabranjujemo sve echo zahtjeve prema internoj mreži (192.168.0.0/24). Definiramo novu imenovanu listu, INT_OUT, i pripojimo je sučelju najbližem poslužitelju.
Router(config)#ip access-list extended INT_OUT
Router(config-ext-nacl)#deny icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo
Usmjerivač(config-ext-nacl)#izlaz
Router(config)#int fa0/1
Router(config-if)#ip access-group INT_OUT in
Dopustite mi da objasnim što smo učinili. Stvorio je proširenu pristupnu listu s nazivom INT_OUT, onemogućivši protokol u njoj icmp s tipom jeka od domaćina 10.0.0.100 po podmreži 192.168.0.0/24 i primijenjen na ulaz sučelja fa0/1, tj. najbliži poslužitelju. Pokušavamo poslati ping sa servera.
POSLUŽITELJ>ping 192.168.0.11
Pinganje 192.168.0.11 s 32 bajta podataka:
Odgovor od 10.0.0.1: Odredišni host nedostupan.
Odgovor od 10.0.0.1: Odredišni host nedostupan.
Odgovor od 10.0.0.1: Odredišni host nedostupan.
Ping statistika za 192.168.0.11:
Paketi: Poslano = 4, Primljeno = 0, Izgubljeno = 4 (100% gubitak)
Pa, činilo se da radi kako treba. Za one koji ne znaju slati pingove, kliknite na čvor koji nas zanima, na primjer poslužitelj. Idite na karticu Desktop, tamo Command Prompt. A sada, obećana šala. Pokušajte poslati ping s hosta, kao u prvoj točki. PC>ping 10.0.0.100
Pinganje 10.0.0.100 s 32 bajta podataka:
Zahtjev je istekao.
Zahtjev je istekao.
Zahtjev je istekao.
Zahtjev je istekao.Evo jedan za tebe. Sve je upravo radilo! Zašto je prestalo? Ovo je obećano iznenađenje. Objašnjavam u čemu je problem. Da, prvo pravilo nije nestalo. Dopušta slanje echo zahtjeva čvoru poslužitelja. Ali gdje je dopuštenje za prosljeđivanje echo odgovora? Otišao je! Šaljemo zahtjev, ali ne možemo prihvatiti odgovor! Zašto je prije sve radilo? Tada nismo imali ACL na sučelju. fa0/1. A kako nema ACL-a, onda je sve dozvoljeno. Morat ćete stvoriti pravilo koje će omogućiti primanje icmp odgovora.
Dodaj na popis INT_OUT
Dodajmo isto na popis INT_IN.
Router(config-ext-nacl)#permit icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-odgovor
Nemoj se žaliti. Sve ide super!
- Dopuštamo WEB pristup poslužitelju s čvora *.11.Činimo isto! Ovdje, međutim, trebate znati nešto o tome kako se pozivi odvijaju putem protokola sloja 4 (TCP, UDP). Port klijenta odabire se proizvoljno > 1024, a port poslužitelja odabire se u skladu s uslugom. Za WEB, ovo je port 80 (http protokol) Što je s WEB poslužiteljem? Prema zadanim postavkama, WEB usluga je već instalirana na poslužitelju, možete je vidjeti u postavkama čvora. Provjerite postoji li kvačica. A možete se spojiti na poslužitelj odabirom prečaca "Web preglednik" na "Radnoj površini" bilo kojeg čvora. Naravno, sada neće biti pristupa. Zato što imamo ACL-ove na sučeljima usmjerivača, a oni nemaju nikakva pravila dopuštenja za pristup. Pa, stvorimo INT_IN pristupnu listu (koja je na sučelju fa0/0) dodajte pravilo: Router(config-ext-nacl)#permit tcp host 192.168.0.11 gt 1024 host 10.0.0.100 eq 80 To jest, dopuštamo TCP protokol s našeg hosta (proizvoljni port, > 1024) na adresu poslužitelja , HTTP port.
I, naravno, suprotno pravilo je na popisu INT_OUT (koji se nalazi na sučelju fa0/1):
Router(config-ext-nacl)#permit tcp host 10.0.0.100 eq 80 host 192.168.0.11 uspostavljen
Odnosno dopuštamo TCP iz luke 80 poslužitelja po hostu *.11 , a veza bi već trebala biti uspostavljena! Možda umjesto toga uspostavljena ukazuju na isto GT 1024, djelovat će jednako dobro. Ali značenje je malo drugačije.
Odgovorite u komentarima što bi bilo sigurnije?
- Dopuštamo FTP pristup od *.13 čvora do poslužitelja. Ni apsolutno ništa komplicirano! Pogledajmo kako se interakcija odvija putem FTP protokol. U budućnosti planiram posvetiti cijeli niz članaka radu različitih protokola, jer je to vrlo korisno u stvaranju preciznih (snajperskih) ACL pravila. Pa, za sada: Akcije poslužitelja i klijenta:+ Klijent pokušava uspostaviti vezu i šalje paket (koji sadrži indikaciju da će raditi u pasivnom načinu) na port 21 poslužitelja sa svog porta X (X > 1024, slobodan port) + Poslužitelj šalje odgovor i prijavljuje svoj broj porta za formiranje podataka kanala Y (Y > 1024) klijentskom portu X, ekstrahiranom iz zaglavlja TCP paketa.+ Klijent započinje komunikaciju za prijenos podataka na portu X+1 na poslužiteljski port Y (preuzeto iz zaglavlja prethodne transakcije). Nešto kao ovo. Zvuči malo komplicirano, ali samo trebate shvatiti! Dodajte pravila na popis INT_IN:
dozvoli tcp host 192.168.0.13 gt 1024 host 10.0.0.100 eq 21
dozvoli tcp host 192.168.0.13 gt 1024 host 10.0.0.100 gt 1024I dodajte pravila na popis INT_OUT:
dozvoli tcp host 10.0.0.100 eq ftp host 192.168.0.13 gt 1024
dozvoli tcp host 10.0.0.100 gt 1024 host 192.168.0.13 gt 1024Provjera od naredbeni redak, tim ftp 10.0.0.100, gdje se prijavljujemo koristeći svoje vjerodajnice cisco:cisco(preuzeto iz postavki poslužitelja), tamo unesite naredbu red i vidjet ćemo da se podaci, kao i naredbe, uspješno prenose.
To je otprilike sve što se tiče proširenih popisa pristupa.
Dakle, pogledajmo naša pravila:
Router#sh pristup
Proširena IP pristupna lista INT_IN
dopustiti icmp 192.168.0.0 0.0.0.255 host 10.0.0.100 echo (17 podudaranja)
dozvoli icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-odgovor
dozvoli tcp host 192.168.0.11 gt 1024 host 10.0.0.100 eq www (36 podudaranja)
dozvoli tcp host 192.168.0.13 gt 1024 host 10.0.0.100 eq ftp (40 podudaranja)
dozvoli tcp host 192.168.0.13 gt 1024 host 10.0.0.100 gt 1024 (4 podudaranja)
Proširena IP pristupna lista INT_OUT
zabrani icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo (4 podudaranja)
dozvoli icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-odgovor (4 podudaranja)
dopustiti tcp host 10.0.0.100 eq www host 192.168.0.11 uspostavljen (3 podudaranja)
dozvoli tcp host 10.0.0.100 eq ftp host 192.168.0.13 gt 1024 (16 podudaranja)
dozvoli tcp host 10.0.0.100 gt 1024 host 192.168.0.13 gt 1024 (3 podudaranja)
Korisnicima često smeta sporost interneta. To se posebno odnosi na veliku vojsku amatera mrežne igrice. Možete smanjiti potencijalna kašnjenja tako da onemogućite značajku ping.
Trebat će vam
- - osobno računalo s instaliranim Windows operativnim sustavom;
- - Pristup internetu.
upute
upute
Možete naučiti kako konfigurirati MikroTik na online tečaju o opremi ovog proizvođača. Autor tečaja je certificirani MikroTik trener. Više možete pročitati na kraju članka.
Članak daje odgovor na pitanje koliko je opasno blokirati ICMP promet.
ICMP je jabuka razdora
Mnogi mrežni administratori vjeruju da Internet Control Message Protocol (ICMP) predstavlja sigurnosni rizik i stoga ga treba uvijek blokirati. Istina je da protokol ima neke povezane sigurnosne probleme i da bi neke zahtjeve trebalo blokirati. Ali to nije razlog blokirati sav ICMP promet!
ICMP promet ima mnoge važne funkcije; neki od njih su korisni za rješavanje problema, dok su drugi potrebni za pravilan rad mreže. Ispod su neki važni dijelovi ICMP protokola koje biste trebali znati. Trebali biste razmotriti kako ih najbolje usmjeriti kroz svoju mrežu.
Echo zahtjev i Echo odgovor
IPv4 – Echo zahtjev (Type8, Code0) i Echo odgovor (Type0, Code0)
IPv6 – Echo zahtjev (Type128, Code0) i Echo odgovor (Type129, Code0)
Svi dobro znamo da je ping jedan od prvih alata za rješavanje problema. Da, ako omogućite obradu ICMP paketa na svom hardveru, to znači da je vaš host sada vidljiv, ali ne sluša li vaš već port 80 i šalje odgovore na zahtjeve klijenta? Naravno, blokirajte i ove zahtjeve ako stvarno želite da vaš DMZ bude na rubu mreže. Ali blokiranjem ICMP prometa unutar vaše mreže nećete ojačati svoju sigurnost; naprotiv, završit ćete sa sustavom s nepotrebno složenim postupkom rješavanja problema ("Molimo provjerite odgovara li pristupnik na mrežne zahtjeve?", "Ne, ali to me uopće ne uzrujava jer me nije briga.” neće ništa reći!”).
Zapamtite, također možete dopustiti zahtjevima da idu u određenom smjeru; na primjer, konfigurirajte opremu tako da Echo zahtjevi s vaše mreže idu na Internet, a Echo odgovori s Interneta na vašu mrežu, ali ne obrnuto.
Potrebna fragmentacija paketa (IPv4) / Paket je prevelik (IPv6)
IPv4 – (Tip3, Kod4)
IPv6 – (Type2, Code0)
Ove komponente ICMP protokola vrlo su važne jer su važna komponenta u Path MTU Discovery (PMTUD), koji je sastavni dio TCP protokol. Omogućuje dvama glavnima da prilagode vrijednost TCP maksimalne veličine segmenta (MSS) na vrijednost koja odgovara najmanjem MTU duž komunikacijskog puta između dva odredišta. Ako duž putanje paketa postoji čvor s manjom maksimalnom jedinicom prijenosa od pošiljatelja ili primatelja, a oni nemaju sredstva za otkrivanje ovog sudara, tada će promet biti tiho odbačen. I nećete razumjeti što se događa s komunikacijskim kanalom; drugim riječima, "za vas će doći veseli dani".
Nemojte fragmentirati – ICMP neće proći!
Prijenos IPv4 paketa s postavljenim bitovima Nemoj fragmentirati (većina njih!) ili IPv6 paketa (zapamtite da u IPv6 nema fragmentacije usmjerivačima) koji su preveliki za prijenos kroz sučelje uzrokovat će da usmjerivač odbaci paket i generirajte odgovor izvoru prijenosa sa sljedećim ICMP pogreškama: Potrebna fragmentacija ( Potrebna fragmentacija), ili pakiranje je preveliko ( Paket također velik). Ako se odgovori s ovim pogreškama ne mogu vratiti pošiljatelju, on će protumačiti izostanak potvrdnih odgovora o isporuci ACK paketa ( Priznanje) od primatelja kao zagušenje/gubitak i izvor za ponovni prijenos paketa koji će također biti odbačeni.
Teško je identificirati uzrok takvog problema i brzo ga riješiti; TCP postupak rukovanja radi dobro jer uključuje male pakete, ali čim dođe do masovnog prijenosa podataka, sesija prijenosa se zamrzava jer izvor prijenosa ne primati poruke o greškama.
Istraživanje putanje isporuke paketa
RFC 4821 je osmišljen kako bi pomogao sudionicima u mrežnom prometu da zaobiđu ovaj problem korištenjem ispitivanja putanje paketa (Otkrivanje puta MTU (PLPMTUD). Standard vam omogućuje otkrivanje maksimalne količine podataka (Maksimalna prijenosna jedinica (MTU), koji se može prenijeti protokolom u jednoj iteraciji, postupnim povećanjem maksimalne veličine korisnog bloka podataka (Maksimalna veličina segmenta (MSS), kako bi se pronašla najveća moguća veličina paketa bez njegovog fragmentiranja na putu od odašiljača do prijamnika. Ova funkcionalnost smanjuje ovisnost o pravodobnom primanju odgovora na pogreške putem Internet Control Message Protocol (ICMP) i dostupna je u većini skupova mrežnih uređaja i operativnih sustava klijenata. Nažalost, nije tako učinkovita kao izravno dobivanje podataka o maksimalnoj mogućoj veličini poslanih paketa. Molimo dopustite ovim ICMP porukama da se vrate na izvor prijenosa, u redu?
Vrijeme prijenosa paketa je prekoračeno
IPv4 – (Tip11, Kod0)
IPv6 – (Tip3, Kod0)
Traceroute je vrlo koristan alat za rješavanje problema mrežne veze između dva domaćina, s pojedinostima o svakom koraku puta.
Šalje paket s vijekom trajanja podatkovnog paketa za IP protokol (Vrijeme za život (TTL) jednak 1 da bi prvi usmjerivač poslao poruku o pogrešci (uključujući vlastitu IP adresu) da je paketu isteklo vrijeme života. Zatim šalje paket s TTL 2 i tako dalje. Ovaj postupak je neophodan kako bi se otkrio svaki čvor duž putanje paketa.
NDP i SLAAC (IPv6)
Traženje usmjerivača (RS) (Type133, Code0)
Oglašavanje usmjerivača (RA) (Type134, Code0)
Privlačenje susjeda (NS) (Type135, Code0)
Oglašavanje susjeda (NA) (Type136, Code0)
Preusmjeravanje (Tip137, Kod0)
Dok je IPv4 koristio protokol razlučivanja adrese (ARP) za mapiranje sloja 2 i sloja 3 mrežni model OSI, IPv6 ima drugačiji pristup u obliku Neighbor Discovery Protocol (NDP). NDP pruža mnoge značajke uključujući otkrivanje usmjerivača, otkrivanje prefiksa, razlučivanje adrese i više. Uz NDP, StateLess Address AutoConfiguration (SLAAC) omogućuje dinamičku konfiguraciju glavnog računala na mreži, slično konceptu Dynamic Host Configuration Protocol (DHCP) (iako je DHCPv6 namijenjen za detaljniju kontrolu).
Ovih pet tipova ICMP poruka ne smiju biti blokirani unutar vaše mreže (zanemarujući vanjski perimetar) kako bi IP protokol za prijenos podataka ispravno funkcionirao.
ICMP numeriranje tipa
Internet Control Message Protocol (ICMP) sadrži mnogo poruka koje su identificirane poljem "type".
Tip | Ime | Specifikacija |
---|---|---|
0 | Odgovor jekom | |
1 | Nedodijeljeno | |
2 | Nedodijeljeno | |
3 | Odredište nedostupno | |
4 | Gušenje izvora (zastarjelo) | |
5 | Preusmjeri | |
6 | Alternativna adresa glavnog računala (zastarjelo) | |
7 | Nedodijeljeno | |
8 | Jeka | |
9 | Oglas za ruter | |
10 | Traženje usmjerivača | |
11 | Vrijeme je prekoračeno | |
12 | Problem s parametrima | |
13 | Vremenska oznaka | |
14 | Vremenska oznaka Odgovor | |
15 | Zahtjev za informacijama (zastarjelo) | |
16 | Informacijski odgovor (zastarjelo) | |
17 | Zahtjev za masku adrese (zastarjelo) | |
18 | Odgovor maske adrese (zastarjelo) | |
19 | Rezervirano (za sigurnost) | Solo |
20-29 | Rezervirano (za eksperiment robusnosti) | ZSu |
30 | Traceroute (zastarjelo) | |
31 | Pogreška konverzije datagrama (zastarjelo) | |
32 | Preusmjeravanje mobilnog hosta (zastarjelo) | David_Johnson |
33 | IPv6 Gdje ste (zastarjelo) | |
34 | IPv6 I-Am-Here (zastarjelo) | |
35 | Zahtjev za mobilnu registraciju (zastarjelo) | |
36 | Odgovor o mobilnoj registraciji (zastarjelo) | |
37 | Zahtjev za naziv domene (zastarjelo) | |
38 | Odgovor na naziv domene (zastarjelo) | |
39 | PRESKOČI (zastarjelo) | |
40 | Photuris | |
41 | ICMP poruke koje koriste eksperimentalni protokoli mobilnosti kao što je Seamoby | |
42 | Prošireni eho zahtjev | |
43 | Prošireni eho odgovor | |
44-252 | Nedodijeljeno | |
253 | Eksperiment 1 u stilu RFC3692 | |
254 | Eksperiment 2 u stilu RFC3692 | |
255 | Rezervirano |
Nekoliko riječi o ograničenjima brzine
Iako ICMP poruke poput onih opisanih u ovom članku mogu biti vrlo korisne, zapamtite da generiranje svih ovih poruka oduzima CPU vrijeme na vašim usmjerivačima i generira promet. Očekujete li doista da ćete dobiti 1000 pingova u sekundi kroz svoj firewall u normalnoj situaciji? Hoće li se to smatrati normalnim prometom? Vjerojatno ne. Ograničiti propusnost mreže za ove vrste ICMP prometa kako vam odgovara; ovaj vam korak može pomoći da zaštitite svoju mrežu.
Čitajte, istražujte i razumite
S obzirom da rasprava o temi “blokirati ili ne blokirati” ICMP pakete uvijek dovodi do zabune, sporova i neslaganja, predlažem da nastavite proučavati ovu temu sami. Dao sam mnogo poveznica na ovoj stranici; vjerujem da biste za potpunije razumijevanje problema trebali potrošiti vrijeme na njihovo čitanje. I donesite informirane odluke o tome što najbolje funkcionira za vašu mrežu.
MikroTik: gdje kliknuti da bi radio?
Uz sve svoje prednosti, MikroTik proizvodi imaju jedan nedostatak - postoji mnogo razbacanih i ne uvijek pouzdanih informacija o njegovoj konfiguraciji. Preporučujemo pouzdani izvor na ruskom, gdje je sve prikupljeno, logično i strukturirano - video tečaj “ Postavljanje MikroTik opreme" Tečaj uključuje 162 video lekcije, 45 laboratorijskih radova, pitanja za samotestiranje i bilješke. Svi materijali ostaju kod vas na neodređeno vrijeme. Početak tečaja možete pogledati besplatno ostavljanjem zahtjeva na stranici tečaja. Autor tečaja je certificirani MikroTik trener.
Vatrozid je prva linija obrane za bilo koji poslužitelj i protiv njega ispravne postavke ovisi o tome može li napadač dalje napredovati u svojim pokušajima prodora u sustav. Suvremeni vatrogasni softver nudi mnogo sigurnosnih mehanizama pomoću kojih možete držati 99% napadača izvan petlje. I sve to bez potrebe za kupnjom skupe opreme i komercijalnog softvera.
Glavni cilj svih hakera je dobiti pristup interpreteru naredbi poslužitelja kako bi iskoristili njegove mogućnosti u svoju korist. Najčešće se prodor u "svetinju nad svetinjama" provodi pomoću rupa u uslugama ili putem pogađanja lozinke (gruba sila) jednoj od njih (na primjer, ssh).
Skeniranje priključaka
Kako bi identificirao prisutnost ranjivih usluga na računalu, napadač izvodi izviđanje pomoću skenera portova i raznih sustava za otkrivanje ranjivosti. Obično se nmap koristi kao skener portova, koji može skenirati desetke na razne načine au nekim slučajevima može otkriti verzije OS-a i usluge. Ovdje je popis posebno popularnih nmap zastavica koje obično koriste napadači:
Nmap oznake koje se koriste tijekom skeniranja
- -sT - normalno TCP skeniranje otvaranjem veze na navedeni port i njezinim prekidom;
- -sS - SYN/ACK skeniranje, veza se prekida odmah nakon odgovora na zahtjev za otvaranjem veze;
- -sU - UDP skeniranje;
- -sF - skeniranje u paketima s postavljenom FIN zastavom;
- -sX - skeniranje s paketima s postavljenim zastavicama FIN, PSH i URG;
- -sN - skeniranje u paketima bez postavljenih zastavica.
Metoda protiv skeniranja je jednostavna i poznata svakom administratoru sustava. Sastoji se od jednostavnog zatvaranja svih usluga koje ne bi trebale biti vidljive s vanjske mreže. Na primjer, ako stroj pokreće usluge ssh, samba i apache, a samo web poslužitelj s korporativnom web stranicom trebao bi biti vidljiv iz vanjskog svijeta, vatrozid se može konfigurirati ovako:
Početno postavljanje iptables
outif="eth1"
iptables -F
iptables -i $outif -A INPUT \
-m praćenje\
--ctstate USTANOVLJENO, POVEZANO \
-j PRIHVATITI
iptables -i $outif -A INPUT -p tcp \
--dport 80 -j PRIHVATITI
iptables -i $outif -P INPUT DROP
iptables -i $outif -P PRIHVAĆANJE IZLAZA
Početno postavljanje ipfw-a
outif="rl0"
ipfw dodaj dopusti ip od bilo kojeg do bilo kojeg \
putem lo0
ipfw dodaj dopusti ip od mene bilo kojem \
preko $outif
ipfw add dopusti tcp od bilo koje meni \
uspostavljen putem $outif
ipfw dodaj dopusti tcp s bilo kojeg 80 \
meni putem $outif
ipfw dodaj zabrani ip s bilo kojeg na bilo koji \
preko $outif
Početna pf postavka
outif="rl0"
postavite preskakanje na lo0
blokiraj sve
onesvijestiti se na $outif od $outif \
u bilo koje stanje zadržati
proslijedi $outif proto iz bilo kojeg \
na $outif port 80
Sva tri skupa pravila čine istu stvar - dopuštaju bilo kojem prometu da prođe kroz sučelje povratne petlje, dopuštaju prihvaćanje paketa iz već uspostavljenih veza (tako da, na primjer, preglednik može primiti odgovor na zahtjev za udaljeni poslužitelj), dopustite pozive prema priključku 80, blokirajući sve ostale i dopustite sve veze prema van. Imajte na umu da ako smo u primjerima iptables i ipfw izričito postavili pravila za dopuštanje primanja paketa iz već uspostavljenih veza, tada je u slučaju pf bilo dovoljno navesti "zadrži stanje" u skupu pravila, dopuštajući sve odlazne veze.
Općenito, ova shema za zaštitu mrežnih usluga od skeniranja i upada radi izvrsno, ali možemo ići dalje i konfigurirati vatrozid tako da se neke vrste skeniranja uopće ne mogu izvoditi. Tehnički to ne možemo učiniti za redovita skeniranja (nmap oznake "-sT", "-sS" i "-sU") jednostavno zato što tu nema ništa kriminalno, ali nestandardne vrste skeniranja kao što su "-sN" "-sF " i "-sX" generiraju pakete koje nikako nisu mogle stvoriti legitimne aplikacije.
Stoga, bez imalo sumnje, odbacujemo takve veze.
Metode za borbu protiv egzotičnih vrsta skeniranja
# Onemogućite FIN skeniranje
Linux> iptables -A INPUT –p tcp\
–m tcp\
--tcp-flags FIN,ACK FIN -j DROP
FreeBSD>
nije uspostavljen tcpflags fin
# Onemogući X-scan
Linux>
--tcp-zastavice FIN,SYN,RST,PSH,ACK,URG
FIN,SYN,RST,PSH,ACK,URG\
–j KAP
FreeBSD> ipfw add reject tcp from any to any \
tcp zastavice fin, syn, rst, psh, ack, urg
# Onemogući N-scan
Linux> iptables -A INPUT –p tcp –m tcp\
--tcp-zastavice FIN,SYN,RST,PSH,ACK,URG NEMA –j DROP
FreeBSD> ipfw add reject tcp from any to any \
tcp zastavice !fin, !syn, !rst, !psh, !ack, !urg
U OpenBSD-u se svi ti redovi mogu zamijeniti jednostavnim unosom na početku
/etc/pf.conf:
ribati u svim
Direktiva čišćenja omogućuje mehanizam normalizacije paketa u kojem se fragmentirani paketi ponovno spajaju, a paketi s nevažećim kombinacijama zastavica se odbacuju. Osim egzotičnih vrsta skeniranja, scrub vam također omogućuje da se zaštitite od obmanjujućih sustava za otkrivanje upada (slanje visoko fragmentiranih paketa) i nekih vrsta DoS napada.
Za zaštitu od SYN/ACK skeniranja pokrenutih korištenjem nmap "-sS" oznake, možemo koristiti pasivnu metodu otiska OS-a dostupnu u pf i iptables/netfilter vatrozidima (od verzije 1.4.6). Tijekom redovnog skeniranja (zastavica "-sT"), nmap koristi standardno sučelje utičnice operativnog sustava, tako da se takvo skeniranje gotovo ne razlikuje od toka regularnih paketa (pogledat ćemo neke od njegovih razlika u nastavku), međutim , tijekom SYN/ACK skeniranja, nmap sam generira pakete, tako da imaju neke značajke koje odaju njihov izvor. Pasivna metoda otkrivanja OS-a omogućuje vam da identificirate te pakete i odbacite ih pomoću standardnih pravila vatrozida:
OpenBSD> blokirajte brzo iz bilo kojeg OS NMAP-a
Linux> iptables -I INPUT -p tcp -m osf --genre NMAP \
-j ISPUŠTITI
Osf modul vatrozida iptables/netfilter koristi bazu podataka otisaka prstiju koju su sastavili i ažurirali programeri OpenBSD-a (/etc/pf.os), tako da bi oba ova pravila trebala dati iste rezultate. Također je zanimljivo da se mogu učinkovito suprotstaviti funkciji otkrivanja OS-a uslužnog programa nmap (oznaka "-O").
Sada smo zaštićeni od gotovo svih vrsta skeniranja, osim standardnog i glupog "-sT". Što učiniti s njim? Zapravo je jednostavno. Činjenicu skeniranja portova lako je uočiti jednostavnom analizom zapisa vatrozida. Ako je u kratkom vremenskom razdoblju bilo mnogo veza na različite portove, to znači da smo bili skenirani. Sve što ostaje je prenijeti ovu ideju na pravila vatrozida. Postoji izvrstan recept za iptables koji blokira sve koji su preuporni u kucanju na portove koji ne rade:
Borba protiv skeniranja s iptables
# Provjerite kucanje na neradnim portovima (10 na sat)
--sekundi 3600 --broj pogodaka 10 --rttl -j POVRATAK
# Druga provjera za kucanje na neradnim portovima (2 u minuti)
iptables -A INPUT -m recent --rcheck \
--sekundi 60 --broj pogodaka 2 --rttl -j POVRATAK
# Stavili smo adrese onih koji kucaju na listu
iptables -A INPUT -m recent --set
# Odbacite pakete od svih onih koji prekorače ograničenje za
broj veza
iptables -P INPUT -j DROP
Instaliranjem paketa xtables-addons, koji sadrži razvoj patch-omatic projekta, dobit ćemo pristup PSD (Port Scan Detect) modulu, implementiranom po uzoru na scanlogd demon. Svi prethodni redovi mogu se lako zamijeniti jednostavnim pravilom:
# iptables -A INPUT -m psd -j DROP
Nažalost, nema ništa slično u ipfw i pf filterima paketa, ali to nije problem, jer se PortSentry daemon i scanlogd dobro suprotstavljaju skeniranjem portova.
Zabrana icmp poruka
Također je dobra praksa onemogućiti ICMP poruke koje bi mogle uzrokovati Dodatne informacije o hostu ili se koristiti za izvođenje raznih zlonamjernih radnji (na primjer, mijenjanje tablice usmjeravanja). Dolje je tablica s popisom mogućih vrsta ICMP poruka:
Vrste ICMP poruka
- 0 - echo odgovor (echo odgovor, ping)
- 3 - odredište nedostupno (adresat je nedostupan)
- 4 - prigušivanje izvora (prigušivanje izvora, molimo vas da pakete šaljete sporije)
- 5 - preusmjeriti
- 8 - echo zahtjev (echo zahtjev, ping)
- 9 - reklama usmjerivača
- 10 - traženje usmjerivača
- 11 - premašeno vrijeme života (istek životnog vijeka paketa)
- 12 - IP zaglavlje loše (neispravno zaglavlje IP paketa)
- 13 - zahtjev za vremenski žig (zahtjev za vrijednošću vremenskog brojača)
- 14 - odgovor na vremensku oznaku (odgovor na zahtjev za vrijednošću brojača vremena)
- 15 - zahtjev za informacijama
- 16 - informacijski odgovor (odgovor na zahtjev za informacijama)
- 17 - zahtjev za adresnu masku (zahtjev za mrežnu masku)
- 18 - odgovor maske adrese (odgovor na zahtjev maske mreže)
Kao što vidite, odgovaranje na neke ICMP poruke može rezultirati otkrivanjem nekih informacija o hostu, dok druge mogu rezultirati izmjenom tablice usmjeravanja, pa ih je potrebno onemogućiti.
Tipično, ICMP porukama 0, 3, 4, 11 i 12 dopušten je izlaz u vanjski svijet, dok se kao ulaz prihvaćaju samo 3, 8 i 12. Evo kako je to implementirano u različitim vatrozidima:
Zabrana opasnih ICMP poruka
Linux> iptables -A INPUT -p icmp\
-icmp-tip 3,8,12 -j PRIHVAT
Linux> iptables -A IZLAZ -p icmp\
-icmp-tip 0,3,4,11,12 -j PRIHVAT
FreeBSD> ipfw add dopusti icmp \
od bilo kojeg do $outif u \
putem $outif icmptype 3,8,12
FreeBSD> ipfw add dopusti icmp \
od $outif do bilo kojeg outa \
putem $outif icmptype 0,3,4,11,12
OpenBSD> pass inet proto icmp \
od bilo kojeg do $outif \
icmp-type ( 3, 8, 12 ) zadržati stanje
OpenBSD> pass out inet proto icmp \
od $outif do bilo kojeg \
icmp-vrsta (0, 3, 4, 11, 12)\
zadržati stanje
Ako želite, možete blokirati sav ICMP promet, uključujući ping zahtjeve, ali to može utjecati na ispravan rad mreže.
Sirova snaga
Nakon što smo izvidjeli informacije o otvorene luke i OS, napadač pokušava prodrijeti u sustav, što se može temeljiti na iskorištavanju rupa u uslugama ili pogađanju lozinki. Vatrozid nam neće pomoći u sprječavanju mogućnosti hakiranja usluga, ali je lako usporiti proces brutalnog nametanja lozinki. Da bi se to postiglo, koriste se mogućnosti za ograničavanje broja paketa koji stižu na stroj s jedne IP adrese. Evo kako to učiniti pomoću iptables:
Brute force zaštita s iptables
# Lanac za provjeru spojeva
iptables -N brute_check
# Blokiraj adresu ako je preko 60
sekundi je pokrenuo više od 2 veze
--ažuriraj --sekundi 60\
--hitcount 3 -j DROP
# Ako nije, dopustite vezu i
dodajte adresu na popis
iptables -A brute_check -m recent\
--set -j PRIHVATITI
# Obrišite lanac INPUT
iptables -F ULAZ
# Pošalji brute_check u lanac
svi koji se pokušaju povezati s
22. luka
--ctstate NOVO -p tcp \
--dport 22 -j gruba_provjera
iptables -P INPUT DROP
Isto se može učiniti pomoću pf:
Brute force zaštita pomoću pf
# Napravite stol za brute forcers
stol
# Blokiraj sve koji uđu u to
blokirati brzo od
# Stavite u bruteforcer tablicu svakoga tko pokrene više od dvije veze na portu 22 u minuti
proslijedite na $ext_if inet proto tcp u $outif \
port 22 zastave S/SA zadržati stanje \
(max-src-conn-rate 60/2, \preopterećenje
Vatrozid ipfw nema dovoljno funkcionalnosti za učinkovito suzbijanje bruteforcera, pa njegovi korisnici moraju koristiti naprednije alate visoka razina, poput posebnih PAM modula, sustava za otkrivanje upada i programa poput sshguarda.
lažiranje
Spoofing (krivotvorenje izvorne adrese paketa) može se koristiti za izvođenje DoS napada ili zaobilaženje vatrozida. U prvom slučaju lažiranje daje veliku prednost napadaču, jer značajno komplicira odgovor na napad (pakete koji stižu s potpuno različitim adresama pošiljatelja nije tako lako klasificirati i blokirati) i odgađa proces zatvaranja novih veza (obično lažna adresa je nedostupna, pa se veza zatvara tek nakon isteka vremenskog ograničenja). Spoofing, koji se provodi kako bi se zaobišli sigurnosni sustavi, manje je opasan i u većini slučajeva može se kontrolirati.
Vrlo često, blokiranje vanjskog mrežne usluge hosta, administratori sustava ostavite ih otvorenima za određeni raspon adresa (na primjer, za povezivanje s kućnog računala). Nakon što je otkrio jednu od ovih adresa, napadač može formirati paket koristeći tu adresu kao povratnu adresu i tako se “provući” kroz vatrozid. Zatim može pogoditi redne brojeve TCP paketa i osigurati da servis koji vjeruje povratnoj adresi izvrši željenu radnju. Ovo je vrlo težak napad za implementaciju, koji ipak može izvesti kompetentan stručnjak, a ako govorimo o UDP protokolu, onda to može učiniti čak i haker.
Srećom, lako se zaštititi od ovih napada. Dovoljno je ne otvarati portove nezaštićenih servisa prema vanjskom svijetu, a u slučaju hitne potrebe koristiti sigurnosne sustave samih servisa (primjerice, ssh certifikate) ili mehanizam “port knocking” (o kojem se govori na kraju članak).
Situacija postaje kompliciranija kada je u pitanju mrežni most, odvajajući unutarnju i vanjsku mrežu (ili dvije lokalne mreže). Odnosi povjerenja unutar lokalna mreža- Uobičajena stvar. Usluge su dostupne svima, nema autentifikacije, enkripcije itd. - samo slastan zalogaj za provalnika. Budući da je na vanjskoj mreži, može saznati mrežnu masku interne mreže i generirati pakete s odgovarajućom povratnom adresom, što će dovesti do pristupa svim lokalnim resursima. Ovo je doista opasna situacija, ali se lako može spriječiti pravilnom konfiguracijom vatrozida ili OS-a.
Da biste to učinili, dovoljno je zabraniti prolaz paketima čije povratne adrese odgovaraju onima koje se koriste u internoj mreži s vanjskog sučelja:
Linux> iptables -A INPUT -i $outif \
-s 192.168.1.0/24 -j PONICI
FreeBSD> ipfw dodaj zabrani ip od \
192.168.1.0/24 na bilo koji putem $outif
OpenBSD> blokirati na $outif iz \
192.168.1.0/24 na bilo koji
Kao alternativu ili dodatnu sigurnosnu mjeru, možete (pa čak i trebate) koristiti posebne ipfw i pf direktive i postavke Linux kernela:
Linux> echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
FreeBSD> ipfw dodaj deny ip from any u any not antispoof in
OpenBSD> brzo antispoof za $ext_if
Ove tri naredbe daju iste rezultate. Svi paketi čije povratne adrese odgovaraju mrežnoj maski drugog sučelja se odbacuju.
Prednosti IPTABLES-a
Na kraju članka, pogledat ćemo nekoliko zanimljivih značajki iptables/netfilter koje mogu biti korisne u zaštiti vašeg poslužitelja od upada. Počnimo s mehanizmom daljinski upravljač firewall, nazvan "port knocking". Njegova je bit prisiliti vatrozid da izvrši određene radnje nakon povezivanja na određeni priključak. Ispod je primjer pravila koja otvaraju SSH port na 10 sekundi nakon kucanja na port 27520:
iptables i lupanje porta
# Lanac za provjeru veza sa zaštićenim portom
iptables -N kucati
# Dopustite vezu ako je došlo do kucanja unutar posljednjeg
10 sekundi
iptables -Knock -m recent --rcheck --seconds 10\
-j PRIHVATITI
# Obriši ULAZ
iptables -F ULAZ
# Dopusti sve što se već odnosi na uspostavljene veze
iptables -A INPUT -m conntrack\
--ctstate UTVRĐEN, POVEZAN -j PRIHVATLJIV
# Svi pokušaji otvaranja veze na port 22 se šalju
provjeriti u lancu kucanja
-p tcp --dport 22 -j kucanje
# Dodajte adresu osobe koja kuca na port 27520 na popis
iptables -A INPUT -m conntrack --ctstate NOVO \
-p tcp --dport 27520 -m recent --set
# Kada kucate na susjedne portove, uklonite adresu s popisa
iptables -A INPUT -m conntrack --ctstate NOVO -p tcp \
-m multiport --dport 27519,27521 -m recent --ukloni
# Zabraniti sve
iptables -P INPUT DROP
Treće pravilo od kraja dodaje adresu osobe koja kuca na popis. Ako isti stroj pristupi priključku 22 unutar 10 sekundi od kucanja, veza će se uspostaviti. Pretposljednje pravilo je zaštita od "grubog udarca". Ako napadač pokuša pokucati na sve portove uzastopno s nadom da će jedan od njih otvoriti port 22, ovo pravilo će raditi i njegova će adresa biti uklonjena s popisa odmah nakon što je pogodi.
Drugi uslužni program iptables distribuira se u paketu xtables-addons (patch-o-matic) i zove se TARPIT. Ovo je radnja (isto kao ACCEPT ili DENY) koja "visi" vezu, sprječavajući napadača da je zatvori. Veza čiji paketi padnu u TARPIT bit će uspješno uspostavljena, ali će veličina prozora biti nula, tako da udaljeni stroj neće moći slati podatke, trošeći svoje resurse, a veza će se zatvoriti tek nakon isteka vremena. TARPIT se može koristiti u hitnim slučajevima za zaštitu od DoS-a:
# iptables -A INPUT -p tcp -m tcp -dport 80 -j TARPIT
Ili zavarati napadača i boriti se protiv skenera
portovi (samo normalno TCP skeniranje, "-sT"):
# iptables -A INPUT -p tcp -m tcp --dport 80 -j PRIHVATA
# iptables -A INPUT -p tcp -m tcp --dport 25 -j PRIHVATA
# iptables -A INPUT -p tcp -m tcp -j TARPIT
Ova pravila stvaraju dojam sustava u kojem su svi portovi otvoreni, ali ako se pokušate spojiti na bilo koji od njih (osim 80 i 25), veze će se zamrznuti. Isti rezultat, ali bez propadanja veza, može se postići radnjom DELUDE, koja ispravno odgovara na sve pokušaje uspostavljanja veze, ali šalje RST paket kao odgovor na sve ostale pakete. Kako biste dodatno zbunili napadača, možete koristiti akciju CHAOS, koja nasumično aktivira jednu od dvije gore opisane akcije.
zaključke
Uz dovoljno znanja i pažljivog čitanja dokumentacije, možete stvoriti vrlo jak bastion kojem se neće tako lako približiti. Moderni vatrozidi, a posebno pf i iptables, nude brojne zaštite od nepozvanih gostiju, koje možete dobiti potpuno besplatno.
Linkovi
- sf.net/projects/sentrytools - PortSentry
- www.openwall.com/scanlogd - scanlogd
Borba protiv curenja resursa
Kada koristite radnju TARPIT, svakako dodajte sljedeće pravilo u konfiguraciju, inače će "opuštene" veze pojesti resurse kada ih obrađuje podsustav conntrack:
# iptables -t raw -I PREROUTING -p tcp --dport 25 -j NOTRACK