SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-09-04

Cara Konfigurasi Firewalld di Rocky atau AlmaLinux

Ketahui cara mengurus firewall pada Rocky atau AlmaLinux dengan betul. Panduan ini merangkumi pembukaan port SSH, zon, serta cara mengelakkan ralat --permanent selepas but semula.

Apakah itu firewalld, dan mengapa Rocky serta AlmaLinux menyertakannya

firewalld ialah pengurus firewall yang dipasang secara lalai pada Rocky Linux, AlmaLinux dan sistem lain yang dibina semula daripada Red Hat Enterprise Linux (RHEL). Kedua-dua pengedaran ini mewarisi tetapan lalai tersebut dan bukannya memilihnya sendiri, yang lebih mudah difahami apabila anda mengetahui bagaimana Rocky dan AlmaLinux mula membina semula hasil kerja Red Hat selepas CentOS mengubah haluan. Ia tidak memeriksa paket secara langsung. Ia menyimpan konfigurasi dan menukarkan konfigurasi tersebut menjadi peraturan nftables. Satu arahan, firewall-cmd, menyuntingnya sementara pelayan kekal dalam talian. Tiada apa-apa dalam panduan ini yang berubah antara kedua-dua pengedaran tersebut, kerana perkara yang sebenarnya membezakan Rocky daripada AlmaLinux ialah janji keserasian dan julat CPU yang masih disokong, bukannya firewall.

Jika anda sudah mengetahui bagaimana ufw berfungsi pada VPS Ubuntu, anda sudah memahami tugasnya. firewalld menambah dua konsep yang tidak dimiliki oleh ufw. Pertama ialah zon: polisi bernama yang digunakan untuk mengasingkan paket. Kedua ialah pemisahan antara peraturan semasa (live) dan peraturan yang disimpan, iaitu flag --permanent dan punca kekeliruan terbesar dalam alat ini.

Segala perkara di bawah ialah arahan yang anda jalankan pada pelayan anda sendiri. Uji setiap perubahan daripada mesin kedua, kerana peraturan yang kelihatan betul pada pelayan mungkin masih salah apabila diakses dari internet.

Buka SSH sebelum anda melakukan perkara lain

Kebanyakan pemasangan Rocky dan AlmaLinux sudah mempunyai firewalld yang tersedia dan berjalan, dan konfigurasi lalai membenarkan SSH. Sesetengah imej awan minimal membuang perkhidmatan ini. Semak statusnya dan jangan membuat andaian.

sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --state

firewall-cmd --state mencetak running. Jika perkhidmatan dihentikan, setiap panggilan firewall-cmd yang lain akan menjawab FirewallD is not running dan keluar dengan kod bukan sifar. Itu adalah perkara pertama yang perlu disemak apabila sesuatu arahan kelihatan tidak melakukan apa-apa.

Sekarang, baca apa yang dibenarkan pada masa ini.

sudo firewall-cmd --list-all

Output sebenar mempunyai beberapa baris lagi. Baris-baris inilah yang penting:

public (active)
  target: default
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  rich rules:

ssh dalam baris services: adalah sebab sesi anda masih berfungsi. Jika ia tiada, tambahkannya sebelum anda menyentuh perkara lain, kerana memulakan firewall tanpa peraturan SSH akan menamatkan sesi anda dan menghalang anda daripada masuk semula.

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

target: default bermaksud paket yang tidak sepadan dengan apa-apa akan ditolak dengan balasan ICMP (internet control message protocol) host-prohibited, jadi klien yang mencapai port tertutup akan melihat No route to host dengan serta-merta. Menetapkan sasaran kepada DROP menjadikan pelayan senyap, dan pengimbas kemudian akan menunggu sehingga tamat masa (timeout).

sudo firewall-cmd --permanent --zone=public --set-target=DROP
sudo firewall-cmd --reload

Ketahui kesannya sebelum anda menjalankan arahan tersebut: DROP juga menghalang pelayan daripada menjawab ping, jadi pemantauan anda sendiri juga akan menjadi senyap.

Mengapa peraturan saya hilang? Flag --permanent

