Rocky ve AlmaLinux Firewalld Yapılandırma Rehberi
Rocky veya AlmaLinux sunucunuzda SSH ve web portu açma, port kapatma ve kalıcı kural ekleme işlemlerini öğrenin. --permanent bayrağını kullanmayı ve bölgeleri yönetmeyi inceleyin.
firewalld nedir ve Rocky ile AlmaLinux neden bu araçla gelir
firewalld, Rocky Linux, AlmaLinux ve diğer Red Hat Enterprise Linux (RHEL) türevlerinde varsayılan olarak yüklü gelen güvenlik duvarı yöneticisidir. Her iki dağıtım da bu varsayılanı tercih etmek yerine devralmıştır; bu durum, CentOS yön değiştirdikten sonra Rocky ve AlmaLinux'un Red Hat çalışmalarını nasıl yeniden derlediği bilindiğinde daha anlamlı hale gelir. firewalld paketleri kendi başına denetlemez. Kayıtlı bir yapılandırmayı tutar ve bu yapılandırmayı nftables kurallarına dönüştürür. firewall-cmd komutu, sunucu çalışmaya devam ederken yapılandırmayı düzenlemenizi sağlar. Bu kılavuzdaki hiçbir şey iki dağıtım arasında farklılık göstermez, çünkü Rocky'yi AlmaLinux'tan ayıran temel unsurlar güvenlik duvarı değil, uyumluluk taahhüdü ve desteklenen işlemci yelpazesidir.
Eğer Ubuntu VPS üzerinde ufw'nin nasıl çalıştığını biliyorsanız, işin mantığına hakimsiniz demektir. firewalld, ufw'de bulunmayan iki kavram ekler. Birincisi bölgelerdir (zones): paketlerin içine sınıflandırıldığı isimlendirilmiş bir ilke kümesi. İkincisi ise canlı kurallar ile kayıtlı kurallar arasındaki ayrımdır; bu ayrım --permanent bayrağı ile yönetilir ve araçtaki en büyük kafa karışıklığı kaynağıdır.
Aşağıdaki her şey, kendi sunucunuzda çalıştıracağınız bir komuttur. Her değişikliği ikinci bir makineden test edin, çünkü sunucu üzerinde doğru görünen bir kural internet üzerinden bakıldığında hatalı olabilir.
Başka bir işlem yapmadan önce SSH erişimini açın
Çoğu Rocky ve AlmaLinux kurulumunda firewalld yüklü ve çalışır durumdadır; varsayılan yapılandırma SSH erişimine izin verir. Bazı minimal bulut imajları bu servisi içermez. Varsayımda bulunmak yerine durumu kontrol edin.
sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --statefirewall-cmd --state komutu running çıktısını verir. Servis durdurulmuşsa, diğer tüm firewall-cmd çağrıları FirewallD is not running yanıtını döndürür ve sıfır olmayan bir çıkış koduyla sonlanır. Bir komut hiçbir işlem yapmıyor gibi göründüğünde kontrol edilmesi gereken ilk nokta budur.
Şimdi mevcut izinleri okuyun.
sudo firewall-cmd --list-allGerçek çıktı birkaç satır daha içerir. Önemli olanlar şunlardır:
public (active)
target: default
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
rich rules:services: satırındaki ssh ifadesi, oturumunuzun neden hala çalıştığının sebebidir. Eğer bu ifade eksikse, başka hiçbir ayara dokunmadan önce ekleyin; çünkü SSH kuralı tanımlanmamış bir güvenlik duvarını başlatmak oturumunuzu sonlandırır ve sunucuya tekrar erişmenizi engeller.
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reloadtarget: default, hiçbir kural ile eşleşmeyen paketlerin bir ICMP (internet control message protocol) host-prohibited yanıtı ile reddedildiği anlamına gelir; bu sayede kapalı bir porta erişmeye çalışan istemci anında No route to host hatasını görür. Hedefi DROP olarak ayarlamak sunucuyu sessiz hale getirir ve tarayıcıların zaman aşımına (timeout) düşmesine neden olur.
sudo firewall-cmd --permanent --zone=public --set-target=DROP
sudo firewall-cmd --reloadBu komutu çalıştırmadan önce maliyetini bilin: DROP ayarı, sunucunun ping taleplerine yanıt vermesini de engeller; bu durumda kendi izleme araçlarınız da sessiz kalacaktır.
Kuralım neden kayboldu? --permanent bayrağı
firewalld aynı anda iki yapılandırmayı tutar. Runtime yapılandırması, çekirdeğin o an uyguladığı yapılandırmadır. Permanent yapılandırma ise /etc/firewalld/zones/public.xml içinde yer alan ve yeniden yükleme veya yeniden başlatma sonrasında geçerli olan yapılandırmadır.
--permanent bayrağı içermeyen bir komut yalnızca runtime yapılandırmasını değiştirir. Değişiklik anında devreye girer ancak bir sonraki yeniden yükleme veya yeniden başlatma işleminde kaybolur. --permanent bayrağı içeren bir komut ise dosyayı yazar ancak çalışan hiçbir şeyi değiştirmez; bu nedenle siz yeniden yükleme yapana kadar port kapalı kalır. Her iki davranış da bir hata değildir. Komut her iki durumda da success çıktısı verdiği için kullanıcılar genellikle şaşırır.
Her seferinde her iki komutu da birlikte kullanın.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reloadHer iki yapılandırmayı da okuyabilirsiniz; bu, yaptığınız iki hatadan hangisinin gerçekleştiğini bulmanın en hızlı yoludur.
sudo firewall-cmd --list-services
sudo firewall-cmd --permanent --list-servicesİlk komut canlı yapılandırmayı, ikincisi ise kayıtlı yapılandırmayı listeler. Eğer canlı yapılandırmada olup kayıtlı yapılandırmada olmayan bir servis varsa, o kural bir sonraki yeniden yüklemede silinir. Eğer kayıtlı yapılandırmada olup canlı yapılandırmada olmayan bir kural varsa, yeniden yükleme yapmayı unutmuşsunuz demektir. sudo firewall-cmd --runtime-to-permanent, canlı yapılandırmadaki her şeyi kayıtlı dosyaya kopyalar; bu, deneme oturumlarından sonra oldukça kullanışlıdır.
--reload bağlantı izleme durumunu korur, bu sayede SSH oturumunuz kesilmez. --complete-reload ise çekirdek modüllerini de yeniden yükler ve bu durumu kaybeder; bu durum genellikle sizinki dahil tüm açık bağlantıları sonlandırır. Normal yeniden yükleme komutunu kullanın.
Sistemde yerleşik bir güvenlik ağı bulunur. Bir runtime kuralı kendi kendine sona erebilir.
sudo firewall-cmd --add-service=http --timeout=5mBu kural beş dakika sonra kendini kaldırır. --permanent ile birleştirilemez; zaten amacı da budur: emin olmadığınız bir değişikliği test etmenizi sağlar. Daha eski olan güvenlik yöntemi daha iyidir. Kuralları düzenlerken ikinci bir SSH oturumunu açık tutun ve yeni kuralların çalıştığını yeni bir oturum açarak doğrulamadan mevcut oturumu kapatmayın.
Zone'lar ve bir VPS üzerinde neden sadece varsayılan zone'un önemli olduğu
Zone, kendisine bir güven düzeyi atanmış, isimlendirilmiş bir izinler kümesidir. firewalld, gelen her paketi tam olarak bir zone içerisine yerleştirir. İlk olarak paketin kaynak adresini her zone'un sources: listesiyle karşılaştırır. Eğer bir eşleşme olmazsa, gelen arayüzün (interface) bağlı olduğu zone'u kullanır. Eğer arayüz hiçbir zone'a bağlı değilse, paket varsayılan zone'a gider.
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zonesTek bir ağ arayüzüne sahip bir VPS üzerinde ilk yanıt neredeyse her zaman public'dir ve kullanacağınız tek zone da budur. --zone= argümanı olmayan firewall-cmd, varsayılan zone üzerinde işlem yapar; bu rehberdeki her kısa komutun bir zone ismi belirtmeden çalışmasının nedeni budur.
Bir öğleden sonranızı boşa harcayacak hata şudur: Eğer arayüz başka bir zone'a bağlıysa, kurallarınız public içerisine yazılırken trafik başka bir yerde işlenir; bu nedenle eklediğiniz hiçbir şeyin etkisi olmaz ve sistem sizi uyarmaz. --get-active-zones bağlamayı gösterir:
public
interfaces: eth0Eğer arayüz farklı bir zone ismi altında görünüyorsa, ya kurallarınızı --zone= ile oraya yazın ya da arayüzü taşıyın.
sudo firewall-cmd --permanent --zone=public --change-interface=eth0
sudo firewall-cmd --reloadNetworkManager, Rocky ve AlmaLinux üzerinde arayüzleri yönetir ve bağlantı kurulduğunda zone ayarını yeniden uygular. Yeniden başlatma sonrasında yaptığınız işlemlerin geri alınmaması için ayarı burada da yapın. İlk komuttan bağlantı ismini alın, çünkü bu isim nadiren cihaz ismiyle aynıdır.
sudo nmcli connection show
sudo nmcli connection modify "System eth0" connection.zone publicKaynak eşleşmesi, arayüz eşleşmesine göre önceliklidir; bir adresin farklı bir politika alması bu şekilde sağlanır. Yerleşik trusted zone'u her şeyi kabul eder.
sudo firewall-cmd --permanent --zone=trusted --add-source=203.0.113.10/32
sudo firewall-cmd --reloadBuna dikkat edin. Bu zone, özel olduğunu düşündüğünüz veritabanı dahil olmak üzere sunucudaki her portu o adrese açar. Tek bir host'a değil, tek bir port'a izin vermek istediğinizde rich rule kullanın.
firewalld servisi nedir?
Bir servis, XML dosyası olarak sunulan ve isimlendirilmiş bir port paketidir. --add-service=https, 443/tcp portunu açar çünkü /usr/lib/firewalld/services/https.xml, https ifadesinin ne anlama geldiğini tanımlar.
sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=https--info-service, ismin arkasında gizlenen portları listeler:
https
ports: 443/tcpBir isim mevcut olduğunda onu kullanın. Bu, altı ay sonra --list-all üzerinde okunduğunda daha anlaşılır olur ve Cockpit gibi paketler kendi servis dosyalarını kurarlar. Tanımı olmayan her şey için --add-port kullanın.
Dikkat edilmesi gereken boşluk şudur: ssh servisi yalnızca 22/tcp anlamına gelir, başka bir şey değil. Eğer SSH'ı sunucuda SSH erişimini sıkılaştırma sırasında başka bir porta taşıdıysanız, --add-service=ssh aslında kullandığınız portu açmaz.
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reloadBir RHEL yeniden kurulumunda o kapıda ikinci bir kilit bulunur. SELinux (security-enhanced Linux), port numaralarını etiketler ve sshd, etiketlerinin dışındaki bir porta bağlanamaz. Bu durumda servis başlamayı reddeder ve günlük kayıtlarında error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. hatası görülür. Önce portu etiketleyin.
sudo dnf install -y policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222Şu anda nelerin açık olduğunu nasıl görebilirim?
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
sudo nft list table inet firewalld | head -n 40İlk iki komut firewalld'nin durumunu raporlar. Üçüncü komut ise çekirdeğin (kernel) halihazırda tuttuğu ve firewalld'ye ait olan tablodaki kuralları okur. Bu çıktıların birbiriyle tutarlı olması gerekir.
Bunların hiçbiri kesin kanıt değildir. Testi başka bir makine üzerinden gerçekleştirin:
nc -zv 203.0.113.20 443Testi sunucunun kendi üzerinde çalıştırmayın. firewalld, loopback arayüzüne gelen her trafiği kabul eder; bu nedenle kurallarınız ne olursa olsun curl http://localhost:8080 başarılı olur. Bu test size yalnızca servisin çalışır durumda olduğunu söyler. Güvenlik duvarı hakkında hiçbir bilgi vermez.
Web portuna izin verin
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-servicesSon komut, daha önce orada olanların yanı sıra http https değerini de listelemelidir. Site hala yanıt vermiyorsa, sorun güvenlik duvarı kaynaklı olmayabilir. Bir kural pakete izin verir. Bir sürecin ise paketi dinliyor olması gerekir.
sudo ss -tlnp0.0.0.0:443 veya *:443 olarak gösterilen bir soket, herhangi bir adresten gelen bağlantıları kabul eder. 127.0.0.1:443 olarak gösterilen bir soket ise yalnızca loopback üzerinden yanıt verir ve hiçbir güvenlik duvarı kuralı onu dışarıdan erişilebilir kılmaz. Linux üzerinde portlar ve dinleme soketleri bu farkı daha ayrıntılı olarak ele almaktadır.
Bir portu nasıl tekrar kapatırım?
sudo firewall-cmd --permanent --remove-service=http
sudo firewall-cmd --reloadBurada da --permanent kuralı geçerlidir ve bu yönde etkisi daha serttir. Bir servisi yalnızca çalışma zamanından kaldırırsanız port kapalı görünür, ancak bir sonraki yeniden yükleme veya yeniden başlatma işleminde kaydedilen dosyadan tekrar açılır. Bu, yaptığınız kontrol başarılı olduğu için fark etmeyeceğiniz bir güvenlik açığıdır.
Hiç var olmayan bir şeyi kaldırmak Warning: NOT_ENABLED: http çıktısını verir ve yine de 0 koduyla çıkar. Aynı şeyi iki kez eklemek Warning: ALREADY_ENABLED: http çıktısını verir. Her ikisi de güvenlidir. Yanlış yazılmış bir isim farklıdır: Error: INVALID_SERVICE, firewalld'un bu isimde bir tanımı olmadığı ve hiçbir şeyin değiştirilmediği anlamına gelir.
Eğer --list-all çıktınız cockpit gösteriyorsa ve 9090 numaralı port üzerindeki Cockpit web konsolunu kullanmıyorsanız, onu kaldırın. Açık olan her port, yamalı tutmanız gereken bir servistir; tutmaya karar verdikleriniz için ise dnf-automatic güvenlik güncellemelerini bir zamanlayıcı üzerinde kurabilir, böylece bu işi hatırlama sorumluluğu size kalmaz. Ancak bir yama kurmak, onu çalıştırmakla aynı şey değildir ve needs-restarting, güncellemeler yüklendikten sonra hangi servislerin eski kütüphaneleri kullanmaya devam ettiğini gösterir.
Bir portu tek bir kaynak adresiyle kısıtlama
Rich rules, basit bir servis adının ifade etmek istediğiniz kısıtlamayı karşılayamadığı durumlar için kullanılan uzun biçimli kurallardır. SSH erişimini tek bir ofis adresiyle kısıtlamak için iki komut gerekir; ikinci komut ise genellikle unutulan kısımdır.
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 --reloadZone, ilk eşleşmede duran numaralandırılmış bir liste değil, bir izinler kümesidir. Rich rule, tek bir adres için bir kabul (accept) kuralı ekler. Kimseyi reddetmez. ssh hala services: satırında olduğu sürece, tüm internet 22 numaralı porta erişmeye devam eder ve rich rule ölçülebilir hiçbir şeyi değiştirmez. Genel girişi kaldırın, aksi takdirde dar kapsamlı kural yalnızca dekorasyon olarak kalır.
Servis adı olmayan bir port için, servis adı yerine port numarasını belirtin.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="5432" protocol="tcp" accept'Gürültülü bir ağı düşürmek ve kayıt tutmak için, log öğesini eylemden önce yerleştirin; rich rule dili bu sıralamayı bekler.
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-droplimit değeri, paket seliyle journal dosyasının dolmasını engeller. SSH erişimini tek bir adrese kilitlemeden önce, o adresin sabit olduğundan emin olun. Değişken IP adresine sahip bir ev bağlantısı, IP değiştiği gün sizi sistemin dışında bırakır; bu nedenle öncelikle servis sağlayıcınızın konsol erişimini test ettiğinizden ve çalıştığından emin olun.
ufw komutları ve firewall-cmd karşılıkları
Aynı görevler, farklı araçlar. Her --permanent satırından sonra bir sudo firewall-cmd --reload gelmelidir; bu, böyle bir listenin size gösteremeyeceği tek şeydir.
sudo ufw enablekomutusudo systemctl enable --now firewalldhaline gelirsudo ufw disablekomutusudo systemctl disable --now firewalldhaline gelirsudo ufw status verbosekomutusudo firewall-cmd --list-allhaline gelirsudo ufw allow OpenSSHkomutusudo firewall-cmd --permanent --add-service=sshhaline gelirsudo ufw allow 443/tcpkomutusudo firewall-cmd --permanent --add-port=443/tcphaline gelirsudo ufw delete allow 443/tcpkomutusudo firewall-cmd --permanent --remove-port=443/tcphaline gelirsudo ufw allow from 203.0.113.10 to any port 22komutu yukarıda gösterilen zengin kural (rich rule) haline gelirsudo ufw reloadkomutusudo firewall-cmd --reloadhaline gelirsudo ufw default deny incomingzatenpublicbölgesinin çalışma şeklidir ve--set-target=DROPbunun sessiz sürümüdürsudo ufw logging onkomutusudo firewall-cmd --set-log-denied=allhaline gelir
Açıkça belirtilmesi gereken bir fark vardır. ufw numaralandırılmış bir liste tutar ve 1. sıraya bir kural ekleyebilirsiniz. firewalld üzerinde kural numaraları yoktur, bu nedenle "bu kuralı başa al" ifadesinin burada bir karşılığı bulunmaz. İki firewalld girdisi birbiriyle çelişiyor gibi göründüğünde, geniş kapsamlı izin (accept) kuralı geçerli olur; çünkü küme içerisinde herhangi bir reddetme (deny) kuralı yoktur. Geniş kapsamlı girdiyi kendiniz kaldırmanız gerekir.
Docker container'ım güvenlik duvarı kapalı görünmesine rağmen neden erişilebilir durumda?
Çünkü yayınlanan bir container portu, güvenlik duvarınızın zone ayarlarının denetlediği kısma hiçbir zaman ulaşmaz. docker run -d -p 8080:80 nginx, Docker'a kendi NAT (network address translation) ve yönlendirme kurallarını yazmasını söyler. 8080 portuna gelen bir paket yeniden yazılır ve container'a yönlendirilir; bu nedenle paket, ana makineye teslim edilmek yerine iletilmiş (forwarded) olur. Zone ayarlarınızdaki services: ve ports: satırları, ana makineye teslim edilen paketleri yönetir. Docker'ın kuralları ise iletim yolunu yönetir ve bu paketleri kabul eder.
Sonuç, sudo firewall-cmd --list-all komutunun 8080 portunu göstermediği ancak başka bir makineden yapılan nc -zv 203.0.113.20 8080 bağlantısının yine de başarılı olduğu bir sunucudur. Docker'ın neler yüklediğini inceleyin:
sudo iptables -t nat -L DOCKER -nÇözüm, publish bayrağında yatar. Portu loopback arayüzüne bağlayın ve önüne bir reverse proxy yerleştirin.
docker run -d -p 127.0.0.1:8080:80 nginxContainer artık sunucu üzerinde curl http://127.0.0.1:8080 adresine yanıt verir ve dışarıdan gelen hiçbir isteğe cevap vermez. Ubuntu kullanıcıları da Docker container'larının portları neden ufw'yi atlayarak yayınladığı konusunda açıklanan aynı engelle karşılaşırlar. Rocky ve AlmaLinux'un temel depolarında sunduğu rootful Podman de portları aynı NAT yaklaşımıyla yayınlar; bu nedenle zone listesine güvenmek yerine başka bir makineden test yapın. Bu çakışma, bu dağıtımlara Docker Engine kurmanın Ubuntu rehberlerinde hiç bahsedilmeyen birkaç ek adım gerektirmesinin ve Podman'in halihazırda docker komutuna sahip olmasıyla başlamasının nedenidir.
Yeniden başlatma sonrası süreklilik ve karşılaşacağınız hatalar
sudo systemctl is-enabled firewalld
sudo systemctl status firewalldenabled ve active (running) ihtiyaç duyacağınız komutlardır. Çalışan ancak etkinleştirilmemiş bir güvenlik duvarı, ilk yeniden başlatmaya kadar sizi korur. Bu kontrol, yeni bir VPS üzerindeki ilk on dakika içerisinde tamamlamanız gereken listede, SSH anahtarları ve güncellemelerin hemen yanında yer almalıdır.
Ham nftables komutları ve firewalld birlikte çalışmaz. firewalld, inet firewalld adında bir tabloyu yönetir. sudo nft flush ruleset bu tabloyu silerse sunucu tüm trafiğe açık hale gelir; ancak firewall-cmd --list-all yine de yapılandırmanızı listelemeye devam eder çünkü firewalld çekirdekteki durumu değil, kendi kayıtlarındaki bilgiyi raporlar. sudo firewall-cmd --reload kuralları yeniden yükler. Kuralları, yeniden yükleme sonrasında da kalıcı olmaları için firewall-cmd ile yazın.
Tek sunucuda iki güvenlik duvarı yöneticisi. ufw veya iptables-services yazılımlarını firewalld ile birlikte kurmak, birbirinden habersiz kural yazan iki programın çakışmasına neden olur; kazanan, en son başlatılan servis olur. Birini seçin. Rocky ve AlmaLinux üzerinde dağıtım desteğine sahip olan firewalld'dur.
Sunucunun önündeki sağlayıcı güvenlik duvarı. Birçok VPS paneli ayrı bir ağ güvenlik duvarına sahiptir. Eğer --list-all bir portun açık olduğunu gösteriyor ancak dışarıdan bağlantı hala başarısız oluyorsa, sunucuda değişiklik yapmadan önce panel ayarlarını kontrol edin. Bu durum tersi için de geçerlidir: panelde açık olan bir kural, firewalld paketi reddettiği sürece işlevsiz kalır.
sudo kullanmadan firewall-cmd çalıştırmak. Her değişiklik root yetkisi gerektirir. Yetki olmadan istek, yetkilendirme kontrolü tarafından reddedilir ve hiçbir şey değiştirilmez; bu durum ilk bakışta komutun göz ardı edildiği izlenimini yaratır.
Altı komut günlük işlerin çoğunu karşılar: durumu okumak için --list-all, bir portu açmak için --permanent --add-service veya --add-port, kapatmak için --permanent --remove-service, kaydedilen dosyayı uygulamak için --reload ve denemelerden sonra ayarları sıfırlamak için --runtime-to-permanent. Bölge public, bayrak --permanent'dır ve en güvenilir kontrol başka bir makine üzerinden yapılandır.
FAQ
firewalld kuralım yeniden başlatma sonrasında neden kayboldu?
Kural yalnızca çalışma zamanı (runtime) yapılandırmasına eklendi. sudo firewall-cmd --add-service=http komutu anında uygulanır ancak /etc/firewalld/zones/public.xml içindeki kayıtlı yapılandırmaya dokunulmadığı için bir sonraki yeniden yüklemede veya sistem açılışında silinir. --permanent parametresini ekleyin ve ardından sudo firewall-cmd --reload komutunu çalıştırın. Manuel olarak eklediğiniz kuralları kalıcı hale getirmek için, canlı yapılandırmayı kayıtlı dosyaya kopyalayan sudo firewall-cmd --runtime-to-permanent komutunu kullanın.
--permanent ile kural ekledikten sonra neden hiçbir şey değişmiyor?
Çünkü --permanent yalnızca dosyayı yazar ve çalışan güvenlik duvarına müdahale etmez. sudo firewall-cmd --reload komutu kayıtlı yapılandırmayı çekirdeğe yükleyene kadar port kapalı kalır. sudo firewall-cmd --list-services ile sudo firewall-cmd --permanent --list-services çıktılarını karşılaştırın: Eğer kayıtlı listede olup canlı listede olmayan bir girdi varsa, eksik olan işlem yeniden yükleme (reload) işlemidir.
--add-service mi yoksa --add-port mu kullanmalıyım?
Çalıştırdığınız servis için tanımlı bir isim varsa --add-service kullanın. Bu, niyetinizi belirtir ve sudo firewall-cmd --info-service=https komutu bu ismin hangi portları kapsadığını tam olarak gösterir. Servisiniz için bir tanım yoksa veya standart dışı bir portta dinleme yapıyorsa --add-port kullanın. ssh servisi yalnızca 22/tcp portunu ifade eder; bu nedenle SSH 2222 portuna taşındıysa --add-port=2222/tcp komutuna ek olarak ilgili port için bir SELinux etiketi gerekir.
firewall-cmd portun kapalı olduğunu gösterirken Docker container'ına neden erişilebiliyor?
Yayınlanan (published) bir port, Docker'ın kendi NAT kuralları tarafından yeniden yazılır ve container'a iletilir. Paket doğrudan ana makineye (host) teslim edilmediği için, bir bölgenin servis ve port listeleri bu paketleri kapsamaz. Container internetten gelen yanıtlara cevap verirken --list-all hiçbir şey göstermez. Bunun yerine docker run -d -p 127.0.0.1:8080:80 nginx ile yalnızca loopback arayüzüne yayın yapın ve önüne bir reverse proxy yerleştirin.
Rocky Linux üzerinde firewalld yerine ufw kurabilir miyim?
Aynı sunucuda iki farklı güvenlik duvarı yöneticisi birbirlerinden habersiz kural yazar; hangi kuralların geçerli kalacağı ise hangi servisin en son başladığına bağlıdır. firewalld, Rocky Linux ve AlmaLinux üzerinde desteklenen araçtır, halihazırda yüklüdür ve ufw'nin de kullanacağı aynı nftables altyapısını yönetir. Varsayılan bölgeyi (default zone) ve --permanent bayrağını bir kez öğrendiğinizde aracın tamamına hakim olursunuz.