Mwongozo

Usanidi wa ufw kwenye Linux: firewall ya seva na misingi ya nftables

Imesasishwa: · Skillaria.Top

Usanidi wa ufw una hatua tatu: weka sera chaguo-msingi (sudo ufw default deny incoming na allow outgoing), ruhusu SSH na bandari zinazohitajika (sudo ufw allow 22/tcp, sudo ufw allow 443/tcp), kisha washa firewall kwa sudo ufw enable. Sheria zinakaguliwa kwa sudo ufw status numbered, na chini ya kofia ufw inadhibiti netfilter kupitia iptables au nftables.

Firewall kwenye Linux huamua ni pakiti gani za mtandao zipitishwe kwenye seva na zipi zitupwe. Kernel yenyewe hufanya hivyo kwa mfumo mdogo wa netfilter, na unaudhibiti kwa zana: iptables na nftables za kiwango cha chini, na ufw (Uncomplicated Firewall) ya juu zaidi. Kwa seva nyingi za Ubuntu na Debian, usanidi wa ufw unachukua dakika tano: zuia kila kinachoingia, fungua SSH na bandari za huduma, kisha washa. Hapa chini kuna mpango wa hatua kwa hatua, makosa ya kawaida, na kiwango cha chini cha nftables ili uelewe kinachotokea chini ya kofia.

Firewall inavyofanya kazi kwenye Linux

Uchujaji wa pakiti unaishi kwenye kernel — hii ni netfilter. Inatoa sehemu za kukatiza (hooks): trafiki inayoingia kwenye mashine yenyewe, inayotoka, na ile inayopita (forward). Zana za mtumiaji huandika sheria kwenye kernel kwa sehemu hizi.

ZanaNgaziWakati wa kuitumia
ufwjuu, sintaksia rahisiseva moja ya Ubuntu/Debian, sheria za kawaida
firewalldjuu, yenye kanda (zones)RHEL, Rocky, Fedora
nftables (nft)chini, ya kisasasheria ngumu, NAT, seti za anwani
iptableschini, inayopitwa na wakatimifumo ya zamani na hati za zamani

Muhimu: tumia zana moja ya usimamizi. Ukihariri sheria kwa ufw na kwa iptables kwa mkono kwa wakati mmoja, zitafutana na hali itakuwa isiyotabirika.

Kusakinisha na kukagua ufw

Kwenye Ubuntu ufw kwa kawaida imeshasakinishwa lakini imezimwa. Kwenye Debian inasakinishwa kando:

$ sudo apt update
$ sudo apt install ufw
$ sudo ufw status
Status: inactive

Hali inactive inamaanisha kwamba sheria za ufw hazitumiki. Bado si wakati wa kuwasha firewall: kwanza ruhusu SSH, vinginevyo kwenye seva ya mbali utajifungia nje.

Usanidi wa ufw hatua kwa hatua kwenye seva

Hatua ya 1. Sera chaguo-msingi

Sera chaguo-msingi ni hatua itakayochukuliwa kwa pakiti ikiwa hakuna sheria iliyolingana. Mpango salama kwa seva ni: kinachoingia kimezuiwa, kinachotoka kimeruhusiwa.

$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Majibu kwa miunganisho yako ya kutoka yanapita yenyewe: ufw inafuatilia hali ya miunganisho (connection tracking), kwa hiyo si lazima kufungua bandari kwa majibu.

Hatua ya 2. Ruhusu SSH

$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH ni wasifu wa programu. Ikiwa SSH inasikiliza bandari isiyo ya kawaida, iruhusu waziwazi: sudo ufw allow 2222/tcp. Ili kujua ni bandari ipi sshd inasikiliza kweli, tumia sudo ss -tlnp | grep sshd.

Hatua ya 3. Fungua bandari za huduma

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Taja itifaki: bila /tcp ufw itafungua bandari kwa TCP na UDP pia, na mlango wazi usiohitajika hauna faida.

Hatua ya 4. Washa firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

ufw itaanza mara moja na itajiwasha kila kompyuta inapowashwa. Usifunge kikao chako cha sasa cha SSH: fungua kikao cha pili na uhakikishe kwamba muunganisho unafanya kazi.

Hatua ya 5. Kagua sheria

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Sheria za IPv6 ufw inaziunda yenyewe ikiwa /etc/default/ufw ina IPV6=yes (hiyo ndiyo thamani chaguo-msingi).

Jinsi ya kufungua bandari kwenye ufw: sintaksia zote

Amri ufw allow inaelewa umbo fupi na kamili. Umbo fupi ni rahisi kwa kesi za kawaida, na kamili unafaa unapotaka kutaja chanzo, interfeisi au anwani ya marudio.

KaziAmri
Bandari ya TCPsudo ufw allow 443/tcp
Bandari ya UDPsudo ufw allow 51820/udp
Safu ya bandarisudo ufw allow 6000:6007/tcp
Kwa jina la hudumasudo ufw allow https
Kutoka IP mojasudo ufw allow from 203.0.113.10
Kutoka subnet kwenda bandarisudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
Kwenye interfeisi fulanisudo ufw allow in on eth1 to any port 3306 proto tcp
Zuiasudo ufw deny 23/tcp
Kataa kwa jibusudo ufw reject 25/tcp