firewalld menyimpan dua konfigurasi serentak. Konfigurasi runtime ialah apa yang dikuatkuasakan oleh kernel pada saat ini. Konfigurasi permanent ialah apa yang tersimpan dalam /etc/firewalld/zones/public.xml dan apa yang kembali selepas muat semula (reload) atau but semula (reboot).

Perintah tanpa --permanent hanya mengubah runtime. Ia berfungsi serta-merta dan hilang pada muat semula atau but seterusnya. Perintah dengan --permanent menulis fail tersebut dan tidak mengubah apa-apa yang sedang berjalan, jadi port kekal tertutup sehingga anda melakukan muat semula. Kedua-dua kelakuan ini bukanlah pepijat. Kedua-duanya mengejutkan pengguna kerana perintah tersebut memaparkan success dalam kedua-dua keadaan.

Tulis pasangan tersebut setiap kali.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

Anda boleh membaca kedua-dua konfigurasi, yang merupakan cara terpantas untuk mengetahui kesilapan mana antara dua perkara tersebut yang anda lakukan.

sudo firewall-cmd --list-services
sudo firewall-cmd --permanent --list-services

firewall-cmd --list-all
firewall-cmd --list-all --permanent

Yang pertama memaparkan set yang sedang berjalan. Yang kedua memaparkan set yang disimpan. Jika set yang sedang berjalan mengandungi servis yang tidak ada dalam set yang disimpan, peraturan itu akan hilang pada muat semula seterusnya. Jika set yang disimpan mengandungi servis yang tidak ada dalam set yang sedang berjalan, anda terlupa melakukan muat semula. sudo firewall-cmd --runtime-to-permanent menyalin semua perkara yang sedang berjalan ke dalam fail simpanan, yang berguna selepas sesi eksperimen.

--reload mengekalkan status penjejakan sambungan, jadi sesi SSH anda akan bertahan. --complete-reload memuatkan semula modul kernel juga dan kehilangan status tersebut, yang biasanya menamatkan setiap sambungan terbuka termasuk sambungan anda. Gunakan muat semula biasa.

Satu jaring keselamatan telah dibina di dalam. Peraturan runtime boleh tamat tempoh dengan sendirinya.

sudo firewall-cmd --add-service=http --timeout=5m

firewall-cmd --add-port=80/tcp --timeout=5m

Peraturan itu membuang dirinya sendiri selepas lima minit. Ia tidak boleh digabungkan dengan --permanent, dan itulah tujuannya: ia wujud untuk menguji perubahan yang anda tidak pasti. Jaring keselamatan yang lebih lama adalah lebih baik. Pastikan sesi SSH kedua dibuka semasa anda menyunting peraturan, dan jangan tutupnya sehingga log masuk baharu membuktikan peraturan baharu tersebut berfungsi.

Zon, dan sebab mengapa hanya zon lalai penting pada VPS

Zon ialah set kebenaran bernama yang disertakan dengan tahap kepercayaan. firewalld meletakkan setiap paket masuk ke dalam tepat satu zon. Ia memadankan alamat sumber paket dengan senarai sources: setiap zon terlebih dahulu. Jika tiada padanan, ia menggunakan zon yang diikat pada antara muka masuk. Jika antara muka tidak diikat pada mana-mana zon, paket tersebut akan pergi ke zon lalai.

sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones

Pada VPS dengan satu antara muka rangkaian, jawapan pertama hampir selalunya public, dan itulah satu-satunya zon yang akan anda gunakan. firewall-cmd tanpa argumen --zone= bertindak ke atas zon lalai, itulah sebabnya setiap arahan ringkas dalam panduan ini berfungsi tanpa perlu menamakan zon.

Berikut ialah kegagalan yang membuang masa sepanjang petang. Jika antara muka diikat pada zon lain, peraturan anda akan diletakkan dalam public manakala trafik dikendalikan di tempat lain, jadi apa sahaja yang anda tambah tidak memberi kesan dan tiada amaran diberikan kepada anda. --get-active-zones menunjukkan ikatan tersebut:

public
  interfaces: eth0

Jika antara muka muncul di bawah nama zon yang berbeza, sama ada tulis peraturan anda di sana dengan --zone=, atau alihkan antara muka tersebut.

sudo firewall-cmd --permanent --zone=public --change-interface=eth0
sudo firewall-cmd --reload

