Giriş: CentOS 7’de FirewallD’den Iptables’a Geçiş
CentOS 7, varsayılan güvenlik duvarı yönetimi aracı olarak FirewallD’yi kullanır. FirewallD, dinamik bir güvenlik duvarı yönetimi sağlayan, bölgeler (zones) ve hizmetler (services) kavramlarına dayalı kullanıcı dostu bir arayüze sahiptir. Ancak, bazı sistem yöneticileri ve geliştiriciler, daha düşük seviyeli kontrol, daha fazla esneklik veya geçmiş alışkanlıklar nedeniyle Iptables’ı tercih edebilirler. Iptables, Linux çekirdeğinin netfilter modülü için doğrudan bir arayüzdür ve paket filtreleme kurallarını doğrudan yönetmenizi sağlar.
Bu rehber, CentOS 7 sisteminizde FirewallD’den Iptables’a güvenli ve sorunsuz bir şekilde nasıl geçiş yapacağınızı adım adım açıklamaktadır. Bu geçiş, özellikle karmaşık ağ yapılandırmaları, özel NAT kuralları veya belirli performans gereksinimleri olan ortamlar için faydalı olabilir. Geçiş sürecinde sunucunuzun güvenliğini sağlamak ve erişilebilirliğini korumak kritik öneme sahiptir.
Neden FirewallD’den Iptables’a Geçiş Yapmalısınız?
FirewallD, modern Linux dağıtımlarında varsayılan güvenlik duvarı çözümü olarak yaygın bir şekilde kullanılsa da, Iptables’a geçiş yapmayı düşündürecek bazı nedenler bulunmaktadır:
- Daha Düşük Seviye Kontrol: Iptables, doğrudan netfilter çekirdek modülü ile etkileşime girer. Bu, paket filtreleme sürecinin her yönü üzerinde daha ayrıntılı ve düşük seviyeli kontrol sağlar. FirewallD ise Iptables’ın üzerinde bir soyutlama katmanı sunar ve bu da bazen istenen esnekliği kısıtlayabilir.
- Performans: Çok yüksek trafikli sunucularda veya milyonlarca kuralın işlenmesi gereken durumlarda, Iptables’ın doğrudan çekirdek etkileşimi nedeniyle FirewallD’ye kıyasla hafif bir performans avantajı sağlayabileceği iddiaları vardır. Ancak çoğu standart kullanım senaryosunda bu fark genellikle ihmal edilebilir düzeydedir.
- Uyumluluk ve Alışkanlık: Uzun yıllardır Iptables ile çalışmış ve bu konuda derinlemesine bilgiye sahip olan sistem yöneticileri için, Iptables’ın sözdizimi ve çalışma mantığı daha tanıdık ve verimli olabilir. Mevcut Iptables betiklerini veya yapılandırmalarını yeniden kullanma ihtiyacı da bir geçiş nedeni olabilir.
- Karmaşık Kurallar ve Özel Senaryolar: Bazı karmaşık ağ yapılandırmaları, özel NAT (Network Address Translation) kuralları, gelişmiş trafik şekillendirme veya belirli paket işaretleme senaryoları için Iptables, daha doğrudan ve esnek bir çözüm sunabilir. FirewallD bu tür senaryoları desteklese de, Iptables’ın sağladığı ince ayar imkanları bazen tercih nedeni olabilir.
Mevcut FirewallD Yapılandırmasını İnceleme ve Yedekleme
Geçiş işlemine başlamadan önce, mevcut FirewallD yapılandırmanızın tam bir resmini çıkarmak ve bu yapılandırmayı yedeklemek hayati öneme sahiptir. Bu sayede, Iptables kurallarınızı oluştururken hangi portların ve hizmetlerin açık olması gerektiğini bilecek ve herhangi bir sorun durumunda geri dönebileceğiniz bir referansınız olacaktır.
Mevcut FirewallD Durumunu Kontrol Etme
İlk adım olarak, FirewallD’nin mevcut durumunu ve aktif bölgelerini kontrol edin:
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all --zone=public
sudo firewall-cmd --list-all-zones
Bu komutlar, FirewallD’nin çalışıp çalışmadığını, hangi bölgelerin aktif olduğunu ve her bir bölgedeki kuralları (açık portlar, hizmetler, port yönlendirmeleri vb.) gösterecektir.
Açık Portları ve Hizmetleri Belirleme
FirewallD üzerinden izin verilen tüm portları ve hizmetleri listelemek, Iptables kurallarınızı oluştururken temel teşkil edecektir:
sudo firewall-cmd --list-ports --permanent
sudo firewall-cmd --list-services --permanent
Ayrıca, sisteminizde hangi uygulamaların hangi portları dinlediğini görmek için netstat veya ss komutlarını kullanabilirsiniz:
sudo netstat -tulnp | grep LISTEN
sudo ss -tulnp | grep LISTEN
FirewallD Yapılandırmasını Yedekleme
FirewallD yapılandırmasını bir metin dosyasına kaydetmek, gelecekte başvurmak veya herhangi bir aksilik durumunda geri yüklemek için iyi bir yöntemdir:
sudo firewall-cmd --permanent --list-all-zones > /root/firewalld_backup.txt
sudo cp -r /etc/firewalld/ /root/firewalld_etc_backup
Bu komutlar, aktif FirewallD kurallarını ve tüm yapılandırma dosyalarını /root dizini altına yedekleyecektir.
FirewallD’yi Devre Dışı Bırakma ve Kaldırma
Mevcut FirewallD yapılandırmanızı inceleyip yedekledikten sonra, FirewallD hizmetini durdurup devre dışı bırakabilir ve isteğe bağlı olarak paketini kaldırabilirsiniz. Bu adımlar sırasında sunucunuzun bir süre korumasız kalacağını unutmayın. Bu nedenle, bu işlemleri mümkünse bakım penceresinde veya doğrudan konsol erişiminiz varken yapmanız önerilir.
FirewallD Hizmetini Durdurma ve Devre Dışı Bırakma
İlk olarak, FirewallD hizmetini durdurun ve sistem başlangıcında otomatik olarak başlamasını engelleyin:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
Eğer FirewallD’nin kesinlikle bir daha başlamamasını istiyorsanız, hizmeti maskeleyebilirsiniz. Bu, başka bir servisin veya kullanıcının FirewallD’yi başlatmasını engeller:
sudo systemctl mask firewalld
FirewallD’nin artık çalışmadığını doğrulamak için:
sudo systemctl status firewalld
FirewallD Paketini Kaldırma (İsteğe Bağlı)
Eğer FirewallD’yi sisteminizden tamamen kaldırmak istiyorsanız, aşağıdaki komutu kullanabilirsiniz. Bu adım zorunlu değildir, ancak sistemde gereksiz paketleri tutmak istemiyorsanız yapabilirsiniz:
sudo yum remove firewalld -y
Paket kaldırıldıktan sonra, bağımlılıklar nedeniyle bazı başka paketlerin de kaldırılmış olabileceğini unutmayın. Bu adımı dikkatlice değerlendirin.
Iptables Kurulumu ve Temel Yapılandırması
FirewallD’yi devre dışı bıraktıktan sonra, Iptables hizmetlerini kurma ve temel güvenlik duvarı kurallarınızı yapılandırma zamanı gelmiştir. Bu bölümde, sunucunuzu temel seviyede koruyacak ve gerekli hizmetlere erişim sağlayacak kuralları adım adım oluşturacağız.
Iptables Paketlerini Kurma
CentOS 7’de Iptables hizmetlerini yönetmek için iptables-services paketini kurmanız gerekir:
sudo yum install iptables-services -y
Iptables Hizmetlerini Etkinleştirme
Iptables hizmetlerini kurduktan sonra, sistem başlangıcında otomatik olarak başlamalarını sağlayın ve hemen başlatın:
sudo systemctl enable iptables
sudo systemctl start iptables
sudo systemctl enable ip6tables
sudo systemctl start ip6tables
IPv6 trafiği için de kuralları yönetmek üzere ip6tables‘ı etkinleştirmeyi unutmayın.
Temel Iptables Kurallarını Oluşturma
Şimdi sunucunuz için temel Iptables kurallarını oluşturmaya başlayabiliriz. Bu kurallar, çoğu sunucu için iyi bir başlangıç noktasıdır. SSH erişimi, web sunucusu (HTTP/HTTPS) gibi temel hizmetleri içerir.
# Mevcut tüm kuralları ve kullanıcı tanımlı zincirleri temizle
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
Varsayılan politikaları ayarla:
Gelen ve Yönlendirilen trafiği engelle, Giden trafiğe izin ver
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Loopback arayüzünden gelen trafiğe izin ver (yerel iletişim için)
sudo iptables -A INPUT -i lo -j ACCEPT
Halihazırda kurulmuş ve ilgili bağlantılara izin ver (stateful firewall)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
SSH (Port 22) erişimine izin ver
Eğer SSH portunuz farklıysa, 22 yerine o portu yazın
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
HTTP (Port 80) erişimine izin ver
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
HTTPS (Port 443) erişimine izin ver
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
ICMP (Ping) trafiğine izin ver (isteğe bağlı, sorun giderme için faydalıdır)
sudo iptables -A INPUT -p icmp -j ACCEPT
Bu kuralları uyguladıktan sonra, sunucunuzun varsayılan olarak gelen tüm trafiği engelleyeceğini (SSH, HTTP, HTTPS ve mevcut bağlantılar hariç) unutmayın. Diğer servisleriniz (veritabanı, FTP vb.) için de benzer şekilde kurallar eklemeniz gerekecektir.
Iptables Kurallarını Kaydetme
Oluşturduğunuz kurallar, sunucu yeniden başlatıldığında kaybolacaktır. Bu nedenle, kuralları kalıcı hale getirmeniz gerekir:
sudo service iptables save
sudo service ip6tables save
Bu komutlar, kuralları /etc/sysconfig/iptables ve /etc/sysconfig/ip6tables dosyalarına kaydeder. Sistem başlangıcında iptables-services bu dosyalardan kuralları yükler.
Mevcut Iptables Kurallarını Görüntüleme
Kuralların doğru bir şekilde uygulandığını doğrulamak için aşağıdaki komutu kullanabilirsiniz:
sudo iptables -L -n -v
Bu komut, tüm Iptables zincirlerindeki kuralları, paket ve byte sayılarıyla birlikte listeler.
Gelişmiş Iptables Kuralları ve İpuçları
Temel yapılandırmanın ötesinde, Iptables size çok daha fazla esneklik ve kontrol sunar. İşte bazı gelişmiş kullanım senaryoları:
Belirli IP Adreslerinden Erişime İzin Verme
Belirli bir servise sadece belirli bir IP adresinden veya IP aralığından erişime izin vermek isteyebilirsiniz. Örneğin, SSH erişimini sadece kendi ofis IP adresinizle sınırlamak:
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
Diğer tüm SSH trafiğini engellemek için bu kuraldan sonra DROP kuralı gelmeli
Ancak varsayılan DROP politikası olduğu için, sadece izin verilenler kabul edilecektir.
Eğer varsayılan INPUT politikası ACCEPT ise:
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
Bir IP aralığı için:
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
Port Yönlendirme (NAT – Network Address Translation)
Sunucunuzu bir yönlendirici olarak kullanıyor veya iç ağdaki bir servise dışarıdan erişim sağlamak istiyorsanız NAT kurallarına ihtiyacınız olacaktır. Öncelikle IP yönlendirmeyi etkinleştirmeniz gerekir:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Daha sonra, NAT kurallarını oluşturabilirsiniz. Örneğin, dışarıdan gelen 80 portu isteğini içerideki 8080 portuna yönlendirmek:
# PREROUTING zinciri: Gelen paketler hedeflerine ulaşmadan önce işlenir
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
İç ağdaki makinelerin internete çıkışını sağlamak için (MASQUERADE):
# POSTROUTING zinciri: Giden paketler kaynak adresleri değiştirilmeden önce işlenir
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
eth0 yerine dış ağ arayüzünüzün adını yazmayı unutmayın.
Zincirler ve Hedefler
Iptables, paketleri belirli zincirler (chains) aracılığıyla işler: INPUT (sunucuya gelen), OUTPUT (sunucudan giden), FORWARD (sunucu üzerinden yönlendirilen). Ayrıca PREROUTING ve POSTROUTING gibi NAT ve mangle tablolarına özgü zincirler de bulunur. Her kural, bir hedef (target) ile biter: ACCEPT (paketi kabul et), DROP (paketi sessizce düşür), REJECT (paketi reddet ve hata mesajı gönder), LOG (paketi logla) veya kullanıcı tanımlı bir zincire atlama.
Kullanıcı tanımlı zincirler, karmaşık kural setlerini daha düzenli hale getirmek için kullanılabilir. Örneğin, “web-rules” adında bir zincir oluşturup tüm web ile ilgili kuralları buraya toplayabilirsiniz:
sudo iptables -N web-rules
sudo iptables -A web-rules -p tcp --dport 80 -j ACCEPT
sudo iptables -A web-rules -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -j web-rules
Sonuç ve Sıkça Sorulan Sorular (SSS)
CentOS 7’de FirewallD’den Iptables’a geçiş süreci, dikkatli planlama ve adım adım uygulama gerektiren bir işlemdir. Bu rehberde, mevcut FirewallD yapılandırmanızı yedeklemekten, FirewallD’yi devre dışı bırakıp kaldırmaya ve Iptables’ı kurup temel kurallarını yapılandırmaya kadar tüm önemli adımları ele aldık. Iptables’ın sağladığı düşük seviyeli kontrol ve esneklik, belirli senaryolarda FirewallD’ye göre avantajlar sunabilir.
Unutulmamalıdır ki, güvenlik duvarı kurallarını yanlış yapılandırmak sunucunuzun ağ erişimini tamamen kesebilir. Bu nedenle, her kural değişikliğinden sonra dikkatlice test etmek ve mümkünse sunucuya fiziksel veya sanal konsol erişiminiz varken bu işlemleri gerçekleştirmek büyük önem taşır. Güvenliğiniz için her zaman en az ayrıcalık prensibini uygulayın ve sadece gerekli olan portları ve hizmetleri açın.
Sıkça Sorulan Sorular (SSS)
- 1. FirewallD’den Iptables’a geçiş performansı artırır mı?
- Çoğu standart kullanım senaryosunda, FirewallD ile Iptables arasında gözle görülür bir performans farkı yoktur. Ancak çok yüksek trafikli veya karmaşık kural setleri olan özel durumlarda, Iptables’ın daha doğrudan çekirdek etkileşimi nedeniyle teorik olarak hafif bir performans avantajı olabilir.
- 2. Iptables kurallarımı yanlış yapılandırırsam ne olur?
- Yanlış yapılandırılmış Iptables kuralları, sunucunuzun ağ erişimini tamamen kesebilir. Özellikle SSH portunu yanlışlıkla engellemek, uzaktan erişiminizi kaybetmenize neden olabilir. Bu durumda, sunucuya fiziksel konsol veya sanallaştırma platformu üzerinden erişerek kuralları düzeltmeniz gerekir. Bu riski minimize etmek için, kuralları kaydetmeden önce test edin ve her zaman bir kurtarma planınız olsun.
- 3. Geçiş sırasında sunucum erişilemez hale gelirse ne yapmalıyım?
- Eğer Iptables kurallarını uyguladıktan sonra sunucunuz erişilemez hale gelirse, hemen fiziksel veya sanal konsol erişimi üzerinden sunucuya bağlanın. Mevcut Iptables kurallarını
sudo iptables -Fkomutu ile temizleyebilir, ardından doğru kuralları tekrar uygulayabilirsiniz. En iyi pratik, başlamadan önce bir sanal makine anlık görüntüsü (snapshot) almak veya konsol erişimine sahip olmaktır. - 4. Iptables kurallarımı nasıl yedekleyebilirim?
- Iptables kurallarınızı
sudo iptables-save > /root/iptables_backup.txtkomutu ile bir dosyaya yedekleyebilirsiniz. Bu dosyayı daha sonrasudo iptables-restore < /root/iptables_backup.txtkomutu ile geri yükleyebilirsiniz. - 5. CentOS 8'de de bu adımlar geçerli mi?
- CentOS 8 (veya RHEL 8), varsayılan olarak FirewallD'yi kullanmaya devam eder. Iptables'ı kullanmak isterseniz, bu rehberdeki temel adımlar (FirewallD'yi devre dışı bırakma,
iptables-serviceskurma) benzer şekilde uygulanabilir. Ancak, sistemd servis isimleri veya bazı paket bağımlılıkları küçük farklılıklar gösterebilir. Her zaman kullandığınız CentOS sürümüne özgü dokümantasyonu kontrol etmeniz önerilir.