Tofauti kati ya deny na reject: deny hutupa pakiti kimya, na mteja husubiri hadi muda uishe; reject hutuma jibu kwamba bandari imefungwa. Kwa dunia ya nje kwa kawaida huchagua deny; kwa mitandao ya ndani reject ni bora zaidi, kwa sababu wateja wanaona kosa mara moja.

Hifadhidata ipatikane kutoka seva moja tu

Kazi ya kawaida: PostgreSQL au MySQL zisionekane kutoka intaneti, lakini programu kwenye seva jirani iunganike nazo.

$ sudo ufw allow from 10.0.0.5 to any port 5432 proto tcp
Rule added

Bandari 5432 inabaki imefungwa kwa wengine wote kutokana na sera ya deny incoming. Zaidi ya hayo, weka DBMS yenyewe isikilize anwani ya ndani tu — firewall na mipangilio ya huduma zinalindana.

Wasifu wa programu

Vifurushi vinaweza kuweka maelezo ya bandari zao kwenye /etc/ufw/applications.d/. Orodha na maudhui ya wasifu:

$ sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
$ sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
  80,443/tcp

Kuruhusu wasifu: sudo ufw allow "Nginx Full". Majina yenye nafasi yaweke kwenye nukuu. Wasifu wako mwenyewe unaweza kuelezwa kwa muundo wa INI katika folda hiyo hiyo na kutumika kwa amri sudo ufw app update jina.

Jinsi ya kufuta sheria ya ufw