NetworkManager menguruskan antara muka pada Rocky dan AlmaLinux, dan ia menetapkan semula zon apabila sambungan diaktifkan. Tetapkannya di sana juga supaya but semula tidak membatalkan kerja anda. Ambil nama sambungan daripada arahan pertama, kerana ia jarang sekali sama dengan nama peranti.

sudo nmcli connection show
sudo nmcli connection modify "System eth0" connection.zone public

Padanan sumber mengatasi padanan antara muka, yang merupakan cara satu alamat mendapat polisi yang berbeza. Zon terbina dalam trusted menerima segala-galanya.

sudo firewall-cmd --permanent --zone=trusted --add-source=203.0.113.10/32
sudo firewall-cmd --reload

Berhati-hati dengan zon tersebut. Ia membuka setiap port pada pelayan kepada alamat itu, termasuk pangkalan data yang anda sangka bersifat peribadi. Gunakan rich rule apabila anda mahukan satu port, bukan satu hos.

Apakah itu servis firewalld?

Servis ialah himpunan port bernama yang dibekalkan sebagai fail XML. --add-service=https membuka 443/tcp kerana /usr/lib/firewalld/services/https.xml mentakrifkan maksud https.

sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=https

--info-service mencetak port yang tersembunyi di sebalik nama tersebut:

https
  ports: 443/tcp

Gunakan nama tersebut apabila ia tersedia. Ia lebih mudah dibaca dalam --list-all enam bulan kemudian, dan pakej seperti Cockpit memasang fail servisnya sendiri. Gunakan --add-port untuk sebarang perkara yang tiada takrifan.

Jurang yang perlu diperhatikan: servis ssh bermaksud 22/tcp dan tiada yang lain. Jika anda telah memindahkan SSH ke port lain semasa mengeraskan akses SSH pada pelayan, maka --add-service=ssh tidak membuka port yang anda gunakan sebenarnya.

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

Pada binaan semula RHEL, terdapat kunci kedua pada pintu tersebut. SELinux (security-enhanced Linux) melabelkan nombor port, dan sshd tidak dibenarkan untuk bind pada port di luar labelnya. Ia kemudian enggan bermula dan log memaparkan error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. Labelkan port tersebut terlebih dahulu.

sudo dnf install -y policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222

Bagaimanakah cara untuk melihat port yang terbuka sekarang?

sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
sudo nft list table inet firewalld | head -n 40

Dua arahan pertama melaporkan apa yang dipercayai oleh firewalld. Arahan ketiga membaca peraturan yang sebenarnya dipegang oleh kernel, di dalam jadual yang dimiliki oleh firewalld. Kesemuanya harus menunjukkan hasil yang sama.

Tiada satu pun daripada arahan tersebut merupakan bukti muktamad. Lakukan ujian daripada mesin lain:

nc -zv 203.0.113.20 443

Jangan jalankan ujian tersebut pada pelayan itu sendiri. firewalld menerima segala trafik yang tiba pada antara muka loopback, jadi curl http://localhost:8080 akan berjaya walau apa pun peraturan yang anda tetapkan. Ujian itu hanya memberitahu anda bahawa servis tersebut aktif. Ia tidak memberikan sebarang maklumat mengenai firewall anda.

Benarkan port web

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

Perintah terakhir kini sepatutnya menyenaraikan http https di samping apa yang ada sebelum ini. Jika laman web masih tidak bertindak balas, masalahnya mungkin bukan pada firewall anda. Satu peraturan hanya membenarkan paket masuk. Sesuatu proses masih perlu mendengar pada port tersebut.

sudo ss -tlnp

Socket yang ditunjukkan sebagai 0.0.0.0:443 atau *:443 menerima sambungan daripada mana-mana alamat. Socket yang ditunjukkan sebagai 127.0.0.1:443 hanya menjawab pada loopback, dan tiada peraturan firewall yang akan menjadikannya boleh dicapai dari luar. Port dan socket pendengar pada Linux membincangkan perbezaan tersebut dengan lebih terperinci.

Bagaimanakah cara untuk menutup port semula?

sudo firewall-cmd --permanent --remove-service=http
sudo firewall-cmd --reload

