Merhaba arkadaşlar, bugün sizlere Linux sunucunuzu, arkasındaki cihazların internete çıkmasını sağlayan basit ama etkili bir router'a nasıl dönüştüreceğinizi anlatacağım. Özellikle test ortamlarında, sanal makinelerde veya küçük ofis ağlarında ek bir router cihazı almak yerine mevcut sunucunuzu bu iş için kullanabilirsiniz. Bu sayede hem maliyetten kurtulur hem de iptables kurallarıyla ağ trafiğinizi ince bir şekilde yönetme şansına sahip olursunuz.
Gereksinimler ve Ağ Yapısı
Bu rehberi uygulayabilmeniz için sunucunuzda en az iki ağ arayüzünüz (NIC) olmalı. Genellikle bunlar:
- eth0 veya ens192: WAN tarafı (İnternete bağlı olan, genel IP'li arayüz)
- eth1 veya ens224: LAN tarafı (İç ağdaki cihazların bağlanacağı, özel IP'li arayüz, örn: 192.168.10.1)
Ayrıca, iç ağdaki istemci cihazların (bilgisayar, telefon vb.) gateway (ağ geçidi) adresi olarak bu sunucunun LAN IP'sini (örn: 192.168.10.1) girmiş olmaları gerekiyor.
Adım 1: IP Yönlendirmesini Aktif Etme
Öncelikle, sunucumuzun paketleri bir ağ arayüzünden diğerine iletmesine (forward) izin vermemiz lazım. Bu kernel seviyesinde bir ayar.
Geçici olarak etkinleştirmek için:
Kalıcı olarak etkinleştirmek için /etc/sysctl.conf dosyasını düzenleyelim:
Aşağıdaki satırı bulun veya dosyanın sonuna ekleyin:
Değişikliği kaydedip çıktıktan sonra, sysctl'yi yeniden yükleyin:
Adım 2: iptables Kurallarını Yazma (NAT & Masquerade)
Asıl işi yapacak kısım burası. LAN'dan gelen paketlerin, WAN arayüzünden çıkarken kaynak adreslerinin sunucunun WAN IP'si ile değiştirilmesi (masquerade) gerekiyor. Bu, iç ağdaki cihazların özel IP'lerini gizler.
Temel masquerade kuralını ekleyelim:
Bu komutta -o eth0 ifadesi, paketlerin çıkış yaptığı WAN arayüzünü belirtir. Kendi arayüz adınızla değiştirmeyi unutmayın (örneğin ens192).
Güvenlik İçin Temel Firewall Kuralları
Router'ımız aynı zamanda bir güvenlik duvarı görevi de görmeli. LAN tarafından gelen ve WAN'a çıkacak trafiğe izin verirken, istenmeyen girişleri engelleyelim. Benim genelde uyguladığım basit bir politika şöyle:
Öncelikle mevcut kuralları temizleyip varsayılan politikaları DROP (reddet) yapalım. Dikkat! Bu komutları fiziksel konsoldan veya bir SSH bağlantısı üzerinden değil, doğrudan sunucuda çalıştırıyorsanız bağlantınız kesilebilir. Çok dikkatli olun.
Şimdi, güvenli bir şekilde SSH ve loopback trafiğine izin verelim:
En kritik kısım, LAN'dan WAN'a yönlendirme (forward) trafiğine izin vermek:
İlk kural, LAN'dan (eth1) gelen ve WAN'a (eth0) gidecek tüm trafiğe izin verir.
İkinci kural ise, WAN'dan gelen ve daha önce LAN'dan çıkmış bir bağlantıya ait olan (ESTABLISHED, RELATED) cevap paketlerinin iç ağa geçişine izin verir. Bu olmazsa, iç ağdaki cihazlar internetten cevap alamaz.
Adım 3: Kuralları Kalıcı Hale Getirme
iptables kuralları geçicidir, sunucu yeniden başlatılınca uçar. Onları kaydetmemiz gerekir.
Debian/Ubuntu sistemlerde:
Kurulum sırasında mevcut kuralları kaydetmek isteyip istemediğiniz sorulur, evet deyin. Sonradan kaydetmek için:
RHEL/CentOS/Fedora sistemlerde:
veya
Son Kontroller ve Test
Her şeyin yolunda gidip gitmediğini kontrol edelim:
Artık iç ağınızdaki bir cihazdan internete ping atmayı veya bir web sitesine bağlanmayı deneyebilirsiniz. Eğer çalışmıyorsa, istemci cihazdaki gateway ve DNS ayarlarını, sunucudaki arayüz isimlerini ve firewall kurallarınızı tekrar kontrol edin.
Umarım bu rehber faydalı olmuştur. Ben test lab'larımda ve bazı müşterilerin küçük şubelerinde bu yapıyı sıklıkla kullanıyorum. Esnekliği ve kontrol imkanı gerçekten hoş. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Eklemek istediğiniz püf noktalar veya takıldığınız bir yer varsa aşağıya yazmaktan çekinmeyin. Kolay gelsin!
Bu rehberi uygulayabilmeniz için sunucunuzda en az iki ağ arayüzünüz (NIC) olmalı. Genellikle bunlar:
- eth0 veya ens192: WAN tarafı (İnternete bağlı olan, genel IP'li arayüz)
- eth1 veya ens224: LAN tarafı (İç ağdaki cihazların bağlanacağı, özel IP'li arayüz, örn: 192.168.10.1)
Ayrıca, iç ağdaki istemci cihazların (bilgisayar, telefon vb.) gateway (ağ geçidi) adresi olarak bu sunucunun LAN IP'sini (örn: 192.168.10.1) girmiş olmaları gerekiyor.
Öncelikle, sunucumuzun paketleri bir ağ arayüzünden diğerine iletmesine (forward) izin vermemiz lazım. Bu kernel seviyesinde bir ayar.
Geçici olarak etkinleştirmek için:
Bash:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Kalıcı olarak etkinleştirmek için /etc/sysctl.conf dosyasını düzenleyelim:
Bash:
sudo nano /etc/sysctl.conf
Aşağıdaki satırı bulun veya dosyanın sonuna ekleyin:
Kod:
net.ipv4.ip_forward = 1
Değişikliği kaydedip çıktıktan sonra, sysctl'yi yeniden yükleyin:
Bash:
sudo sysctl -p
Asıl işi yapacak kısım burası. LAN'dan gelen paketlerin, WAN arayüzünden çıkarken kaynak adreslerinin sunucunun WAN IP'si ile değiştirilmesi (masquerade) gerekiyor. Bu, iç ağdaki cihazların özel IP'lerini gizler.
Temel masquerade kuralını ekleyelim:
Bash:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Bu komutta -o eth0 ifadesi, paketlerin çıkış yaptığı WAN arayüzünü belirtir. Kendi arayüz adınızla değiştirmeyi unutmayın (örneğin ens192).
Router'ımız aynı zamanda bir güvenlik duvarı görevi de görmeli. LAN tarafından gelen ve WAN'a çıkacak trafiğe izin verirken, istenmeyen girişleri engelleyelim. Benim genelde uyguladığım basit bir politika şöyle:
Öncelikle mevcut kuralları temizleyip varsayılan politikaları DROP (reddet) yapalım. Dikkat! Bu komutları fiziksel konsoldan veya bir SSH bağlantısı üzerinden değil, doğrudan sunucuda çalıştırıyorsanız bağlantınız kesilebilir. Çok dikkatli olun.
Bash:
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -X
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Şimdi, güvenli bir şekilde SSH ve loopback trafiğine izin verelim:
Bash:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
En kritik kısım, LAN'dan WAN'a yönlendirme (forward) trafiğine izin vermek:
Bash:
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
İlk kural, LAN'dan (eth1) gelen ve WAN'a (eth0) gidecek tüm trafiğe izin verir.
İkinci kural ise, WAN'dan gelen ve daha önce LAN'dan çıkmış bir bağlantıya ait olan (ESTABLISHED, RELATED) cevap paketlerinin iç ağa geçişine izin verir. Bu olmazsa, iç ağdaki cihazlar internetten cevap alamaz.
iptables kuralları geçicidir, sunucu yeniden başlatılınca uçar. Onları kaydetmemiz gerekir.
Debian/Ubuntu sistemlerde:
Bash:
sudo apt-get install iptables-persistent -y
Bash:
sudo netfilter-persistent save
RHEL/CentOS/Fedora sistemlerde:
Bash:
sudo service iptables save
Bash:
sudo /sbin/iptables-save > /etc/sysconfig/iptables
Her şeyin yolunda gidip gitmediğini kontrol edelim:
Bash:
sudo iptables -L -n -v # INPUT/OUTPUT/FORWARD zincirlerini listele
sudo iptables -t nat -L -n -v # NAT tablosunu listele (masquerade kuralınızı görmelisiniz)
Artık iç ağınızdaki bir cihazdan internete ping atmayı veya bir web sitesine bağlanmayı deneyebilirsiniz. Eğer çalışmıyorsa, istemci cihazdaki gateway ve DNS ayarlarını, sunucudaki arayüz isimlerini ve firewall kurallarınızı tekrar kontrol edin.
Umarım bu rehber faydalı olmuştur. Ben test lab'larımda ve bazı müşterilerin küçük şubelerinde bu yapıyı sıklıkla kullanıyorum. Esnekliği ve kontrol imkanı gerçekten hoş. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Eklemek istediğiniz püf noktalar veya takıldığınız bir yer varsa aşağıya yazmaktan çekinmeyin. Kolay gelsin!