Njia ya kuaminika zaidi ni kwa namba:

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] OpenSSH (v6)               ALLOW IN    Anywhere (v6)
[ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

$ sudo ufw delete 2
Deleting:
 allow 80/tcp
Proceed with operation (y|n)? y
Rule deleted

Baada ya kufuta, namba zinasogea, kwa hiyo kabla ya kufuta nyingine endesha tena status numbered. Njia ya pili ni kurudia sheria na neno delete: sudo ufw delete allow 80/tcp; itafuta toleo la IPv4 na la IPv6 kwa pamoja.

Mpangilio wa sheria na kuingiza juu

ufw inakagua sheria kutoka juu kwenda chini, na ya kwanza inayolingana inatumika. Kwa hiyo zuio la anwani fulani lazima liwe juu ya ruhusa ya jumla:

$ sudo ufw insert 1 deny from 198.51.100.23
Rule inserted

Ukiongeza deny kwa amri ya kawaida, itaishia mwishoni mwa orodha baada ya allow 443/tcp na haitafanya kazi kwa bandari hiyo.

Kulinda SSH dhidi ya majaribio ya nenosiri: ufw limit

Sheria ya limit inaruhusu muunganisho, lakini inazuia anwani iliyofungua miunganisho 6 au zaidi ndani ya sekunde 30:

$ sudo ufw limit OpenSSH
Rule updated

Hii ni ulinzi rahisi dhidi ya majaribio ya wingi ya kubahatisha nenosiri. Kwa ulinzi thabiti ongeza kuingia kwa funguo pekee na, ukipenda, fail2ban — inaweza kuzuia anwani kupitia ufw.

Kumbukumbu za ufw

Kuandika kumbukumbu kunawashwa kwa sudo ufw logging on; ngazi ni low, medium, high, full. Rekodi zinaingia kwenye /var/log/ufw.log (kupitia rsyslog) na kwenye jarida la kernel:

$ sudo journalctl -k | grep 'UFW BLOCK' | tail -2
Oct 14 10:12:03 web kernel: [UFW BLOCK] IN=eth0 OUT= SRC=45.155.205.1 DST=192.0.2.10 PROTO=TCP SPT=51544 DPT=3389
Oct 14 10:12:09 web kernel: [UFW BLOCK] IN=eth0 OUT= SRC=89.248.165.7 DST=192.0.2.10 PROTO=TCP SPT=40312 DPT=23

Sehemu za SRC na DPT zinaonyesha nani aligonga na kwenye bandari gani. Ikiwa huduma haijibu na kwenye kumbukumbu kuna UFW BLOCK yenye bandari yake, basi sheria ya kuiruhusu haijaongezwa.

ufw na Docker: kwa nini bandari zinafunguka kinyume na sheria

Hii ndiyo mtego maarufu zaidi. Docker inapochapisha bandari (-p 8080:80), yenyewe huongeza sheria za NAT na mnyororo DOCKER, na trafiki kwenda kwenye kontena inapita kupitia forward, ikipita sheria za kuingia za ufw. Matokeo yake, ufw status haionyeshi bandari 8080, lakini kutoka nje inafikika.

Njia za kutatua:

  • Chapisha bandari kwenye localhost pekee: -p 127.0.0.1:8080:80, kisha toa nje kupitia proksi ya nyuma (nginx).
  • Ongeza sheria zako kwenye mnyororo DOCKER-USER — Docker haiufuti.
  • Usichapishe bandari za kontena za huduma kabisa, badala yake ziunganishe kupitia mtandao wa Docker.

Kuweka upya na kuzima

$ sudo ufw disable     # zima, sheria zinabaki
$ sudo ufw reset       # futa sheria zote na kuzima
$ sudo ufw reload      # soma usanidi upya

Kabla ya reset, ufw huhifadhi nakala za faili za sheria kwenye /etc/ufw/ zenye kiambishi cha tarehe. Sheria zenyewe zinahifadhiwa kwenye /etc/ufw/user.rules na user6.rules — hazihaririwi kwa mkono, zinabadilishwa kwa amri tu.

Misingi ya nftables

nftables ni mbadala wa kisasa wa iptables kwenye kernel ya Linux. Kwenye Debian 10+ na Ubuntu 20.10+ amri iptables kwa chaguo-msingi inafanya kazi kupitia safu ya utangamano iptables-nft, kwa hiyo sheria za ufw pia zinaishia kwenye nftables. Kuona kila kitu kilichopakiwa kwenye kernel:

$ sudo nft list ruleset

Muundo wa nftables: jedwali (familia ip, ip6, au inet kwa zote mbili) lina minyororo iliyounganishwa na sehemu za netfilter, na minyororo ina sheria. Firewall ya chini kabisa kwa seva kwenye faili /etc/nftables.conf:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        ip protocol icmp accept
        meta l4proto ipv6-icmp accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Tumia na uwashe wakati wa kuwasha kompyuta:

$ sudo nft -c -f /etc/nftables.conf   # kagua sintaksia tu
$ sudo systemctl enable --now nftables

Sheria zinaweza kuongezwa papo hapo, lakini zitapotea baada ya kuwasha upya ikiwa hazikuandikwa kwenye faili:

$ sudo nft add rule inet filter input tcp dport 5432 ip saddr 10.0.0.5 accept
$ sudo nft -a list chain inet filter input   # -a inaonyesha handle za sheria
$ sudo nft delete rule inet filter input handle 9

Faida kuu ya nftables ni seti ({ 22, 80, 443 }) na jedwali moja la inet kwa IPv4 na IPv6. Usiendeshe nftables.service yako pamoja na ufw kwa wakati mmoja: flush ruleset itafuta sheria za ufw.

Makosa ya kawaida

  • Umewasha ufw bila sheria ya SSH — ufikiaji umepotea. Msaada unatoka kwenye koni ya mtoa huduma (VNC/serial): sudo ufw allow OpenSSH au sudo ufw disable.
  • Umefungua bandari lakini huduma haipatikani — huduma inasikiliza 127.0.0.1, si anwani ya nje. Angalia kwa ss -tlnp.
  • Kuna firewall ya wingu pia — watoa huduma wengi wana vikundi vya usalama; bandari inapaswa kufunguliwa humo pia.
  • deny haifanyi kazi — sheria iko chini ya ile ya ruhusa; tumia insert 1.

Hitimisho

Usanidi wa msingi wa ufw ni default deny incoming, ruhusa ya SSH na bandari za huduma, ufw enable, na ukaguzi kwa status numbered. Kwa ufikiaji wa kipekee tumia sheria zenye from na port, kwa SSH tumia limit, na unapofanya kazi na Docker kumbuka kwamba inapita ufw. Unapohitaji NAT au seti ngumu za sheria, hamia nftables. Ulinzi wa seva kwa firewall umeelezwa kwa vitendo katika kozi ya Linux.

Maswali ya mara kwa mara

ufw inatofautiana vipi na iptables?

ufw ni safu ya juu yenye sintaksia rahisi, ambayo yenyewe hutengeneza sheria za iptables au nftables. iptables na nftables ni zana za kiwango cha chini zinazotoa udhibiti kamili, lakini zinahitaji ujuzi zaidi.

Je, sheria za ufw zinabaki baada ya kuwasha upya seva?

Ndiyo. Baada ya sudo ufw enable firewall inaanza wakati wa kuwasha, na sheria zinahifadhiwa kwenye /etc/ufw/user.rules na user6.rules.

Je, ninahitaji kufungua bandari kwa miunganisho ya kutoka?

Ikiwa sera ya allow outgoing imewekwa, hapana. ufw inaruhusu majibu ya miunganisho ya kutoka kiotomatiki kwa sababu ya kufuatilia hali ya miunganisho.

Ninawezaje kuruhusu ping wakati ufw imewashwa?

Kwa chaguo-msingi ufw tayari inaruhusu ICMP echo-request inayoingia: sheria hiyo imewekwa kwenye /etc/ufw/before.rules. Ili kuzuia ping, badilisha ACCEPT kuwa DROP kwenye faili hilo kisha endesha sudo ufw reload.

Je, kuna ufw kwenye CentOS na Rocky Linux?

Huko zana ya kawaida ni firewalld yenye amri firewall-cmd. ufw inaweza kusakinishwa kutoka EPEL, lakini si vizuri kuichanganya na firewalld.

Jifunze mada hii kwa video

Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.

Nenda kwenye kozi