Peraturan --permanent juga terpakai di sini, dan ia memberi kesan yang lebih ketara dalam arah ini. Jika anda membuang servis daripada runtime sahaja, port tersebut akan kelihatan tertutup, namun muat semula atau but semula seterusnya akan membukanya semula daripada fail yang disimpan. Ini merupakan satu kelompangan yang tidak akan anda sedari, kerana semakan yang anda jalankan telah berjaya.

Membuang sesuatu yang tidak pernah wujud akan mencetak Warning: NOT_ENABLED: http dan masih keluar dengan kod 0. Menambah perkara yang sama sebanyak dua kali akan mencetak Warning: ALREADY_ENABLED: http. Kedua-duanya adalah selamat. Nama yang tersalah eja adalah berbeza: Error: INVALID_SERVICE bermaksud firewalld tidak mempunyai definisi dengan nama tersebut dan tiada apa-apa yang berubah.

Jika --list-all anda menunjukkan cockpit dan anda tidak menggunakan konsol web Cockpit pada port 9090, buang servis tersebut. Setiap port yang terbuka adalah servis yang perlu anda pastikan sentiasa ditampal (patched), dan bagi servis yang anda pilih untuk kekalkan, dnf-automatic boleh memasang kemas kini keselamatan mengikut jadual supaya tugas tersebut tidak bergantung kepada ingatan anda. Walau bagaimanapun, memasang tampalan tidak sama dengan menjalankannya, dan needs-restarting menunjukkan servis mana yang masih memegang pustaka lama sebaik sahaja kemas kini tersebut selesai.

Mengehadkan port kepada satu alamat sumber

Rich rules ialah bentuk panjang yang digunakan apabila nama servis biasa tidak dapat menyatakan maksud anda. Mengehadkan SSH kepada satu alamat pejabat memerlukan dua arahan, dan arahan kedua sering dilupakan oleh pengguna.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

Zon ialah set kebenaran, bukan senarai bernombor yang berhenti pada padanan pertama. Rich rule menambah kebenaran (accept) untuk satu alamat. Ia tidak menolak sesiapa pun. Selagi ssh masih berada dalam baris services:, seluruh internet masih boleh mencapai port 22 dan rich rule tersebut tidak mengubah apa-apa yang boleh anda ukur. Buang entri yang luas itu, atau entri yang sempit itu hanyalah hiasan.

Untuk port yang tiada nama servis, namakan port tersebut sebaliknya.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="5432" protocol="tcp" accept'

Untuk menggugurkan (drop) rangkaian yang bising dan menyimpan rekod, letakkan elemen log sebelum tindakan, iaitu urutan yang dijangkakan oleh bahasa rich rule.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" log prefix="fw-drop " level="info" limit value="3/m" drop'
sudo firewall-cmd --reload
sudo journalctl -k -g fw-drop

Nilai limit menghentikan lambakan paket daripada memenuhi jurnal. Sebelum anda mengunci SSH kepada satu alamat tunggal, pastikan alamat tersebut stabil. Sambungan rumah dengan alamat IP yang berubah-ubah akan mengunci akses anda pada hari ia berubah, jadi pastikan akses konsol pembekal anda telah diuji dan berfungsi terlebih dahulu.

Perintah ufw dan padanan firewall-cmd

Tugas yang sama, alat yang berbeza. Setiap baris --permanent memerlukan sudo firewall-cmd --reload selepasnya, yang merupakan satu perkara yang tidak dapat ditunjukkan oleh senarai seperti ini kepada anda.

  • sudo ufw enable menjadi sudo systemctl enable --now firewalld
  • sudo ufw disable menjadi sudo systemctl disable --now firewalld
  • sudo ufw status verbose menjadi sudo firewall-cmd --list-all
  • sudo ufw allow OpenSSH menjadi sudo firewall-cmd --permanent --add-service=ssh
  • sudo ufw allow 443/tcp menjadi sudo firewall-cmd --permanent --add-port=443/tcp
  • sudo ufw delete allow 443/tcp menjadi sudo firewall-cmd --permanent --remove-port=443/tcp
  • sudo ufw allow from 203.0.113.10 to any port 22 menjadi rich rule yang ditunjukkan di atas
  • sudo ufw reload menjadi sudo firewall-cmd --reload
  • sudo ufw default deny incoming adalah cara zon public berfungsi, dan --set-target=DROP ialah versi senyap baginya
  • sudo ufw logging on menjadi sudo firewall-cmd --set-log-denied=all

