Si të listoni dhe fshini rregullat e murit të zjarrit Iptables
Prezantimi
Iptables është një mur zjarri që luan një rol thelbësor në sigurinë e rrjetit për shumicën e sistemeve Linux. Ndërsa shumë udhëzime iptables do t'ju mësojnë se si të krijoni rregulla të murit të zjarrit për të siguruar serverin tuaj, ky do të fokusohet në një aspekt tjetër të menaxhimit të murit të zjarrit: renditjen dhe fshirjen e rregullave.
Në këtë tutorial, ne do të mbulojmë se si të kryejmë detyrat e mëposhtme të iptables:
- Lista e rregullave
- Pastro numëruesit e paketave dhe bajteve
- Fshi rregullat
- Fshini zinxhirët (fshini të gjitha rregullat në një zinxhir)
- Fshini të gjithë zinxhirët dhe tabelat, fshini të gjithë zinxhirët dhe pranoni të gjithë trafikun
Shënim: Kur punoni me mure mbrojtëse, kujdesuni që të mos mbylleni jashtë serverit tuaj duke bllokuar trafikun SSH (porta :22
, si parazgjedhje). Nëse e humbni aksesin për shkak të cilësimeve të murit të zjarrit, mund t'ju duhet të lidheni me të nëpërmjet një tastierë jashtë brezit për të rregulluar aksesin.
Parakushtet
Ky tutorial supozon se po përdorni një server Linux me komandën iptables
të instaluar dhe se përdoruesi juaj ka privilegje sudo
.
Nëse keni nevojë për ndihmë me këtë konfigurim fillestar, ju lutemi referojuni CentOS-it tonë.
Rregullat e listimit sipas specifikimeve
Le të shohim se si të renditim rregullat së pari. Ka dy mënyra të ndryshme për të parë rregullat tuaja aktive të iptables: në një tabelë ose si një listë të specifikimeve të rregullave. Të dyja metodat ofrojnë afërsisht të njëjtin informacion në formate të ndryshme.
Për të renditur të gjitha rregullat aktive të iptables sipas specifikimeve, ekzekutoni komandën iptables
me opsionin -S
:
- sudo iptables -S
Output-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...
Siç mund ta shihni, dalja duket njësoj si komandat që janë përdorur për t'i krijuar ato, pa komandën e mëparshme iptables
. Kjo do të duket gjithashtu e ngjashme me skedarët e konfigurimit të rregullave iptables, nëse keni përdorur ndonjëherë iptables-persistent
ose iptables save
.
Renditja e një zinxhiri specifik
Nëse dëshironi të kufizoni daljen në një zinxhir specifik (INPUT
, OUTPUT
, TCP
, etj.), mund të specifikoni drejtpërdrejt emrin e zinxhirit pas opsionit -S
. Për shembull, për të treguar të gjitha specifikimet e rregullave në zinxhirin TCP
, do të ekzekutoni këtë komandë:
- sudo iptables -S TCP
Output-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Tani le të hedhim një vështrim në mënyrën alternative për të parë rregullat aktive të iptables: si një tabelë rregullash.
Rregullat e renditjes si tabela
Renditja e rregullave iptables në pamjen e tabelës mund të jetë e dobishme për krahasimin e rregullave të ndryshme me njëra-tjetrën. Për të nxjerrë të gjitha rregullat aktive të iptables në një tabelë, ekzekutoni komandën iptables
me opsionin -L
:
- sudo iptables -L
Kjo do të nxjerrë të gjitha rregullat aktuale të renditura sipas zinxhirit.
Nëse dëshironi të kufizoni daljen në një zinxhir specifik (INPUT
, OUTPUT
, TCP
, etj.), mund të specifikoni drejtpërdrejt emrin e zinxhirit pas opsionit -L
.
Le të hedhim një vështrim në një shembull zinxhiri INPUT
:
- sudo iptables -L INPUT
OutputChain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
Rreshti i parë i daljes tregon emrin e zinxhirit (INPUT
, në këtë rast), i ndjekur nga politika e tij e paracaktuar (DROP
). Rreshti tjetër përbëhet nga titujt e secilës kolonë në tabelë dhe ndiqet nga rregullat e zinxhirit. Le të shqyrtojmë se çfarë tregon çdo kokë:
objektivi
: Nëse një paketë përputhet me rregullin, objektivi specifikon se çfarë duhet bërë me të. Për shembull, një paketë mund të pranohet, të hidhet, të regjistrohet ose të dërgohet në një zinxhir tjetër për t'u krahasuar me më shumë rregullaprot
: Protokolli, sitcp
,udp
,icmp
osetë gjitha
opt
: Përdoret rrallë, kjo kolonë tregon opsionet e IP-sëburimi
: Adresa IP e burimit ose nënrrjeti i trafikut, osekudo
destinacioni
: Adresa IP e destinacionit ose nënrrjeti i trafikut, osekudo
Kolona e fundit, e cila nuk është etiketuar, tregon opsionet e një rregulli. Kjo është çdo pjesë e rregullit që nuk tregohet nga kolonat e mëparshme. Kjo mund të jetë çdo gjë nga portet e burimit dhe destinacionit deri te gjendja e lidhjes së paketës.
Duke shfaqur numërimin e paketave dhe madhësinë e përgjithshme
Kur renditni rregullat iptables, është gjithashtu e mundur të tregohet numri i paketave dhe madhësia e përgjithshme e paketave në bajt, që përputhen me çdo rregull të veçantë. Kjo është shpesh e dobishme kur përpiqeni të merrni një ide të përafërt se cilat rregulla përputhen me paketat. Për ta bërë këtë, përdorni opsionet -L
dhe -v
së bashku.
Për shembull, le të shohim përsëri zinxhirin INPUT
, me opsionin -v
:
- sudo iptables -L INPUT -v
OutputChain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
Vini re se listimi tani ka dy kolona shtesë, pkts
dhe bytes
.
Tani që ju e dini se si të renditni rregullat aktive të murit të zjarrit në mënyra të ndryshme, le të shohim se si mund të rivendosni numëruesit e paketave dhe bajteve.
Rivendosja e numërimit të paketave dhe madhësisë së përgjithshme
Nëse dëshironi të pastroni, ose të zero, numëruesit e paketave dhe bajteve për rregullat tuaja, përdorni opsionin -Z
. Ata gjithashtu rivendosen nëse ndodh një rindezje. Kjo është e dobishme nëse doni të shihni nëse serveri juaj po merr trafik të ri që përputhet me rregullat tuaja ekzistuese.
Për të pastruar numëruesit për të gjitha zinxhirët dhe rregullat, përdorni opsionin -Z
në vetvete:
- sudo iptables -Z
Për të pastruar numëruesit për të gjitha rregullat në një zinxhir specifik, përdorni opsionin -Z
dhe specifikoni zinxhirin. Për shembull, për të pastruar numëruesit e zinxhirit INPUT
ekzekutoni këtë komandë:
- sudo iptables -Z INPUT
Nëse dëshironi të pastroni numëruesit për një rregull specifik, specifikoni emrin e zinxhirit dhe numrin e rregullit. Për shembull, për të zero numëruesit për rregullin e parë në zinxhirin INPUT
, ekzekutoni këtë:
- sudo iptables -Z INPUT 1
Tani që e dini se si të rivendosni numëruesit e paketave dhe bajteve iptables, le të shohim dy metodat që mund të përdoren për t'i fshirë ato.
Fshirja e rregullave sipas specifikimeve
Një nga mënyrat për të fshirë rregullat iptables është sipas specifikimit të rregullave. Për ta bërë këtë, mund të ekzekutoni komandën iptables
me opsionin -D
e ndjekur nga specifikimi i rregullit. Nëse dëshironi të fshini rregullat duke përdorur këtë metodë, mund të përdorni daljen e listës së rregullave, iptables -S
, për ndihmë.
Për shembull, nëse doni të fshini rregullin që heq paketat e pavlefshme hyrëse (-A INPUT -m conntrack --ctstate INVALID -j DROP
), mund të ekzekutoni këtë komandë:
- sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
Vini re se opsioni -A
, i cili përdoret për të treguar pozicionin e rregullit në kohën e krijimit, duhet të përjashtohet këtu.
Fshirja e rregullave sipas zinxhirit dhe numrit
Mënyra tjetër për të fshirë rregullat iptables është nga zinxhiri dhe numri i linjës. Për të përcaktuar numrin e rreshtit të një rregulli, renditni rregullat në formatin e tabelës dhe shtoni opsionin --line-numbers
:
- sudo iptables -L --line-numbers
OutputChain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
...
Kjo shton numrin e rreshtit në çdo rresht rregulli, të treguar nga titulli num
.
Pasi të dini se cilin rregull dëshironi të fshini, vini re numrin e zinxhirit dhe linjës së rregullit. Pastaj ekzekutoni komandën iptables -D
e ndjekur nga zinxhiri dhe numri i rregullit.
Për shembull, nëse duam të fshijmë rregullin e hyrjes që hedh paketa të pavlefshme, mund të shohim se është rregulli 3
i zinxhirit INPUT
. Pra, ne duhet të ekzekutojmë këtë komandë:
- sudo iptables -D INPUT 3
Tani që dini se si të fshini rregullat individuale të murit të zjarrit, le të shqyrtojmë se si mund t'i shpëlani zinxhirët e rregullave.
Zinxhirët Flushing
Iptables ofron një mënyrë për të fshirë të gjitha rregullat në një zinxhir, ose të fshijë një zinxhir. Ky seksion do të mbulojë shumëllojshmërinë e mënyrave për ta bërë këtë.
Paralajmërim: Kini kujdes që të mos e mbyllni veten jashtë serverit tuaj nëpërmjet SSH duke pastruar një zinxhir me një politikë të paracaktuar të drop
ose mohoni
. Nëse e bëni këtë, mund t'ju duhet të lidheni me të nëpërmjet tastierës për të rregulluar aksesin tuaj.
Shpëlarja e një zinxhiri të vetëm
Për të pastruar një zinxhir specifik, i cili do të fshijë të gjitha rregullat në zinxhir, mund të përdorni -F
, ose ekuivalentin --flush
, opsionin dhe emrin e zinxhiri për të shpëlarë.
Për shembull, për të fshirë të gjitha rregullat në zinxhirin INPUT
, ekzekutoni këtë komandë:
- sudo iptables -F INPUT
Shpëlarja e të gjithë zinxhirëve
Për të larë të gjithë zinxhirët, të cilët do të fshijnë të gjitha rregullat e murit të zjarrit, mund të përdorni opsionin -F
, ose ekuivalentin --flush
, në vetvete:
- sudo iptables -F
Shpëlarja e të gjitha rregullave, fshirja e të gjithë zinxhirëve dhe pranimi i të gjithave
Ky seksion do t'ju tregojë se si të pastroni të gjitha rregullat, tabelat dhe zinxhirët tuaj të murit të zjarrit dhe të lejoni të gjithë trafikun e rrjetit.
Paralajmërim: Kjo do të çaktivizojë në mënyrë efektive murin tuaj të zjarrit. Ju duhet të ndiqni këtë seksion vetëm nëse dëshironi të filloni konfigurimin e murit tuaj të zjarrit.
Së pari, vendosni politikat e paracaktuara për secilin prej zinxhirëve të integruar në ACCEPT
. Arsyeja kryesore për ta bërë këtë është të siguroheni që nuk do të mbylleni nga serveri juaj nëpërmjet SSH:
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
Më pas pastroni tabelat nat
dhe mangle
, lani të gjithë zinxhirët (-F
) dhe fshini të gjitha zinxhirët jo të parazgjedhur (-X
):
- sudo iptables -t nat -F
- sudo iptables -t mangle -F
- sudo iptables -F
- sudo iptables -X
Firewall-i juaj tani do të lejojë të gjithë trafikun e rrjetit. Nëse renditni rregullat tuaja tani, do të shihni se nuk ka asnjë, dhe vetëm tre zinxhirët e paracaktuar (INPUT
, FORWARD
dhe OUTPUT
) mbeten.
konkluzioni
Pasi të keni kaluar nëpër këtë tutorial, keni parë se si të listoni dhe fshini rregullat tuaja të murit të zjarrit iptables.
Mos harroni se çdo ndryshim i iptables nëpërmjet komandës iptables
është kalimtar dhe duhet të ruhet për të vazhduar përmes rindezjes së serverit. Kjo mbulohet në seksionin e Ruajtjes së Rregullave të tutorialit të Rregullave dhe Komandave të Përbashkëta të Firewall-it.