Essentials Pagina 7: Diferență între versiuni
Admin (discuție | contribuții) Fără descriere a modificării |
Admin (discuție | contribuții) Fără descriere a modificării |
||
Linia 368: | Linia 368: | ||
=Tabelele (filtre) de retea= | =Tabelele (filtre) de retea= | ||
==nivel 1 - iptables (legacy)== | ==nivel 1 - iptables (legacy)== | ||
Instrucțiuni de bază pentru iptables | |||
Iptables este un firewall, instalat implicit pe toate distribuțiile oficiale Ubuntu (Ubuntu, Kubuntu, Xubuntu). Când instalați Ubuntu, iptables este acolo, dar permite tot traficul în mod implicit. Ubuntu 8.04 Vine cuufw- un program pentru gestionarea cu ușurință a firewall-ului iptables. | |||
Există o mulțime de informații disponibile despre iptables, dar multe dintre ele sunt destul de complexe și, dacă doriți să faceți câteva lucruri de bază, acest How To este pentru dvs. | |||
Comenzi de bază | |||
Tastarea | |||
sudo iptables -L | |||
listează regulile tale curente în iptables. Dacă tocmai v-ați configurat serverul, nu veți avea reguli și ar trebui să vedeți | |||
INTRARE în lanț (politica ACCEPTĂ) | |||
target prot opt sursă destinație | |||
Lanț FORWARD (politica ACCEPT) | |||
target prot opt sursă destinație | |||
Ieșire în lanț (politica ACCEPT) | |||
target prot opt sursă destinație | |||
Opțiuni de bază pentru Iptables | |||
<pre> | |||
Iată explicații pentru unele dintre opțiunile iptables pe care le veți vedea în acest tutorial. Nu vă faceți griji că înțelegeți totul aici acum, dar amintiți-vă să reveniți și să priviți această listă pe măsură ce întâlniți noi opțiuni mai târziu. | |||
• -A - Adăugați această regulă la un lanț de reguli. Lanțurile valide pentru ceea ce facem sunt INPUT, FORWARD și OUTPUT, dar în mare parte ne ocupăm de INPUT în acest tutorial, care afectează doar traficul de intrare. | |||
• -L - Listează regulile curente de filtrare. | |||
• -m conntrack - Permite regulilor de filtrare să se potrivească în funcție de starea conexiunii. Permite utilizarea opțiunii --ctstate. | |||
• --ctstate - Definiți lista de stări cu care să se potrivească regula. Stările valide sunt: | |||
◦ NOU - Conexiunea nu a fost încă văzută. | |||
◦ RELATED - Conexiunea este nouă, dar este legată de o altă conexiune deja permisă. | |||
◦ STABILIT - Conexiunea este deja stabilită. | |||
◦ INVALID - Traficul nu a putut fi identificat dintr-un motiv oarecare. | |||
• -m limit - Solicită ca regula să se potrivească doar de un număr limitat de ori. Permite utilizarea opțiunii --limit. Util pentru limitarea regulilor de logare. | |||
◦ --limit - Rata maximă de potrivire, dată ca număr urmat de „/secundă”, „/minut”, „/oră” sau „/zi”, în funcție de cât de des doriți să se potrivească regula. Dacă această opțiune nu este utilizată și este utilizată limita -m, valoarea implicită este „3/oră”. | |||
• -p - Protocolul de conectare utilizat. | |||
• --dport - Portul (porturile) de destinație necesare pentru această regulă. Poate fi dat un singur port sau poate fi dat un interval ca start:end, care se va potrivi cu toate porturile de la început până la sfârșit, inclusiv. | |||
• -j - Salt la ținta specificată. Implicit, iptables permite patru ținte: | |||
◦ ACCEPT - Acceptați pachetul și opriți procesarea regulilor din acest lanț. | |||
◦ REJECT - Respingeți pachetul și notificați expeditorul că am făcut acest lucru și opriți procesarea regulilor din acest lanț. | |||
◦ DROP - Ignorați în tăcere pachetul și opriți procesarea regulilor din acest lanț. | |||
◦ LOG - Înregistrați pachetul și continuați să procesați mai multe reguli în acest lanț. Permite utilizarea opțiunilor --log-prefix și --log-level. | |||
• --log-prefix - Când vă conectați, puneți acest text înaintea mesajului de jurnal. Folosiți ghilimele duble în jurul textului de utilizat. | |||
• --log-level - Log utilizând nivelul syslog specificat. 7 este o alegere bună, cu excepția cazului în care aveți nevoie de altceva. | |||
• -i - Se potrivește numai dacă pachetul vine pe interfața specificată. | |||
• -I - Inserează o regulă. Este nevoie de două opțiuni, lanțul în care să insereze regula și numărul regulii care ar trebui să fie. | |||
◦ -I INPUT 5 ar introduce regula în lanțul INPUT și o face a 5-a regulă din listă. | |||
• -v - Afișează mai multe informații în rezultat. Util pentru dacă aveți reguli care arată similar fără a utiliza -v. | |||
• -s --source - adresa[/mask] specificarea sursei | |||
• -d --destination - adresa[/mask] specificația destinației | |||
• -o --out-interface - nume de ieșire[+] nume de interfață de rețea ([+] pentru wildcard) | |||
</pre> | |||
Permiterea sesiunilor stabilite | |||
Putem permite sesiunilor stabilite să primească trafic: | |||
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | |||
• Regula de mai sus nu are spații pe fiecare parte a virgulei în ESTABLISHED,RELATED | |||
Dacă linia de mai sus nu funcționează, este posibil să fiți pe un VPS castrat al cărui furnizor nu a pus la dispoziție extensia, caz în care o versiune inferioară poate fi folosită ca ultimă soluție: | |||
sudo iptables -A INPUT -m stare --state ESTABLISHED,RELATED -j ACCEPT | |||
Permiterea traficului de intrare pe anumite porturi | |||
Ați putea începe prin a bloca traficul, dar este posibil să lucrați prin SSH, unde ar trebui să permiteți SSH înainte de a bloca orice altceva. | |||
Pentru a permite traficul de intrare pe portul SSH implicit (22), ați putea spune iptables să permită intrarea întregului trafic TCP de pe acel port. | |||
sudo iptables -A INTRARE -p tcp --dport ssh -j ACCEPT | |||
Referindu-ne la lista de mai sus, puteți vedea că aceasta spune iptables: | |||
• adăugați această regulă la lanțul de intrare (-A INPUT) astfel încât să ne uităm la traficul de intrare | |||
• verificați dacă este TCP (-p tcp). | |||
• dacă da, verificați pentru a vedea dacă intrarea merge la portul SSH (--dport ssh). | |||
• dacă da, acceptați intrarea (-j ACCEPT). | |||
Să verificăm regulile: (afișate doar primele câteva rânduri, vei vedea mai multe) | |||
<pre> | |||
sudo iptables -L | |||
Chain INPUT (policy ACCEPT) | |||
target prot opt source destination | |||
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh | |||
Now, let's allow all incoming web traffic | |||
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT | |||
Checking our rules, we have | |||
sudo iptables -L | |||
Chain INPUT (policy ACCEPT) | |||
target prot opt source destination | |||
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:www | |||
</pre> | |||
Am permis în mod special traficul tcp către porturile ssh și web, dar, deoarece nu am blocat nimic, tot traficul poate intra în continuare. | |||
Blocarea traficului | |||
Odată ce este luată decizia de a accepta un pachet, nu mai există reguli care îl afectează. Întrucât regulile noastre care permit traficul ssh și web sunt pe primul loc, atâta timp cât regula noastră de a bloca tot traficul vine după ele, putem totuși să acceptăm traficul pe care îl dorim. Tot ce trebuie să facem este să punem regula de a bloca tot traficul la sfârșit. | |||
<pre> | |||
sudo iptables -A INPUT -j DROP | |||
sudo iptables -L | |||
Chain INPUT (policy ACCEPT) | |||
target prot opt source destination | |||
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:www | |||
DROP all -- anywhere anywhere | |||
</pre> | |||
Deoarece nu am specificat o interfață sau un protocol, orice trafic pentru orice port de pe orice interfață este blocat, cu excepția web și ssh. | |||
Editarea iptables | |||
Singura problemă cu configurația noastră de până acum este că chiar și portul loopback este blocat. Am fi putut scrie regula drop doar pentru eth0 specificând -i eth0, dar am putea adăuga și o regulă pentru loopback. Dacă anexăm această regulă, va veni prea târziu - după ce tot traficul a fost eliminat. Trebuie să introducem această regulă înainte de asta. Deoarece acesta este mult trafic, îl vom introduce ca primă regulă, astfel încât să fie procesat mai întâi. | |||
<pre> | |||
sudo iptables -I INPUT 1 -i lo -j ACCEPT | |||
sudo iptables -L | |||
Chain INPUT (policy ACCEPT) | |||
target prot opt source destination | |||
ACCEPT all -- anywhere anywhere | |||
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh | |||
ACCEPT tcp -- anywhere anywhere tcp dpt:www | |||
DROP all -- anywhere anywhere | |||
</pre> | |||
Prima și ultima linie arată aproape la fel, așa că vom enumera iptables mai detaliat. | |||
<pre> | |||
sudo iptables -L -v | |||
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) | |||
pkts bytes target prot opt in out source destination | |||
0 0 ACCEPT all -- lo any anywhere anywhere | |||
0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED | |||
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh | |||
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www | |||
0 0 DROP all -- any any anywhere anywhere | |||
</pre> | |||
Acum puteți vedea mult mai multe informații. Această regulă este de fapt foarte importantă, deoarece multe programe folosesc interfața loopback pentru a comunica între ele. Dacă nu le lași să vorbească, ai putea rupe acele programe! | |||
Înregistrare | |||
În exemplele de mai sus, niciunul din trafic nu va fi înregistrat. Dacă doriți să înregistrați pachetele abandonate în syslog, aceasta ar fi cea mai rapidă modalitate: | |||
sudo iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 | |||
Tipuri de lanțuri | |||
iptables folosește trei lanțuri diferite: intrare, înainte și ieșire. (INPUT,FORWARD,OUTPUT) | |||
Intrare – Acest lanț este folosit pentru a controla comportamentul conexiunilor de intrare. De exemplu, dacă un utilizator încearcă să facă SSH pe PC/server, iptables va încerca să potrivească adresa IP și portul cu o regulă din lanțul de intrare. | |||
Redirecționare – Acest lanț este utilizat pentru conexiunile de intrare care nu sunt de fapt livrate local. Gândiți-vă la un router – datele îi sunt întotdeauna trimise, dar rareori sunt destinate ruterului în sine; datele sunt doar redirecționate către ținta sa. | |||
Dacă nu faci un fel de rutare, NATing sau altceva pe sistemul tău care necesită redirecționare, nici măcar nu vei folosi acest lanț. | |||
Există o modalitate sigură de a verifica dacă sistemul dvs. utilizează sau nu are nevoie de lanțul înainte. | |||
iptables -L -v | |||
Captura de ecran de mai sus este a unui server care rulează de câteva săptămâni și nu are restricții privind conexiunile de intrare sau de ieșire. După cum puteți vedea, lanțul de intrare a procesat 11 GB de pachete, iar lanțul de ieșire a procesat 17 GB. Lanțul înainte, pe de altă parte, nu a fost nevoie să proceseze un singur pachet. Acest lucru se datorează faptului că serverul nu efectuează niciun fel de redirecționare sau este utilizat ca dispozitiv de trecere. | |||
Ieșire – Acest lanț este utilizat pentru conexiunile de ieșire. De exemplu, dacă încercați să ping howtogeek.com, iptables își va verifica lanțul de ieșire pentru a vedea care sunt regulile referitoare la ping și howtogeek.com înainte de a lua o decizie de a permite sau de a refuza încercarea de conectare. | |||
Comportamentul implicit al lanțului de politici | |||
Înainte de a intra și de a configura reguli specifice, veți dori să decideți care doriți să fie comportamentul implicit al celor trei lanțuri. Cu alte cuvinte, ce vrei să facă iptables dacă conexiunea nu se potrivește cu nicio regulă existentă? | |||
Pentru a vedea ceea ce lanțurile dvs. de politici sunt configurate în prezent cu traficul nepotrivit, executați comanda iptables -L. | |||
După cum puteți vedea, am folosit și comanda grep pentru a ne oferi rezultate mai curate. În acea captură de ecran, se crede că lanțurile noastre acceptă trafic. | |||
De multe ori, veți dori ca sistemul dvs. să accepte conexiuni în mod implicit. Dacă nu ați modificat anterior regulile lanțului de politici, această setare ar trebui să fie deja configurată. În orice caz, iată comanda pentru a accepta conexiunile în mod implicit: | |||
iptables --policy INPUT ACCEPT | |||
iptables --policy OUTPUT ACCEPT | |||
iptables --policy FORWARD ACCEPT | |||
Implicitând regula de acceptare, puteți utiliza apoi iptables pentru a refuza anumite adrese IP sau numere de porturi, continuând să acceptați toate celelalte conexiuni. Vom ajunge la acele comenzi într-un minut. | |||
Dacă preferați să refuzați toate conexiunile și să specificați manual cărora doriți să le permiteți să se conecteze, ar trebui să modificați politica implicită a lanțurilor dvs. pentru a renunța. Acest lucru ar fi probabil util doar pentru serverele care conțin informații sensibile și care au întotdeauna aceleași adrese IP conectate la ele. | |||
iptables --policy INPUT DROPiptables --policy OUTPUT DROPiptables --policy FORWARD DROP | |||
Răspunsuri specifice conexiunii | |||
Cu politicile implicite de lanț configurate, puteți începe să adăugați reguli la iptables, astfel încât să știe ce să facă atunci când întâlnește o conexiune de la sau către o anumită adresă IP sau port. În acest ghid, vom trece peste cele trei „răspunsuri” cele mai elementare și utilizate în mod obișnuit. | |||
Accept – Permite conexiunea. | |||
Renunțați – Renunțați la conexiunea, acționați ca și cum nu s-ar fi întâmplat niciodată. Acest lucru este cel mai bine dacă nu doriți ca sursa să realizeze că sistemul dvs. există. | |||
Respingere – Nu permiteți conexiunea, dar trimiteți înapoi o eroare. Acest lucru este cel mai bine dacă nu doriți ca o anumită sursă să se conecteze la sistemul dvs., dar doriți ca ei să știe că firewall-ul dvs. le-a blocat. | |||
Cel mai bun mod de a arăta diferența dintre aceste trei reguli este să arăți cum arată atunci când un PC încearcă să pună ping la o mașină Linux cu iptables configurat pentru fiecare dintre aceste setări. | |||
Respingerea conexiunii: | |||
Permiterea sau blocarea conexiunilor specifice | |||
Cu lanțurile de politici configurate, acum puteți configura iptables pentru a permite sau bloca anumite adrese, intervale de adrese și porturi. În aceste exemple, vom seta conexiunile la DROP, dar le puteți comuta la ACCEPT sau REJECT, în funcție de nevoile dvs. și de modul în care v-ați configurat lanțurile de politici. | |||
Notă: În aceste exemple, vom folosi iptables -A pentru a adăuga reguli la lanțul existent. iptables începe din partea de sus a listei sale și parcurge fiecare regulă până când găsește una care se potrivește. Dacă trebuie să inserați o regulă deasupra alteia, puteți utiliza iptables -I [lanț] [număr] pentru a specifica numărul pe care ar trebui să-l figureze în listă. | |||
Conexiuni de la o singură adresă IP | |||
Acest exemplu arată cum să blocați toate conexiunile de la adresa IP 10.10.10.10. | |||
iptables -A INPUT -s 10.10.10.10 -j DROP | |||
Conexiuni de la o serie de adrese IP | |||
Acest exemplu arată cum să blocați toate adresele IP din intervalul de rețea 10.10.10.0/24. Puteți utiliza o mască de rețea sau o notație standard pentru a specifica intervalul de adrese IP. | |||
iptables -A INPUT -s 10.10.10.0/24 -j DROP | |||
sau | |||
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP | |||
Conexiuni la un anumit port | |||
Acest exemplu arată cum să blocați conexiunile SSH din 10.10.10.10. | |||
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP | |||
Puteți înlocui „ssh” cu orice protocol sau număr de port. Partea -p tcp a codului spune iptables ce fel de conexiune folosește protocolul. Dacă ați blocat un protocol care utilizează UDP mai degrabă decât TCP, atunci ar fi necesar -p udp. | |||
Acest exemplu arată cum să blocați conexiunile SSH de la orice adresă IP. | |||
iptables -A INPUT -p tcp --dport ssh -j DROP | |||
Statele de conexiune | |||
După cum am menționat mai devreme, o mulțime de protocoale vor necesita comunicare în două sensuri. De exemplu, dacă doriți să permiteți conexiuni SSH la sistemul dvs., lanțurile de intrare și ieșire vor avea nevoie de o regulă adăugată la ele. Dar, ce se întâmplă dacă doriți doar ca SSH să intre în sistemul dvs. să fie permis? Adăugarea unei reguli la lanțul de ieșire nu va permite și încercările SSH de ieșire? | |||
Aici intervin stările de conexiune, care vă oferă capacitatea de care aveți nevoie pentru a permite comunicarea în două sensuri, dar permite stabilirea conexiunilor într-un singur sens. Uitați-vă la acest exemplu, unde conexiunile SSH DE LA 10.10.10.10 sunt permise, dar conexiunile SSH LA 10.10.10.10 nu sunt. Cu toate acestea, sistemului i se permite să trimită înapoi informații prin SSH atâta timp cât sesiunea a fost deja stabilită, ceea ce face posibilă comunicarea SSH între aceste două gazde. | |||
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m stare --state NOU,STABILIT -j ACCEPT | |||
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m stat --state ESTABLISHED -j ACCEPT | |||
Salvarea modificărilor | |||
Modificările pe care le faceți regulilor dvs. iptables vor fi eliminate data viitoare când serviciul iptables va fi repornit, cu excepția cazului în care executați o comandă pentru a salva modificările. Această comandă poate diferi în funcție de distribuția dvs.: | |||
sudo /sbin/iptables-save | |||
Alte Comenzi | |||
Listați regulile iptables configurate în prezent: | |||
iptables -L | |||
Adăugarea opțiunii -v vă va oferi informații despre pachet și octet, iar adăugarea -n va lista totul numeric. Cu alte cuvinte – numele de gazdă, protocoalele și rețelele sunt listate ca numere. | |||
Pentru a șterge toate regulile configurate în prezent, puteți lansa comanda de golire. | |||
iptables -F | |||
==nivel 1 - nftables== | ==nivel 1 - nftables== | ||
==layer 2 - ufw== | ==layer 2 - ufw== | ||
[[Essentials_Pagina_6|Pagina anterioară]] | [[Essentials_Pagina_8|Ultima pagină]] | [[Essentials_Pagina_6|Pagina anterioară]] | [[Essentials_Pagina_8|Ultima pagină]] |
Versiunea de la data 31 octombrie 2024 10:42
Servicii de rețea Linux și securitate
Comenzi generale de rețea
Capitolul comenzi de rețea explică diverse instrumente care pot fi utile atunci când conectați cu alte computere atât în rețea, cât și pe internet, obținând mai multe informații despre alte computere. Acest capitol include, de asemenea, informații despre instrumentele pentru configurarea rețelei, transferul de fișiere și lucrul cu mașini la distanță.
netstat Afișează conținutul fișierelor /proc/net. Funcționează cu subsistemul de rețea Linux, vă va spune care este starea porturilor, adică. legături deschise, închise, în așteptare, mascarade. De asemenea, va afișa diverse alte lucruri. Are multe opțiuni diferite.
tcpdump Acesta este un sniffer, un program care captează pachete dintr-o interfață de rețea și le interpretează pentru tine. Înțelege toate protocoalele de bază ale internetului și poate fi folosit pentru a salva pachete întregi pentru inspecție ulterioară.
Sintaxa de baza:
Filtrarea gazdelor:
- Potriviți orice trafic care implică 192.168.1.1 ca destinație sau sursă
# tcpdump -i eth1 host 192.168.1.1
- Doar sursa, la fel
# tcpdump -i eth1 src host 192.168.1.1
- Doar ca destinație
# tcpdump -i eth1 dst host 192.168.1.1
Porturi de filtrare:
- Potriviți orice trafic care implică portul 25 ca sursă sau destinație
# tcpdump -i eth1 port 25
- Sursa
# tcpdump -i eth1 src port 25
- Destinație
# tcpdump -i eth1 dst port 25
Filtrarea rețelei:
# tcpdump -i eth1 net 192.168 # tcpdump -i eth1 src net 192.168 # tcpdump -i eth1 dst net 192.168
Filtrarea protocolului:
# tcpdump -i eth1 arp # tcpdump -i eth1 ip # tcpdump -i eth1 tcp # tcpdump -i eth1 udp # tcpdump -i eth1 icmp
ping
Comanda ping (numită după sunetul unui sistem sonar activ) trimite cereri de ecou gazdei pe care o specificați pe linia de comandă și enumeră răspunsurile primite, durata călătoriei dus-întors.
Pur și simplu utilizați ping ca:
ping ip_or_host_name
Rețineți că pentru a opri ping-ul (altfel va merge pentru totdeauna) utilizați CTRL-C (break).
Vă rugăm să rețineți: utilizarea ping/smbmount/ssh sau a altor programe de sistem UNIX cu un nume de computer și nu cu o adresă IP va funcționa numai dacă aveți computerul listat în fișierul /etc/hosts. Iată un exemplu:
192.168.1.100 nou
Această linie spune că este un computer numit „nou” cu adresa IP 192.168.1.100. Acum că există în fișierul /etc/hosts, nu mai trebuie să introduc adresa IP, ci doar numele „nou”. nume de gazdă spune utilizatorului numele de gazdă al computerului la care este conectat. Notă: poate fi numit gazdă.
traceroute traceroute va arăta traseul unui pachet. Încearcă să listeze seria de gazde prin care pachetele dvs. călătoresc în drum spre o anumită destinație. Aruncă o privire și la xtraceroute (unul dintre mai multe echivalente grafice ale acestui program).
Sintaxa comenzii:
traceroute nume_sau_ip_mașină:port
nmap
„instrument de explorare a rețelei și scaner de securitate”. nmap este un instrument de rețea foarte avansat folosit pentru a interoga mașinile (locale sau la distanță) dacă sunt active și ce porturi sunt deschise pe aceste mașini.
Un exemplu simplu de utilizare:
nmap nume_mașină
Acest lucru ar interoga propria mașină cu privire la porturile pe care le păstrează deschise. nmap este un instrument foarte puternic, documentația este disponibilă pe site-ul nmapprecum și informațiile din pagina de manual.
Configurarea rețelei
ifconfig
Această comandă este utilizată pentru a configura interfețele de rețea sau pentru a afișa configurația lor curentă. Pe lângă activarea și dezactivarea interfețelor cu setările „sus” și „jos”, această comandă este necesară pentru setarea informațiilor despre adresa unei interfețe dacă nu aveți scriptul ifcfg. Utilizați ifconfig fie ca:
ifconfig
Aceasta va lista pur și simplu toate informațiile de pe toate dispozitivele de rețea aflate în prezent.
ifconfig eth0 down
Acest lucru va opri eth0 (presupunând că dispozitivul există) în jos, nu va putea primi sau trimite nimic până când nu puneți dispozitivul din nou „up”.
În mod clar, există mult mai multe opțiuni pentru acest instrument, va trebui să citiți manualul/pagina de informații pentru a afla mai multe despre ele.
ifup
Utilizați ifup nume-dispozitiv pentru a afișa o interfață urmând un script (care va conține setările dvs. implicite de rețea). Pur și simplu tastați ifup și veți primi ajutor pentru utilizarea scriptului. De exemplu tastarea:
ifup eth0
Va aduce eth0 în sus dacă este în prezent dezactivat. ifdown Utilizați ifdown nume-dispozitiv pentru a reduce o interfață folosind un script (care va conține setările implicite de rețea). Pur și simplu tastați ifdown și veți primi ajutor pentru utilizarea scriptului.
De exemplu tastarea:
ifdown eth0
Va reduce eth0 dacă este în prezent sus.
ifcfg
Utilizați ifcfg pentru a configura o anumită interfață. Pur și simplu tastați ifcfg pentru a obține ajutor cu privire la utilizarea acestui script.
De exemplu, pentru a schimba eth0 de la 192.168.0.1 la 192.168.0.2, puteți face:
ifcfg eth0 del 192.168.0.1 ifcfg eth0 add 192.168.0.2
Prima comandă elimină eth0 și elimină acea adresă IP stocată, iar a doua o aduce înapoi cu noua adresă.
route
Comanda de rutare este instrumentul folosit pentru a afișa sau modifica tabelul de rutare. Pentru a adăuga o poartă ca implicită, ar trebui să tastați:
route add default gw some_computer
Comenzi specifice internetului
Rețineți că, dacă DNS-ul nu este configurat corect pe computer, trebuie să editați „/etc/resolv.conf” pentru a face lucrurile să funcționeze...
host Efectuează o căutare simplă a unei adrese de internet (folosind sistemul de nume de domeniu, DNS). Pur și simplu tastați:
host adresa_ip sau host nume_domeniu
dig Instrumentul „domain information groper”. Mai avansat decât host. Dacă dați un nume de gazdă ca argument pentru a scoate informații despre gazda respectivă, inclusiv adresa IP, numele de gazdă și diverse alte informații.
De exemplu, pentru a căuta informații despre „www.amazon.com” tastați:
dig www.amazon.com
Pentru a găsi numele gazdei pentru o anumită adresă IP (adică o căutare inversă), utilizați dig cu opțiunea „-x”.
dig -x 100.42.30.95
Aceasta va căuta adresa (care poate să existe sau nu) și va returna adresa gazdei, de exemplu, dacă aceasta a fost adresa „http://slashdot.org”, atunci ar returna „http://slashdot. org”. dig necesită un număr mare de opțiuni (până la punctul de a fi prea multe), consultați pagina de manual pentru mai multe informații.
whois (acum BW whois) este folosit pentru a căuta informațiile de contact din bazele de date „whois”, serverele sunt susceptibile să dețină numai site-uri importante. Rețineți că este posibil ca informațiile de contact să fie ascunse sau restricționate, deoarece sunt adesea abuzate de către crackeri și alții care caută o modalitate de a provoca daune rău intenționate organizației.
wget (GNU Web get) folosit pentru a descărca fișiere de pe World Wide Web.
Pentru a arhiva un singur site web, utilizați opțiunea -m sau --mirror (oglindă).
Utilizați opțiunea -nc (fără clobber) pentru a opri wget să suprascrie un fișier dacă îl aveți deja.
Utilizați opțiunea -c sau --continue pentru a continua un fișier care a fost neterminat de wget sau de un alt program.
Exemplu simplu de utilizare:
wget url_for_file
Acest lucru ar obține pur și simplu un fișier de pe un site. wget poate, de asemenea, să recupereze mai multe fișiere folosind metacaracterele standard, la fel ca tipul folosit în bash, cum ar fi *, [ ], ?. Pur și simplu utilizați wget ca de obicei, dar utilizați ghilimele simple (' ') pe adresa URL pentru a preveni extinderea bash-urilor. Există complicații dacă preluați de pe un site http (vezi mai jos...).
Exemplu de utilizare avansată, (utilizat din pagina de manual wget):
wget --spider --force-html -i bookmarks.html
Aceasta va analiza fișierul bookmarks.html și va verifica dacă toate linkurile există.
Utilizare avansată: acesta este modul în care puteți descărca mai multe fișiere folosind http (folosind un wildcard...). Note: http nu acceptă descărcarea folosind metacaracterele standard, ftp face, așa că puteți folosi metacaracterele cu ftp și va funcționa bine. O soluție pentru această limitare http este prezentată mai jos:
wget -r -l1 --no-parent -A.gif http://www.website.com[1]
Aceasta se va descărca (recursiv), la o adâncime de unu, cu alte cuvinte în directorul curent și nu mai jos. Această comandă va ignora referințele la directorul părinte și va descărca orice se termină în „.gif”. Dacă doriți să descărcați, spuneți orice se termină cu „.pdf” și adăugați un -A.pdf înainte de adresa site-ului web. Pur și simplu schimbați adresa site-ului web și tipul de fișier descărcat pentru a descărca altceva. Rețineți că a face -A.gif este același lucru cu a face -A „*.gif” (doar ghilimele duble, ghilimele simple nu vor funcționa). wget are multe mai multe opțiuni, consultați secțiunea de exemple a paginii de manual, acest instrument este foarte bine documentat.
Poate doriți să încercați alternative precum httrack. Un program complet de descărcare a site-ului GUI scris în python și disponibil pentru GNU/Linux. Aria2 (aria2c), pentru descarcarea unui fisier cu mai multe conexiuni sau dupa un model.
curl curl este un alt program de descărcare de la distanță. Acest program de descărcare de la distanță este proiectat să funcționeze fără interacțiunea utilizatorului și acceptă o varietate de protocoale, poate încărca/descărca și are un număr mare de trucuri/soluții pentru diverse lucruri. Poate accesa servere de dicționar (dict), servere ldap, ftp, http, gopher, consultați pagina de manual pentru detalii complete. Pentru a accesa manualul complet (care este uriaș) pentru acest tip de comandă:
curl -M
Pentru uz general, îl puteți folosi ca wget. De asemenea, vă puteți autentifica folosind un nume de utilizator utilizând opțiunea -u și introducând numele de utilizator și parola astfel:
curl -u nume utilizator:parolă http://www.placetodownload/file
Pentru a încărca folosind ftp opțiunea -T:
curl -T nume_fișier ftp://ftp.uploadsite.com
Pentru a continua descarcarea unui fișier, utilizați opțiunea -C:
curl -C - -o fișier http://www.site.com
Administrarea la distanță
ssh
Shell securizat, conectați-vă de la distanță pe o mașină care rulează demonul sshd. Odată ce v-ați conectat, aveți un shell securizat și puteți executa diverse comenzi pe acel computer, cum ar fi să copiați fișiere, să reporniți computerul, la fel cum ar fi propriul dvs. computer GNU/Linux. Sau puteți utiliza ssh cu un nume de gazdă complet pentru a vă conecta la o mașină de la distanță (ca pe internet).
Exemple:
ssh user@hostname
Conectați-vă la un sistem de la distanță cu numele dvs. de utilizator actual, evident veți avea nevoie de parola utilizatorului de pe cealaltă mașină. ssh nume utilizator@nume gazd
scp
Copie securizată, parte a pachetului ssh. Vă permite să copiați fișiere de pe un computer pe alt computer, utilizați -r pentru a copia recursiv (copiați directoare și subdirectoare întregi).
Sintaxa lui scp este întotdeauna
scp machineToBeCopiedFrom machineToBeCopiedTo
Unde fiecare mașină poate fi un director local (pe sistemul de fișiere curent /) sau o mașină la distanță. Mașinile de la distanță sunt de obicei machinesFullName:/directory (dacă omiteți partea de director, va presupune doar directorul principal al numelui de utilizator cu care vă conectați).
Exemplul de mai jos copiază toate fișierele din directorul curent (fără a include niciun director), comanda se va autentifica la „nou” folosind numele de utilizator al persoanei conectate în prezent pe computerul local, fișierele vor fi copiate în directorul rădăcină al computer la distanță numit „nou” (care este probabil pe LAN):
scp * nou:/
De asemenea, puteți copia fișiere de pe alt computer pe alt computer. Să presupunem că sunteți pe un computer numit „p100”. Și doriți să copiați fișierele (și directoarele) din „hp166” (în directorul /tmp și orice de mai jos) în „nou” și să puneți fișierele în directorul temporar al lui new. Ai putea face:
scp -r hp166:/tmp nou:/tmp
Presupunând că ați fost conectat ca „fred”, veți avea nevoie de parole pentru utilizatorul „fred” pe computerele hp166 și noi. Adăugați un user_name@ înaintea numelui computerului pentru a vă conecta sub un alt nume de utilizator.
De exemplu, pentru a efectua comanda de mai sus cu utilizatorul „root” pe hp166 și „anon” pe new, ar trebui să tastați:
scp -r root@hp166:/tmp anon@new:/tmp
Pentru a copia de la o mașină la distanță pe un computer local, pur și simplu faceți lucrurile invers:
scp remoteMachine:/mystuff/* .
Acest lucru va copia fișierele de pe mașina de la distanță din directorul „mystuff” pe computerul dvs. local.
Vă rugăm să rețineți că atunci când lucrați cu o mașină la distanță, trebuie să aveți un : (coloană) după numele mașinii, chiar dacă doriți fișierele în directorul lor principal. În caz contrar, comanda va eșua.
sftp
FTP securizat, o altă parte a pachetului ssh. Această comandă este similară cu ftp, dar folosește un tunel criptat pentru a se conecta la un server ftp și, prin urmare, este mai sigură decât simplu ftp.
Utilizarea comenzii este foarte asemănătoare cu ftp (instrumentul din linia de comandă), sftp (odată ce rulează) folosește comenzi precum help (pentru ajutor), put (trimite fișiere la server), get (descărcă fișiere de pe server) și diverse alții, consultați pagina de manual și documentația internă pentru mai multe detalii.
Fișiere de configurare a rețelei TCP/IP Linux:
/etc/resolv.conf Listați serverele DNS pentru rezoluția numelor de domeniu de internet.
/etc/hosts, hosts.allow, hosts.deny Listează gazde care urmează să fie rezolvate local (nu prin DNS).
Red Hat/Fedora/CentOS: /etc/sysconfig/network Specificați configurația rețelei. de ex. IP static, DHCP, NIS etc.
Red Hat/Fedora/CentOS: /etc/sysconfig/network-scripts/ifcfg-device Specificați informațiile de rețea TCP.
Ubuntu/Debian: /etc/network/interfaces Specificați configurația rețelei și dispozitivele. de ex. IP static și informații, DHCP etc.
Alocarea adresei IP statice:
Alegeți una dintre următoarele metode:
• Linia de comandă: /sbin/ifconfig eth0 192.168.10.12 netmask 255.255.255.0 broadcast 192.168.10.255
Adresa de rețea prin convenție ar fi cea mai mică: 192.168.10.0 Adresa de difuzare prin convenție ar fi cea mai mare: 192.168.10.255 Gateway-ul poate fi orice, dar următoarea convenție: 192.168.10.1
Notă: cele mai înalte și cele mai mici adrese sunt bazate pe masca de rețea. Exemplul anterior se bazează pe o mască de rețea de 255.255.255.0
Fișiere de configurare IP Ubuntu / Debian:
Fișier: /etc/network/interfaces Exemplu de IP static: auto lo iface lo inet loopback auto eth0 iface eth0 inet static adresa 208.88.34.106 mască de rețea 255.255.255.248 difuzat 208.88.34.111 reteaua 208.88.34.104 gateway 208.88.34.110 Exemplu de IP dinamic (DHCP): auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp
Atribuiți mai mult de o adresă IP unei plăci Ethernet:
ifconfig eth0 XXX.XXX.XXX.XXX masca de rețea 255.255.255.0 difuzat XXX.XXX.XXX.255 ifconfig eth0:0 192.168.10.12 netmask 255.255.255.0 difuzare 192.168.10.255 ifconfig eth0:1 192.168.10.14 netmask 255.255.255.0 difuzare 192.168.10.255 route add -host XXX.XXX.XXX.XXX dev eth0 route add -host 192.168.10.12 dev eth0 route add -host 192.168.10.14 dev eth0 În acest exemplu, 0 și 1 sunt aliasuri în plus față de eth0 obișnuit. Rezultatul comenzii ifconfig: eth0 Link encap:Ethernet HWaddr 00:10:4C:25:7A:3F adresa inet:XXX.XXX.XXX.XXX Bcast:XXX.XXX.XXX.255 Masca:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Pachete RX:14218 erori:0 dropped:0 overruns:0 frame:0 Pachete TX:1362 erori:0 dropped:0 overruns:0 carrier:0 coliziuni:1 txqueuelen:100 Întreruperea: 5 Adresa de bază: 0xe400 eth0:0 Link Encap:Ethernet HWaddr 00:10:4C:25:7A:3F inet adresa:192.168.10.12 Bcast:192.168.10.255 Masca:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Întreruperea: 5 Adresa de bază: 0xe400 eth0:1 Link Encap:Ethernet HWaddr 00:10:4C:25:7A:3F inet adresa:192.168.10.14 Bcast:192.168.10.255 Masca:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Întreruperea: 5 Adresa de bază: 0xe400 Fișier de configurare: /etc/sysconfig/network-scripts/ifcfg-eth0:0 DEVICE=eth0:0 ONBOOT=da BOOTPROTO=static Broadcast=192.168.10.255 IPADDR=192.168.10.12 NETMASK=255.255.255.0 NETWORK=192.168.10.0 ONBOOT=da
Aliasurile pot fi, de asemenea, închise independent. adică: ifdown eth0:0
Route: Sistemul de operare Linux gestionează traficul IP de ieșire și de intrare (Internet Protocol). Traficul de intrare este captat pe baza configurației ARP și a adresei IP. Traficul de ieșire este gestionat de rute. Rutarea determină calea pe care o parcurg aceste pachete, astfel încât să fie trimise la destinațiile lor. Acest lucru este necesar pentru tot traficul IP, local și la distanță, inclusiv atunci când sunt disponibile mai multe interfețe de rețea. Rutele sunt deținute de tabelul de rutare a nucleului.
Intrările în tabelul de rutare directă apar atunci când gazdele sursă și destinație sunt în aceeași rețea fizică și pachetele sunt trimise direct de la sursă la destinație.
Intrările în tabelul de rutare indirectă apar atunci când gazdele sursă și destinație sunt pe rețele fizice diferite. Gazda destinație trebuie să fie atinsă prin unul sau mai multe gateway-uri IP. Primul gateway este singurul care este cunoscut de sistemul gazdă.
Rutarea implicită definește un gateway de utilizat atunci când ruta directă a rețelei și rutele gazdă indirecte nu sunt definite pentru o anumită adresă IP.
Rute statice:IP folosește un tabel de rutare pentru a determina unde trebuie trimise pachetele. Mai întâi pachetul este examinat pentru a vedea dacă destinația lui este pentru rețeaua locală sau la distanță. Dacă urmează să fie trimis la o rețea la distanță, tabelul de rutare este consultat pentru a determina calea. Dacă nu există informații în tabelul de rutare, atunci pachetul este trimis către gateway-ul implicit. Rutele statice sunt setate cu comanda ruta.
Comanda ROUTE comanda route afișează și manipulează și tabelul de rutare ip. Pentru a vedea tabelul de rutare implicit în Linux, tastați următoarea comandă.
- traseu
Tabelul de rutare IP al nucleului
Destination Gateway Genmask Flags Metric Ref Utilizare Iface 192.168.50.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1002 0 0 eth0 default 192.168.50.1 0.0.0.0 UG 0 0 0 eth0
Adăugarea, ștergerea rutelor și Gateway implicit cu următoarele comenzi.
Adăugarea rutei
# route add -net 10.10.10.0/24 gw 192.168.0.1
Ștergerea traseului
# route del -net 10.10.10.0/24 gw 192.168.0.1
Adăugarea gateway-ului implicit
# route add default gw 192.168.0.1
ICMP:
ICMP este protocolul de rețea folosit de comenzile ping și traceroute.
Blocarea ICMP și aspectul invizibil pentru ping:
Următoarele reguli de firewall vor elimina solicitările ICMP.
iptables -A OUTPUT -p icmp -d 0/0 -j DROP
Folosind tcpdump pentru a monitoriza rețeaua:
[root]# ifconfig eth0 promisc - Pune nic în modul promiscuu pentru a mirosi traficul. [root]# tcpdump -n host not XXX.XXX.XXX.XXX | more - Sniff net, dar ignora IP care este sesiunea ta la distanță.
Management retea nivel 1 - NetworkManager
Management retea nivel 2 - Netplan
Tabelele (filtre) de retea
nivel 1 - iptables (legacy)
Instrucțiuni de bază pentru iptables Iptables este un firewall, instalat implicit pe toate distribuțiile oficiale Ubuntu (Ubuntu, Kubuntu, Xubuntu). Când instalați Ubuntu, iptables este acolo, dar permite tot traficul în mod implicit. Ubuntu 8.04 Vine cuufw- un program pentru gestionarea cu ușurință a firewall-ului iptables. Există o mulțime de informații disponibile despre iptables, dar multe dintre ele sunt destul de complexe și, dacă doriți să faceți câteva lucruri de bază, acest How To este pentru dvs.
Comenzi de bază Tastarea
sudo iptables -L
listează regulile tale curente în iptables. Dacă tocmai v-ați configurat serverul, nu veți avea reguli și ar trebui să vedeți INTRARE în lanț (politica ACCEPTĂ) target prot opt sursă destinație
Lanț FORWARD (politica ACCEPT) target prot opt sursă destinație
Ieșire în lanț (politica ACCEPT) target prot opt sursă destinație
Opțiuni de bază pentru Iptables
Iată explicații pentru unele dintre opțiunile iptables pe care le veți vedea în acest tutorial. Nu vă faceți griji că înțelegeți totul aici acum, dar amintiți-vă să reveniți și să priviți această listă pe măsură ce întâlniți noi opțiuni mai târziu. • -A - Adăugați această regulă la un lanț de reguli. Lanțurile valide pentru ceea ce facem sunt INPUT, FORWARD și OUTPUT, dar în mare parte ne ocupăm de INPUT în acest tutorial, care afectează doar traficul de intrare. • -L - Listează regulile curente de filtrare. • -m conntrack - Permite regulilor de filtrare să se potrivească în funcție de starea conexiunii. Permite utilizarea opțiunii --ctstate. • --ctstate - Definiți lista de stări cu care să se potrivească regula. Stările valide sunt: ◦ NOU - Conexiunea nu a fost încă văzută. ◦ RELATED - Conexiunea este nouă, dar este legată de o altă conexiune deja permisă. ◦ STABILIT - Conexiunea este deja stabilită. ◦ INVALID - Traficul nu a putut fi identificat dintr-un motiv oarecare. • -m limit - Solicită ca regula să se potrivească doar de un număr limitat de ori. Permite utilizarea opțiunii --limit. Util pentru limitarea regulilor de logare. ◦ --limit - Rata maximă de potrivire, dată ca număr urmat de „/secundă”, „/minut”, „/oră” sau „/zi”, în funcție de cât de des doriți să se potrivească regula. Dacă această opțiune nu este utilizată și este utilizată limita -m, valoarea implicită este „3/oră”. • -p - Protocolul de conectare utilizat. • --dport - Portul (porturile) de destinație necesare pentru această regulă. Poate fi dat un singur port sau poate fi dat un interval ca start:end, care se va potrivi cu toate porturile de la început până la sfârșit, inclusiv. • -j - Salt la ținta specificată. Implicit, iptables permite patru ținte: ◦ ACCEPT - Acceptați pachetul și opriți procesarea regulilor din acest lanț. ◦ REJECT - Respingeți pachetul și notificați expeditorul că am făcut acest lucru și opriți procesarea regulilor din acest lanț. ◦ DROP - Ignorați în tăcere pachetul și opriți procesarea regulilor din acest lanț. ◦ LOG - Înregistrați pachetul și continuați să procesați mai multe reguli în acest lanț. Permite utilizarea opțiunilor --log-prefix și --log-level. • --log-prefix - Când vă conectați, puneți acest text înaintea mesajului de jurnal. Folosiți ghilimele duble în jurul textului de utilizat. • --log-level - Log utilizând nivelul syslog specificat. 7 este o alegere bună, cu excepția cazului în care aveți nevoie de altceva. • -i - Se potrivește numai dacă pachetul vine pe interfața specificată. • -I - Inserează o regulă. Este nevoie de două opțiuni, lanțul în care să insereze regula și numărul regulii care ar trebui să fie. ◦ -I INPUT 5 ar introduce regula în lanțul INPUT și o face a 5-a regulă din listă. • -v - Afișează mai multe informații în rezultat. Util pentru dacă aveți reguli care arată similar fără a utiliza -v. • -s --source - adresa[/mask] specificarea sursei • -d --destination - adresa[/mask] specificația destinației • -o --out-interface - nume de ieșire[+] nume de interfață de rețea ([+] pentru wildcard)
Permiterea sesiunilor stabilite Putem permite sesiunilor stabilite să primească trafic: sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
• Regula de mai sus nu are spații pe fiecare parte a virgulei în ESTABLISHED,RELATED
Dacă linia de mai sus nu funcționează, este posibil să fiți pe un VPS castrat al cărui furnizor nu a pus la dispoziție extensia, caz în care o versiune inferioară poate fi folosită ca ultimă soluție: sudo iptables -A INPUT -m stare --state ESTABLISHED,RELATED -j ACCEPT
Permiterea traficului de intrare pe anumite porturi Ați putea începe prin a bloca traficul, dar este posibil să lucrați prin SSH, unde ar trebui să permiteți SSH înainte de a bloca orice altceva. Pentru a permite traficul de intrare pe portul SSH implicit (22), ați putea spune iptables să permită intrarea întregului trafic TCP de pe acel port. sudo iptables -A INTRARE -p tcp --dport ssh -j ACCEPT
Referindu-ne la lista de mai sus, puteți vedea că aceasta spune iptables:
• adăugați această regulă la lanțul de intrare (-A INPUT) astfel încât să ne uităm la traficul de intrare • verificați dacă este TCP (-p tcp). • dacă da, verificați pentru a vedea dacă intrarea merge la portul SSH (--dport ssh). • dacă da, acceptați intrarea (-j ACCEPT).
Să verificăm regulile: (afișate doar primele câteva rânduri, vei vedea mai multe)
sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh Now, let's allow all incoming web traffic sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT Checking our rules, we have sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www
Am permis în mod special traficul tcp către porturile ssh și web, dar, deoarece nu am blocat nimic, tot traficul poate intra în continuare.
Blocarea traficului Odată ce este luată decizia de a accepta un pachet, nu mai există reguli care îl afectează. Întrucât regulile noastre care permit traficul ssh și web sunt pe primul loc, atâta timp cât regula noastră de a bloca tot traficul vine după ele, putem totuși să acceptăm traficul pe care îl dorim. Tot ce trebuie să facem este să punem regula de a bloca tot traficul la sfârșit.
sudo iptables -A INPUT -j DROP sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www DROP all -- anywhere anywhere
Deoarece nu am specificat o interfață sau un protocol, orice trafic pentru orice port de pe orice interfață este blocat, cu excepția web și ssh.
Editarea iptables Singura problemă cu configurația noastră de până acum este că chiar și portul loopback este blocat. Am fi putut scrie regula drop doar pentru eth0 specificând -i eth0, dar am putea adăuga și o regulă pentru loopback. Dacă anexăm această regulă, va veni prea târziu - după ce tot traficul a fost eliminat. Trebuie să introducem această regulă înainte de asta. Deoarece acesta este mult trafic, îl vom introduce ca primă regulă, astfel încât să fie procesat mai întâi.
sudo iptables -I INPUT 1 -i lo -j ACCEPT sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www DROP all -- anywhere anywhere
Prima și ultima linie arată aproape la fel, așa că vom enumera iptables mai detaliat.
sudo iptables -L -v Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www 0 0 DROP all -- any any anywhere anywhere
Acum puteți vedea mult mai multe informații. Această regulă este de fapt foarte importantă, deoarece multe programe folosesc interfața loopback pentru a comunica între ele. Dacă nu le lași să vorbească, ai putea rupe acele programe! Înregistrare În exemplele de mai sus, niciunul din trafic nu va fi înregistrat. Dacă doriți să înregistrați pachetele abandonate în syslog, aceasta ar fi cea mai rapidă modalitate: sudo iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
Tipuri de lanțuri
iptables folosește trei lanțuri diferite: intrare, înainte și ieșire. (INPUT,FORWARD,OUTPUT) Intrare – Acest lanț este folosit pentru a controla comportamentul conexiunilor de intrare. De exemplu, dacă un utilizator încearcă să facă SSH pe PC/server, iptables va încerca să potrivească adresa IP și portul cu o regulă din lanțul de intrare. Redirecționare – Acest lanț este utilizat pentru conexiunile de intrare care nu sunt de fapt livrate local. Gândiți-vă la un router – datele îi sunt întotdeauna trimise, dar rareori sunt destinate ruterului în sine; datele sunt doar redirecționate către ținta sa.
Dacă nu faci un fel de rutare, NATing sau altceva pe sistemul tău care necesită redirecționare, nici măcar nu vei folosi acest lanț. Există o modalitate sigură de a verifica dacă sistemul dvs. utilizează sau nu are nevoie de lanțul înainte.
iptables -L -v
Captura de ecran de mai sus este a unui server care rulează de câteva săptămâni și nu are restricții privind conexiunile de intrare sau de ieșire. După cum puteți vedea, lanțul de intrare a procesat 11 GB de pachete, iar lanțul de ieșire a procesat 17 GB. Lanțul înainte, pe de altă parte, nu a fost nevoie să proceseze un singur pachet. Acest lucru se datorează faptului că serverul nu efectuează niciun fel de redirecționare sau este utilizat ca dispozitiv de trecere.
Ieșire – Acest lanț este utilizat pentru conexiunile de ieșire. De exemplu, dacă încercați să ping howtogeek.com, iptables își va verifica lanțul de ieșire pentru a vedea care sunt regulile referitoare la ping și howtogeek.com înainte de a lua o decizie de a permite sau de a refuza încercarea de conectare.
Comportamentul implicit al lanțului de politici
Înainte de a intra și de a configura reguli specifice, veți dori să decideți care doriți să fie comportamentul implicit al celor trei lanțuri. Cu alte cuvinte, ce vrei să facă iptables dacă conexiunea nu se potrivește cu nicio regulă existentă?
Pentru a vedea ceea ce lanțurile dvs. de politici sunt configurate în prezent cu traficul nepotrivit, executați comanda iptables -L.
După cum puteți vedea, am folosit și comanda grep pentru a ne oferi rezultate mai curate. În acea captură de ecran, se crede că lanțurile noastre acceptă trafic. De multe ori, veți dori ca sistemul dvs. să accepte conexiuni în mod implicit. Dacă nu ați modificat anterior regulile lanțului de politici, această setare ar trebui să fie deja configurată. În orice caz, iată comanda pentru a accepta conexiunile în mod implicit:
iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT
Implicitând regula de acceptare, puteți utiliza apoi iptables pentru a refuza anumite adrese IP sau numere de porturi, continuând să acceptați toate celelalte conexiuni. Vom ajunge la acele comenzi într-un minut.
Dacă preferați să refuzați toate conexiunile și să specificați manual cărora doriți să le permiteți să se conecteze, ar trebui să modificați politica implicită a lanțurilor dvs. pentru a renunța. Acest lucru ar fi probabil util doar pentru serverele care conțin informații sensibile și care au întotdeauna aceleași adrese IP conectate la ele.
iptables --policy INPUT DROPiptables --policy OUTPUT DROPiptables --policy FORWARD DROP
Răspunsuri specifice conexiunii Cu politicile implicite de lanț configurate, puteți începe să adăugați reguli la iptables, astfel încât să știe ce să facă atunci când întâlnește o conexiune de la sau către o anumită adresă IP sau port. În acest ghid, vom trece peste cele trei „răspunsuri” cele mai elementare și utilizate în mod obișnuit. Accept – Permite conexiunea. Renunțați – Renunțați la conexiunea, acționați ca și cum nu s-ar fi întâmplat niciodată. Acest lucru este cel mai bine dacă nu doriți ca sursa să realizeze că sistemul dvs. există. Respingere – Nu permiteți conexiunea, dar trimiteți înapoi o eroare. Acest lucru este cel mai bine dacă nu doriți ca o anumită sursă să se conecteze la sistemul dvs., dar doriți ca ei să știe că firewall-ul dvs. le-a blocat. Cel mai bun mod de a arăta diferența dintre aceste trei reguli este să arăți cum arată atunci când un PC încearcă să pună ping la o mașină Linux cu iptables configurat pentru fiecare dintre aceste setări.
Respingerea conexiunii:
Permiterea sau blocarea conexiunilor specifice Cu lanțurile de politici configurate, acum puteți configura iptables pentru a permite sau bloca anumite adrese, intervale de adrese și porturi. În aceste exemple, vom seta conexiunile la DROP, dar le puteți comuta la ACCEPT sau REJECT, în funcție de nevoile dvs. și de modul în care v-ați configurat lanțurile de politici. Notă: În aceste exemple, vom folosi iptables -A pentru a adăuga reguli la lanțul existent. iptables începe din partea de sus a listei sale și parcurge fiecare regulă până când găsește una care se potrivește. Dacă trebuie să inserați o regulă deasupra alteia, puteți utiliza iptables -I [lanț] [număr] pentru a specifica numărul pe care ar trebui să-l figureze în listă. Conexiuni de la o singură adresă IP
Acest exemplu arată cum să blocați toate conexiunile de la adresa IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Conexiuni de la o serie de adrese IP Acest exemplu arată cum să blocați toate adresele IP din intervalul de rețea 10.10.10.0/24. Puteți utiliza o mască de rețea sau o notație standard pentru a specifica intervalul de adrese IP.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
sau
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Conexiuni la un anumit port Acest exemplu arată cum să blocați conexiunile SSH din 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Puteți înlocui „ssh” cu orice protocol sau număr de port. Partea -p tcp a codului spune iptables ce fel de conexiune folosește protocolul. Dacă ați blocat un protocol care utilizează UDP mai degrabă decât TCP, atunci ar fi necesar -p udp. Acest exemplu arată cum să blocați conexiunile SSH de la orice adresă IP.
iptables -A INPUT -p tcp --dport ssh -j DROP
Statele de conexiune După cum am menționat mai devreme, o mulțime de protocoale vor necesita comunicare în două sensuri. De exemplu, dacă doriți să permiteți conexiuni SSH la sistemul dvs., lanțurile de intrare și ieșire vor avea nevoie de o regulă adăugată la ele. Dar, ce se întâmplă dacă doriți doar ca SSH să intre în sistemul dvs. să fie permis? Adăugarea unei reguli la lanțul de ieșire nu va permite și încercările SSH de ieșire? Aici intervin stările de conexiune, care vă oferă capacitatea de care aveți nevoie pentru a permite comunicarea în două sensuri, dar permite stabilirea conexiunilor într-un singur sens. Uitați-vă la acest exemplu, unde conexiunile SSH DE LA 10.10.10.10 sunt permise, dar conexiunile SSH LA 10.10.10.10 nu sunt. Cu toate acestea, sistemului i se permite să trimită înapoi informații prin SSH atâta timp cât sesiunea a fost deja stabilită, ceea ce face posibilă comunicarea SSH între aceste două gazde.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m stare --state NOU,STABILIT -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m stat --state ESTABLISHED -j ACCEPT
Salvarea modificărilor Modificările pe care le faceți regulilor dvs. iptables vor fi eliminate data viitoare când serviciul iptables va fi repornit, cu excepția cazului în care executați o comandă pentru a salva modificările. Această comandă poate diferi în funcție de distribuția dvs.:
sudo /sbin/iptables-save
Alte Comenzi Listați regulile iptables configurate în prezent: iptables -L Adăugarea opțiunii -v vă va oferi informații despre pachet și octet, iar adăugarea -n va lista totul numeric. Cu alte cuvinte – numele de gazdă, protocoalele și rețelele sunt listate ca numere. Pentru a șterge toate regulile configurate în prezent, puteți lansa comanda de golire. iptables -F