Satu perbezaan perlu dinyatakan dengan jelas. ufw mengekalkan senarai bernombor dan anda boleh memasukkan peraturan pada kedudukan 1. firewalld tidak mempunyai nombor peraturan, jadi "letakkan peraturan ini di tempat pertama" tidak membawa maksud apa-apa di sini. Apabila dua entri firewalld kelihatan bercanggah antara satu sama lain, accept yang luas akan menang, kerana tiada apa-apa dalam set tersebut yang menafikan (deny). Anda perlu membuang entri yang luas itu sendiri.

Mengapa kontena Docker saya boleh dicapai sedangkan firewall kelihatan tertutup?

Ini kerana port kontena yang diterbitkan tidak pernah sampai ke bahagian firewall yang dikawal oleh zon anda. docker run -d -p 8080:80 nginx memberitahu Docker untuk menulis peraturan NAT (network address translation) dan forwarding miliknya sendiri. Paket yang tiba pada port 8080 akan ditulis semula dan dihalakan terus ke kontena, jadi ia diforward dan bukannya dihantar kepada hos. Baris services: dan ports: dalam zon anda mengawal paket yang dihantar kepada hos. Peraturan Docker pula mengawal laluan forward, dan ia menerima trafik tersebut.

Hasilnya ialah pelayan di mana sudo firewall-cmd --list-all tidak menunjukkan port 8080, namun nc -zv 203.0.113.20 8080 dari mesin lain tetap boleh bersambung. Lihat apa yang telah dipasang oleh Docker:

sudo iptables -t nat -L DOCKER -n

Penyelesaiannya terletak pada flag publish. Bind port tersebut ke loopback dan letakkan reverse proxy di hadapannya.

docker run -d -p 127.0.0.1:8080:80 nginx

Kontena kini hanya menjawab curl http://127.0.0.1:8080 pada pelayan dan tiada apa-apa dari luar. Pengguna Ubuntu menghadapi masalah yang sama, seperti yang diterangkan dalam mengapa kontena Docker menerbitkan port terus melepasi ufw. Podman rootful, yang disertakan dalam repositori asas Rocky dan AlmaLinux, menerbitkan port dengan pendekatan NAT yang sama, jadi lakukan ujian dari mesin lain dan jangan hanya bergantung pada senarai zon. Pertindihan itu juga merupakan sebab pemasangan Docker Engine pada pengedaran ini memerlukan beberapa langkah yang tidak disebut dalam panduan Ubuntu, bermula dengan fakta bahawa Podman sudah pun menguasai arahan docker.

Memastikan ia bertahan selepas but semula, dan ralat yang akan anda lihat

sudo systemctl is-enabled firewalld
sudo systemctl status firewalld

enabled dan active (running) adalah apa yang anda perlukan. Firewall yang sedang berjalan tetapi tidak didayakan hanya melindungi anda sehingga but semula yang pertama. Semakan itu perlu berada dalam senarai yang anda laksanakan dalam sepuluh minit pertama pada VPS baharu, di samping kunci SSH dan kemas kini.

Perintah mentah nftables dan firewalld tidak boleh bercampur. firewalld memiliki jadual yang dipanggil inet firewalld. sudo nft flush ruleset memadamkannya, pelayan kemudiannya terbuka kepada segala-galanya, dan firewall-cmd --list-all masih mencetak konfigurasi yang anda inginkan, kerana firewalld melaporkan apa yang ia percayai dan bukannya apa yang dipegang oleh kernel. sudo firewall-cmd --reload memasang semula peraturan tersebut. Tulis peraturan dengan firewall-cmd supaya ia kembali selepas muat semula.

Dua pengurus firewall pada satu pelayan. Memasang ufw atau iptables-services di samping firewalld memberikan anda dua program yang menulis peraturan tanpa pengetahuan antara satu sama lain, dan pemenangnya bergantung pada servis mana yang bermula terakhir. Pilih satu. Pada Rocky dan AlmaLinux, firewalld adalah yang mempunyai sokongan pengedaran.

