Si të konfiguroni një mur zjarri duke përdorur Iptables në Ubuntu 12.04
Statusi: I vjetëruar
Ky artikull mbulon një version të Ubuntu që nuk mbështetet më. Nëse aktualisht jeni duke përdorur një server që ekzekuton Ubuntu 12.04, ne rekomandojmë shumë përmirësimin ose migrimin në një version të mbështetur të Ubuntu:
- Përmirëso në Ubuntu 14.04.
- Përmirëso nga Ubuntu 14.04 në Ubuntu 16.04
- Migroni të dhënat e serverit në një version të mbështetur
Arsyeja:
Shih në vend të kësaj:
Rreth Iptables
Për ta bërë një server më të sigurt pas konfigurimit fillestar, Ubuntu dërgohet me iptables që është muri i zjarrit i paracaktuar i shpërndarjes. Në fillim, megjithëse muri i zjarrit i Ubuntu është i konfiguruar, ai është konfiguruar për të lejuar të gjithë trafikun hyrës dhe dalës në një server privat virtual. Për të mundësuar një mbrojtje më të fortë në server, mund të shtojmë disa rregulla bazë iptables.
Rregullat iptables vijnë nga një seri opsionesh që mund të kombinohen për të krijuar çdo proces specifik. Çdo paketë që kalon murin e zjarrit kontrollohet sipas çdo rregulli sipas renditjes. Sapo përputhet me një rregull, paketa ndjek veprimin e lidhur, përndryshe ajo vazhdon në linjë.
Shënim: Ky tutorial mbulon sigurinë IPv4. Në Linux, siguria IPv6 ruhet veçmas nga IPv4. Për shembull, \iptables\ ruan vetëm rregullat e murit të zjarrit për adresat IPv4, por ka një homolog IPv6 të quajtur \ip6tables\, i cili mund të përdoret për të ruajtur rregullat e murit të zjarrit për adresat e rrjetit IPv6.
Nëse VPS-ja juaj është e konfiguruar për IPv6, mos harroni të siguroni ndërfaqet e rrjetit IPv4 dhe IPv6 me mjetet e duhura. Për më shumë informacion rreth mjeteve IPv6, referojuni këtij udhëzuesi: Si të konfiguroni mjetet për të përdorur IPv6 në një Linux VPS
Komandat e Iptables
Megjithëse ky tutorial do të kalojë një sasi të kufizuar komandash që do t'i siguronin një serveri njëfarë sigurie bazë, ka një sërë rastesh të nuancuara dhe specifike që mund të zhvillohen për iptables. Më poshtë janë disa nga komandat më të dobishme për zhvillimin e një muri zjarri për VPS-në tuaj, por mbani në mend se kjo është një listë e shkurtër dhe ka një sërë opsionesh të tjera.
-A: (Append), adds a rule to iptables
-L: (List), shows the current rules
-m conntrack: allows rules to be based on the current connection state, elaborated in the the --cstate command.
--cstate: explains the states that connections can be in, there are 4: New, Related, Established, and Invalid
-p: (protocol), refers to the the protocol of the rule or of the packet to check.The specified protocol can be one of tcp, udp, udplite, icmp, esp, ah, sctp or the special keyword "all".
--dport: (port), refers to the the port through which the machine connects
-j: (jump), this command refers to the action that needs to be taken if something matches a rule perfectly. It translates to one of four possibilities:
-ACCEPT: the packet is accepted, and no further rules are processed
-REJECT: the packet is rejected, and the sender is notified, and no further rules are processed
-DROP: the packet is rejected, but the sender is not notified, and no further rules are processed
-LOG: the packet is accepted but logged, and the following rules are processed
-I: (Insert), adds a rule between two previous ones
-I INPUT 3: inserts a rule to make it the third in the list
-v: (verbose), offers more details about a rule
Krijimi i rregullave të Iptables:
Nëse shkruani sa vijon, mund të shihni rregullat aktuale të iptables:
sudo iptables -L
Ata duhet të duken kështu:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Nëse keni një grup tjetër rregullash të vendosura ose dëshironi të filloni të reja, gjithmonë mund t'i ktheni rregullat në parazgjedhje duke i fshirë dhe fshirë të gjitha:
sudo iptables -F
Për më tepër, nëse dëshironi të shpejtoni punën tuaj me iptables, mund të përfshini -n në komandë. Ky opsion çaktivizon kërkimet e DNS dhe parandalon që komanda të përpiqet të gjejë anën e kundërt të çdo IP në grupin e rregullave. Ju mund ta përdorni këtë për të renditur rregullat, si shembull:
iptables -L -n
Një Firewall bazë
Siç qëndron, rregullat aktuale lejojnë të gjitha lidhjet, si ato hyrëse ashtu edhe ato dalëse. Nuk ka asnjë masë sigurie. Ndërsa ndërtojmë tabelën, mbani në mend se sapo një paketë PRANOHET, REFUZOHET ose HIQET, nuk përpunohen rregulla të mëtejshme. Prandaj rregullat që vijnë së pari kanë përparësi ndaj atyre të mëvonshme.
Gjatë krijimit të rregullave, duhet të jemi të sigurt që të parandalojmë veten nga bllokimi aksidental i SSH (metoda përmes së cilës jemi lidhur me serverin).
Për të filluar, le të sigurohemi që të lejojmë të gjitha lidhjet aktuale, të gjitha lidhjet në kohën e bërjes së rregullit, do të qëndrojnë në internet:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Ne mund të shkojmë përpara dhe ta zbërthejmë këtë:
- -A u thotë iptables të shtojë një rregull në tabelë.
- INPUT e përcakton këtë rregull si pjesë të zinxhirit të hyrjes.
- m conntrack e ndjekur nga --cstate ESTABLISHED,RELATED garanton se rezultati i këtij rregulli do të zbatohet vetëm për lidhjet aktuale dhe ato që lidhen me to lejohen li>
- -j ACCEPT i thotë paketës JUMP të pranojë dhe lidhjet janë ende në vend.
Pasi të sigurohemi se të gjitha lidhjet aktuale me serverin privat virtual mund të qëndrojnë pa ndërprerje, ne mund të vazhdojmë të bllokojmë lidhjet e tjera të pasigurta.
Le të supozojmë se duam të bllokojmë të gjithë trafikun në hyrje, përveç atyre që vijnë në 2 porte të zakonshme: 22 për SSH dhe 80 për trafikun në ueb. Ne vazhdojmë duke lejuar të gjithë trafikun në portet e përcaktuara me komandat e mëposhtme:
sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Në të dyja këto komanda, opsioni -p qëndron për protokollin me të cilin po bëhet lidhja, në këtë rast tcp, ndërsa --dport specifikon portën përmes së cilës po transmetohet paketa.
Pasi të kemi garantuar se trafiku i dëshirueshëm do të kalojë përmes murit të zjarrit, ne mund të përfundojmë duke bllokuar të gjithë trafikun e mbetur nga qasja në serverin tonë virtual. Për shkak se ky është rregulli i fundit në listë, i gjithë trafiku që përputhet me ndonjë nga rregullat e mëparshme në iptables nuk do të ndikohet dhe do të trajtohet siç kemi vendosur më parë.
Le të bëjmë një rregull për të bllokuar të gjithë trafikun e mbetur:
sudo iptables -P INPUT DROP
Me këtë, ne mund të shohim se si duken rregullat tona të përditësuara:
sudo iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
Ne jemi pothuajse të mbaruar. Megjithatë, na mungon edhe një rregull. Ne duhet të sigurojmë VPS-në tonë me akses loopback. Nëse do të shtonim rregullin tani pa kualifikues të mëtejshëm, ai do të shkonte në fund të listës dhe, duke qenë se do të ndiqte rregullin për të bllokuar të gjithë trafikun, nuk do të vihej kurrë në fuqi.
Për të kundërshtuar këtë çështje, ne duhet ta bëjmë këtë rregull fillimisht në listë, duke përdorur opsionin INPUT:
sudo iptables -I INPUT 1 -i lo -j ACCEPT
- -I INPUT 1 e vendos këtë rregull në fillim të tabelës
- lo i referohet ndërfaqes loopback
- -j ACCEPT më pas garanton që trafiku i kthimit do të pranohet
Tani kemi përfunduar krijimin e një firewall bazë. Rregullat tuaja duhet të duken kështu (mund të shohim detajet e iptable duke shtypur -v):
sudo iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
1289 93442 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
2 212 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 157 packets, 25300 bytes)
pkts bytes target prot opt in out source destination
Megjithatë, sapo serveri virtual të rindizet, rregullat iptables do të fshihen. Hapi tjetër do të kalojë mbi ruajtjen dhe rivendosjen e rregullave iptables.
Ruajtja e rregullave të Iptables
Megjithëse rregullat iptables janë efektive, ato do të fshihen automatikisht nëse serveri riniset. Për t'u siguruar që ato mbeten në fuqi, mund të përdorim një paketë të quajtur IP-Tables persistent.
Mund ta instalojmë duke përdorur apt-get:
sudo apt-get install iptables-persistent
Gjatë instalimit, do t'ju pyetet nëse dëshironi të ruani rregullat iptables si në rregullat e IPv4 ashtu edhe në ato të IPv6. Thuaju po të dyjave.
Rregullat tuaja më pas do të ruhen në /etc/iptables/rules.v4 dhe /etc/iptables/rules.v6.
Pasi të përfundojë instalimi, filloni të ekzekutoni iptables-persistent:
sudo service iptables-persistent start
Pas çdo rindezjeje të serverit, do të shihni që rregullat mbeten në fuqi.