25 Noderīgi IPtable ugunsmūra noteikumi, kas jāzina katram Linux administratoram


konfigurējiet ugunsmūri tā, lai tas atbilstu sistēmas un lietotāju prasībām gan ienākošajiem, gan izejošajiem savienojumiem, neatstājot sistēmu neaizsargātu pret uzbrukumiem.

Šeit noder iptables . Iptables ir Linux komandrindas ugunsmūris, kas ļauj sistēmas administratoriem pārvaldīt ienākošo un izejošo datplūsmu, izmantojot konfigurējamu tabulas kārtulu kopu.

Programmā Iptables tiek izmantotas tabulu kopas, kurās ir ķēdes, kurās ir iebūvētu vai lietotāja definētu kārtulu kopa. Pateicoties viņiem, sistēmas administrators var pareizi filtrēt savas sistēmas tīkla trafiku.

Saskaņā ar iptables rokasgrāmatu pašlaik ir 3 veidu tabulas:

    1. FILTER - šī ir noklusējuma tabula, kurā iekļautas iebūvētās ķēdes:
      1. INPUT - paketes, kas paredzētas vietējām kontaktligzdām
      2. FORWARD - paketes, kas tiek virzītas caur sistēmu
      3. OUTPUT - lokāli ģenerētas paketes

      1. PREROUTING - izmanto pakešu maiņai, tiklīdz tā ir saņemta
      2. OUTPUT - izmanto, lai mainītu lokāli ģenerētas paketes
      3. POSTROUTING - izmanto pakešu maiņai, kad tās gatavojas iziet

      1. PREROUTING - ienākošo savienojumu mainīšanai
      2. OUTPUT - lokāli ģenerētu pakešu mainīšanai
      3. INPUT - ienākošajām paketēm
      4. POSTROUTING - pakešu maiņai, kad tās gatavojas iziet
      5. FORWARD - paketēm, kuras tiek virzītas caur lodziņu

      Šajā rakstā jūs redzēsiet dažas noderīgas komandas, kas palīdzēs pārvaldīt Linux lodziņa ugunsmūri, izmantojot iptables. Šī raksta vajadzībām es sākšu ar vienkāršākām komandām un ietu uz sarežģītāku līdz beigām.

      1. Start/Stop/Restart Iptables ugunsmūri

      Pirmkārt, jums jāzina, kā pārvaldīt iptables pakalpojumu dažādos Linux izplatījumos. Tas ir diezgan viegli:

      ------------ On Cent/RHEL 7 and Fedora 22+ ------------
      # systemctl start iptables
      # systemctl stop iptables
      # systemctl restart iptables
      
      ------------ On Cent/RHEL 6/5 and Fedora ------------
      # /etc/init.d/iptables start 
      # /etc/init.d/iptables stop
      # /etc/init.d/iptables restart
      

      2. Pārbaudiet visus IPtables ugunsmūra noteikumus

      Ja vēlaties pārbaudīt esošos noteikumus, izmantojiet šādu komandu:

      # iptables -L -n -v
      

      Tam vajadzētu atgriezt līdzīgu izvadi kā zemāk:

      Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
       pkts bytes target prot opt in out source destination 
       0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
       0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
       0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
       0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
      Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target prot opt in out source destination 
       0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
       0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
      Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
       pkts bytes target prot opt in out source destination

      Ja vēlaties pārbaudīt noteiktas tabulas kārtulas, varat izmantot opciju -t , kam seko pārbaudāmā tabula. Piemēram, lai pārbaudītu kārtulas tabulā NAT , varat izmantot:

      # iptables -t nat -L -v -n
      

      3. Bloķējiet konkrētu IP adresi IPtables ugunsmūrī

      Ja atrodat neparastu vai ļaunprātīgu darbību no IP adreses, varat bloķēt šo IP adresi ar šādu kārtulu:

      # iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
      

      Kur jāmaina "xxx.xxx.xxx.xxx" ar faktisko IP adresi. Esiet ļoti uzmanīgs, izpildot šo komandu, jo jūs varat nejauši bloķēt savu IP adresi. Opcija -A pievieno kārtulu atlasītās ķēdes beigās.

      Gadījumā, ja vēlaties bloķēt tikai TCP trafiku no šīs IP adreses, varat izmantot opciju -p , kas norāda protokolu. Tādā veidā komanda izskatīsies šādi:

      # iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
      

      4. Atbloķējiet IP adresi IPtables ugunsmūrī

      Ja esat nolēmis, ka vairs nevēlaties bloķēt pieprasījumus no konkrētas IP adreses, varat izdzēst bloķēšanas kārtulu ar šādu komandu:

      # iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
      

      Opcija -D izdzēš vienu vai vairākas kārtulas no atlasītās ķēdes. Ja vēlaties izmantot garāku opciju, varat izmantot --delete .

      5. Bloķējiet IPtables ugunsmūra specifisko portu

      Dažreiz jūs varat bloķēt ienākošos vai izejošos savienojumus noteiktā ostā. Tas ir labs drošības pasākums, un, izveidojot ugunsmūri, jums patiešām vajadzētu padomāt par šo jautājumu.

      Lai bloķētu izejošos savienojumus noteiktā porta lietojumā:

      # iptables -A OUTPUT -p tcp --dport xxx -j DROP
      

      Lai atļautu ienākošo savienojumu izmantošanu:

      # iptables -A INPUT -p tcp --dport xxx -j ACCEPT
      

      Abos piemēros mainiet "xxx" ar faktisko portu, kuru vēlaties atļaut. Ja vēlaties bloķēt UDP trafiku, nevis TCP, vienkārši mainiet "tcp" ar "udp" iepriekš minētajā kārtulā iptables.

      6. Atļaujiet vairākiem portiem IPtable, izmantojot Multiport

      Varat atļaut vairākas ostas vienlaikus, izmantojot multiport, zemāk jūs varat atrast šādu kārtulu gan ienākošajiem, gan izejošajiem savienojumiem:

      # iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
      # iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
      

      7. Atļaut konkrētu tīkla diapazonu noteiktā IPtable portā

      Varat ierobežot noteiktus savienojumus noteiktā ostā ar konkrētu tīklu. Pieņemsim, ka vēlaties atļaut izejošos savienojumus portā 22 ar tīklu 192.168.100.0/24 .

      To var izdarīt ar šo komandu:

      # iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
      

      8. Bloķējiet Facebook IPtables ugunsmūrī

      Daži darba devēji labprāt bloķē saviem darbiniekiem piekļuvi Facebook. Zemāk ir sniegts piemērs, kā bloķēt datplūsmu uz Facebook.

      Piezīme: Ja esat sistēmas administrators un jums jāpiemēro šie noteikumi, ņemiet vērā, ka kolēģi var pārtraukt ar jums runāt :)

      Vispirms atrodiet Facebook izmantotās IP adreses:

      # host facebook.com 
      facebook.com has address 66.220.156.68
      
      # whois 66.220.156.68 | grep CIDR
      CIDR: 66.220.144.0/20
      

      Pēc tam jūs varat bloķēt šo Facebook tīklu, izmantojot:

      # iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP
      

      Paturiet prātā, ka Facebook izmantotais IP adrešu diapazons jūsu valstī var atšķirties.

      9. Iestatiet portu pārsūtīšanu IPtable

      Dažreiz jūs varētu vēlēties pārsūtīt viena pakalpojuma trafiku uz citu ostu. To var panākt ar šādu komandu:

      # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
      

      Iepriekš minētā komanda pārsūta visu ienākošo trafiku tīkla saskarnē eth0 no porta 25 uz portu 2525 . Jūs varat mainīt ostas ar tām, kas jums nepieciešamas.

      10. Bloķējiet tīkla applūšanu Apache portā ar IPtable

      Dažreiz IP adreses var pieprasīt pārāk daudz savienojumu ar jūsu vietnes tīmekļa portiem. Tas var izraisīt vairākas problēmas, un, lai novērstu šādas problēmas, varat izmantot šādu kārtulu:

      # iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
      

      Iepriekš minētā komanda ierobežo ienākošos savienojumus no minūtes līdz 100 un iestata ierobežojuma sēriju 200 . Jūs varat rediģēt limitu un limitu pārsprāgt atbilstoši savām specifiskajām prasībām.

      11. Bloķējiet ienākošos ping pieprasījumus IPtable

      Daži sistēmas administratori drošības apsvērumu dēļ labprāt bloķē ienākošos ping pieprasījumus. Kaut arī draudi nav tik lieli, ir labi zināt, kā bloķēt šādu pieprasījumu:

      # iptables -A INPUT -p icmp -i eth0 -j DROP
      

      12. Atļaut piekļuvi atgriezeniskai saitei

      Piekļuve atgriezeniskai saitei (piekļuve no 127.0.0.1 ) ir svarīga, un jums vienmēr jāatstāj tā aktīva:

      # iptables -A INPUT -i lo -j ACCEPT
      # iptables -A OUTPUT -o lo -j ACCEPT
      

      13. Uzturiet IPtables nomestu tīkla pakešu žurnālu

      Ja vēlaties reģistrēt nomestās paketes tīkla saskarnē eth0 , varat izmantot šādu komandu:

      # iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
      

      Vērtību pēc "--log-prefix" varat mainīt ar kaut ko pēc savas izvēles. Ziņojumi tiek reģistrēti mapē /var/log/messages , un tos varat meklēt, izmantojot:

      # grep "IPtables dropped packets:" /var/log/messages
      

      14. Bloķējiet piekļuvi konkrētai MAC adresei IPtable

      Piekļuvi savai sistēmai var bloķēt no konkrētas MAC adreses, izmantojot:

      # iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
      

      Protams, jums būs jāmaina "00: 00: 00: 00: 00: 00" 00 " ar faktisko MAC adresi, kuru vēlaties bloķēt.

      15. Ierobežojiet vienlaicīgu savienojumu skaitu vienā IP adresē

      Ja jūs nevēlaties, lai no vienas IP adreses konkrētajā ostā būtu izveidots pārāk daudz vienlaikus savienojuma, varat izmantot tālāk norādīto komandu:

      # iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
      

      Iepriekš minētā komanda katram klientam ļauj izveidot ne vairāk kā 3 savienojumus. Protams, jūs varat mainīt porta numuru, lai tas atbilstu dažādiem pakalpojumiem. Arī --connlimit-above ir jāmaina, lai tas atbilstu jūsu prasībām.

      16. Meklēt IPtables Rule

      Kad esat definējis savus iptables noteikumus, laiku pa laikam vēlaties meklēt, un, iespējams, būs jāmaina tie. Vienkāršs veids, kā meklēt savos noteikumos, ir izmantot:

      # iptables -L $table -v -n | grep $string
      

      Iepriekš minētajā piemērā jums būs jāmaina $table ar faktisko tabulu, kurā vēlaties meklēt, un $string ar faktisko virkni, kuru meklējat.

      Šeit ir piemērs:

      # iptables -L INPUT -v -n | grep 192.168.0.100
      

      17. Definējiet jaunu IPTables ķēdi

      Izmantojot iptables, varat definēt savu ķēdi un tajā saglabāt pielāgotus noteikumus. Lai definētu ķēdi, izmantojiet:

      # iptables -N custom-filter
      

      Tagad varat pārbaudīt, vai jūsu jaunais filtrs ir:

      # iptables -L
      
      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
      Chain custom-filter (0 references)
      target prot opt source destination

      18. Flush IPtables ugunsmūra ķēdes vai noteikumi

      Ja vēlaties izskalot ugunsmūra ķēdes, varat izmantot:

      # iptables -F
      

      Jūs varat noskalot ķēdes no konkrētas galda ar:

      # iptables -t nat -F
      

      Varat mainīt "nat" ar faktisko tabulu, kuras ķēdes vēlaties izskalot.

      19. Saglabājiet IPtables kārtulas failā

      Ja vēlaties saglabāt ugunsmūra kārtulas, varat izmantot komandu iptables-save . Lai kārtulas saglabātu un saglabātu failā, varat izmantot sekojošo:

      # iptables-save > ~/iptables.rules
      

      Kur jūs glabājat failu un kā to nosauksit, atkarīgs no jums.

      20. Atjaunojiet IPtables noteikumus no faila

      Ja vēlaties atjaunot iptables kārtulu sarakstu, varat izmantot iptables-atjaunot . Komanda izskatās šādi:

      # iptables-restore < ~/iptables.rules
      

      Protams, ceļš uz jūsu noteikumu failu var būt atšķirīgs.

      21. IPtables iestatīšana PCI atbilstības noteikumiem

      Dažiem sistēmas administratoriem var būt nepieciešams konfigurēt savus serverus kā PCI savietojamus. Dažādiem PCI atbilstības pārdevējiem ir daudz prasību, taču ir maz kopīgu.

      Daudzos gadījumos jums būs nepieciešama vairāk nekā viena IP adrese. Vietnes IP adresei būs jāpiemēro tālāk minētie noteikumi. Esiet īpaši piesardzīgs, lietojot zemāk minētos noteikumus, un izmantojiet tos tikai tad, ja esat pārliecināts, ko darāt:

      # iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
      

      Ja izmantojat cPanel vai līdzīgu vadības paneli, iespējams, būs jābloķē arī tā porti. Šeit ir piemērs:

      # iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP
      

      Piezīme. Lai pārliecinātos, ka atbilstat PCI pārdevēja prasībām, uzmanīgi pārbaudiet viņa ziņojumu un piemērojiet nepieciešamos noteikumus. Dažos gadījumos jums var būt nepieciešams bloķēt UDP trafiku arī noteiktās ostās.

      22. Atļaut izveidot un saistītus savienojumus

      Tā kā ienākošā un izejošā tīkla trafiks ir atsevišķs, jūs vēlaties atļaut izveidoto un saistīto ienākošo trafiku. Ienākošajiem savienojumiem dariet to ar:

      # iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      

      Izejošai lietošanai:

      # iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
      

      23. Nometiet nederīgas paketes IPtables

      Iespējams, ka dažas tīkla paketes tiek atzīmētas kā nederīgas. Daži cilvēki, iespējams, izvēlas reģistrēt šīs paketes, bet citi izvēlas tās nomest. Lai atmestu nederīgas paketes, varat izmantot:

      # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 
      

      24. Bloķēt savienojumu tīkla saskarnē

      Dažām sistēmām var būt vairākas tīkla saskarnes. Jūs varat ierobežot piekļuvi šim tīkla interfeisam vai bloķēt savienojumus no noteiktas IP adreses.

      Piemēram:

      # iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
      

      Mainiet “xxx.xxx.xxx.xxx” ar faktisko IP adresi (vai tīklu), kuru vēlaties bloķēt.

      25. Atspējot izejošās vēstules, izmantojot IPTables

      Ja jūsu sistēmai nevajadzētu sūtīt nevienu e-pastu, varat bloķēt izejošās ostas SMTP portos. Piemēram, jūs varat izmantot šo:

      # iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
      

      Secinājums

      Iptables ir spēcīgs ugunsmūris, no kura jūs viegli varat gūt labumu. Katram sistēmas administratoram ir svarīgi apgūt vismaz iptables pamatus. Ja vēlaties atrast sīkāku informāciju par iptables un tā iespējām, ieteicams izlasīt rokasgrāmatu:

      # man iptables
      

      Ja jūs domājat, ka mums vajadzētu pievienot vairāk komandu šim sarakstam, lūdzu, kopīgojiet tos ar mums, iesniedzot tos zemāk esošajā komentāru sadaļā.