Firewall pembekal di hadapan kotak. Banyak panel VPS mempunyai firewall rangkaian yang berasingan. Jika --list-all menunjukkan port terbuka dan sambungan dari luar masih gagal, semak panel sebelum anda menukar apa-apa pada pelayan. Ia juga berfungsi sebaliknya: peraturan panel yang terbuka tidak melakukan apa-apa sementara firewalld menolak paket tersebut.

Menjalankan firewall-cmd tanpa sudo. Setiap perubahan memerlukan root. Tanpanya, permintaan ditolak oleh semakan kebenaran dan tiada apa-apa yang diubah, yang sekilas pandang kelihatan seperti perintah itu diabaikan.

Enam perintah meliputi kebanyakan hari: --list-all untuk membaca status, --permanent --add-service atau --add-port untuk membuka sesuatu, --permanent --remove-service untuk menutupnya, --reload untuk menggunakan fail yang disimpan, dan --runtime-to-permanent selepas satu pusingan eksperimen. Zonnya ialah public, flagnya ialah --permanent, dan satu-satunya semakan yang jujur datang daripada mesin lain.

FAQ

Mengapakah peraturan firewalld saya hilang selepas but semula?

Peraturan tersebut hanya dimasukkan ke dalam konfigurasi runtime. sudo firewall-cmd --add-service=http berkuat kuasa serta-merta dan akan dibuang pada muat semula atau but seterusnya, kerana konfigurasi yang disimpan dalam /etc/firewalld/zones/public.xml tidak pernah diubah. Tambahkan --permanent dan kemudian jalankan sudo firewall-cmd --reload. Untuk mengekalkan peraturan yang telah anda tambah secara manual, jalankan sudo firewall-cmd --runtime-to-permanent, yang menyalin set semasa ke dalam fail simpanan.

Mengapakah tiada perubahan selepas saya menambah peraturan dengan --permanent?

Kerana --permanent menulis fail tersebut dan membiarkan firewall yang sedang berjalan tanpa perubahan. Port kekal tertutup sehingga sudo firewall-cmd --reload memuatkan konfigurasi yang disimpan ke dalam kernel. Bandingkan sudo firewall-cmd --list-services dengan sudo firewall-cmd --permanent --list-services: jika senarai simpanan mengandungi entri yang tiada dalam senarai semasa, muat semula adalah perkara yang anda terlepas.

Patutkah saya menggunakan --add-service atau --add-port?

Gunakan --add-service apabila nama wujud untuk apa yang anda jalankan. Ia menyatakan tujuan, dan sudo firewall-cmd --info-service=https menunjukkan dengan tepat port mana yang diliputi oleh nama tersebut. Gunakan --add-port apabila tiada apa-apa yang mentakrifkan servis anda, atau apabila ia mendengar pada port bukan standard. Servis ssh bermaksud 22/tcp sahaja, jadi SSH yang dialihkan ke 2222 memerlukan --add-port=2222/tcp berserta label SELinux untuk port tersebut.

Mengapakah kontena Docker saya boleh dicapai sedangkan firewall-cmd menunjukkan port tertutup?

Port yang diterbitkan ditulis semula oleh peraturan NAT milik Docker sendiri dan dihalakan ke kontena, jadi paket tidak pernah dihantar ke hos, dan senarai servis serta port zon hanya meliputi paket yang dihantar ke hos. Kontena menjawab daripada internet manakala --list-all tidak menunjukkan apa-apa. Terbitkan ke loopback sebaliknya, dengan docker run -d -p 127.0.0.1:8080:80 nginx, dan letakkan reverse proxy di hadapannya.

Bolehkah saya memasang ufw pada Rocky Linux sebagai ganti firewalld?

Dua pengurus firewall pada satu pelayan menulis peraturan tanpa pengetahuan antara satu sama lain, dan set mana yang bertahan bergantung pada servis mana yang bermula terakhir. firewalld ialah alat yang disokong pada Rocky Linux dan AlmaLinux, ia sudah dipasang, dan ia memacu backend nftables yang sama seperti yang akan dipacu oleh ufw. Pelajari zon lalai dan flag --permanent sekali sahaja dan anda sudah menguasai keseluruhan alat tersebut.