firewalld, AlmaLinux 9 ve Rocky Linux 9'un varsayılan güvenlik duvarı yöneticisidir. VPS Linux Infrawire sunucunuzda yalnızca gereken servisleri açmanızı, SSH'yi kendi IP adresinizle sınırlamanızı ve portları yönlendirmenizi sağlar; ham nftables kurallarına dokunmanız gerekmez.
Asıl risk kendi SSH oturumunuzu kesmektir. Bu rehber buna göre kurgulandı: her riskli değişiklik önce runtime yapılandırmasında denenir, sonra kalıcı hâle getirilir.
📋 Ön koşullar
- AlmaLinux 9 veya Rocky Linux 9 çalıştıran bir VPS
- Root SSH erişimi (IP ve root parolası müşteri alanınızda bulunur)
- Kuralları düzenlerken açık tutacağınız ikinci bir SSH oturumu
1. firewalld'yi kurun ve başlatın
Bashdnf install -y firewalld systemctl enable --now firewalld firewall-cmd --state
Son komut running yazdırmalıdır. Varsayılan bölge public'tir: SSH, Cockpit ve DHCPv6 istemcisine zaten izin verir, diğer gelen bağlantıları reddeder.
2. Bölgeleri, servisleri ve portları anlayın
Bölge, bir arayüze uygulanan kural kümesidir. Servis ise adlandırılmış bir port grubudur (ssh 22/tcp, http 80/tcp, https 443/tcp).
Bashfirewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --get-services | tr ' ' '\n' | head -20
İki yapılandırma vardır. Runtime hemen uygulanır ve yeniden yüklemede ya da yeniden başlatmada kaybolur. Kalıcı (--permanent) diske yazılır, ancak yalnızca firewall-cmd --reload sonrası etkinleşir.
3. Servis ve port açın
Bash# Servisler firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # Özel bir port firewall-cmd --permanent --add-port=8080/tcp # Bir port aralığı firewall-cmd --permanent --add-port=30000-30100/udp # Kalıcı yapılandırmayı uygula firewall-cmd --reload
Bir şeyi kapatmak için ilgili --remove-service ya da --remove-port seçeneğini kullanın. Web konsolunu kullanmıyorsanız cockpit servisini kaldırın: firewall-cmd --permanent --remove-service=cockpit.
4. Rich rule ile SSH'ye yalnızca kendi IP'nizden izin verin
Rich rule'lar kaynak adresi gibi koşulları ifade eder. Kısıtlı kuralın çalıştığını kanıtlamadan genel SSH kuralını asla kaldırmayın.
Bash# 1. Kuralı yalnızca runtime'a ekleyin (KENDİ genel IP'nizle değiştirin) firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR_IP/32" service name="ssh" accept' # 2. YENİ bir terminal açın ve SSH'nin YOUR_IP'den hâlâ çalıştığını doğrulayın # 3. Kalıcı yapın, ardından herkese açık SSH servisini kaldırın firewall-cmd --runtime-to-permanent firewall-cmd --permanent --remove-service=ssh firewall-cmd --reload
IP adresiniz değişirse erişimi kaybedersiniz: kurtarma yolu olarak müşteri alanınızdaki VPS konsolunu hazır tutun. IPv6 adresi için family="ipv6" yazın ve IPv6 adresini girin.
5. Bir portu yönlendirin
Gelen 80 numaralı port trafiğini aynı sunucuda 8080'de dinleyen bir uygulamaya göndermek için:
Bashfirewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload
Başka bir makineye yönlendirmek için forward-port seçeneğine toaddr=TARGET_IP ekleyin ve firewall-cmd --permanent --add-masquerade ile masquerading'i etkinleştirin. Çekirdeğin de yönlendirmeye izin vermesi gerekir; masquerading için bunu firewalld halleder.
6. Yapılandırmayı doğrulayın
Bashfirewall-cmd --list-all firewall-cmd --list-rich-rules firewall-cmd --permanent --list-all ss -tlnp
Runtime ve kalıcı listeleri karşılaştırın: yeniden yüklemeden sonra eşleşmeleri gerekir. Başka bir makineden nc -zv VPS_IP 80 ile bir portu test edin. Dinleyen bir servise (ss -tlnp) yalnızca güvenlik duvarı portuna izin veriyorsa erişilebilir.
🛠️ Sorun giderme
FirewallD is not running: systemctl enable --now firewalld ile başlatın, hatalar için journalctl -u firewalld çıktısına bakın.
Yeni kural etki etmiyor: --permanent kullanıp yeniden yüklemediniz. firewall-cmd --reload çalıştırın.
INVALID_SERVICE veya INVALID_ZONE: adda yazım hatası var. Geçerli adları firewall-cmd --get-services ve --get-zones ile listeleyin.
Port açık olduğu hâlde özel portta SSH reddediliyor: SELinux'un portu tanıması gerekir. semanage port -a -t ssh_port_t -p tcp 2222 çalıştırın (önce policycoreutils-python-utils kurun), portu firewalld'de açın ve sshd'yi yeniden başlatın.
Erişimi kaybettiniz: müşteri alanınızdaki VPS konsolunu kullanın, ardından firewall-cmd --permanent --add-service=ssh ve firewall-cmd --reload çalıştırın. Oturumunuz dâhil tüm trafiği kesen firewall-cmd --panic-on komutundan kaçının.
🔒 VPS'iniz artık yalnızca seçtiklerinizi dışarı açıyor ve SSH erişiminiz elinizin altında!