Bu döküman, Django web uygulaması için yapılan güvenlik yapılandırmasını açık ve basit bir şekilde açıklamaktadır. Sunucunuzun internete açık olan portlarını nasıl güvenceye alacağınızı öğrenmek için bu rehberi takip edebilirsiniz.
Neden Port Güvenliği Önemlidir?
Bir sunucu çalışırken internete açık birçok port kullanabilir. Bu portlar, sunucunun dış dünyayla iletişim kurduğu kapılardır. Ancak bu kapılar saldırganlar için bir giriş noktası olabilir. Bu yüzden sadece ihtiyaç duyulan portları açık bırakmalı ve diğerlerini kapatmalıyız.
Örneğin: - Port 80: Web trafiği (HTTP) için kullanılır. - Port 443: Güvenli web trafiği (HTTPS) için kullanılır. - Port 22: SSH (uzaktan bağlantı) için kullanılır. - Port 5432: PostgreSQL veritabanı için kullanılır.
Başlangıç Durumu
Sunucunuzdaki güvenlik duvarı (firewall) başlangıçta devre dışı olabilir. Bu, tüm portların açık olduğu anlamına gelir ve güvenlik açısından büyük bir risktir.
Başlangıç durumunu kontrol etmek için şu komutu kullanabilirsiniz:
sudo ufw status
Eğer şu şekilde bir çıktı alıyorsanız:
Status: inactive
Bu, güvenlik duvarınızın aktif olmadığını gösterir.
Portların Yapılandırılması
Güvenlik duvarınızı (UFW) aktif hale getirip gerekli portları yöneterek sunucunuzu koruma altına alabilirsiniz.
1. Web Sunucusu Portları
Django web uygulamanızın çalışması için web trafiğini (HTTP ve HTTPS) kabul eden portları açmanız gerekir:
sudo ufw allow 80/tcp # HTTP trafiği için
sudo ufw allow 443/tcp # HTTPS trafiği için
Bu ayarlarla: - Port 80 (HTTP): Tarayıcınız üzerinden siteyi açarken kullanılır. - Port 443 (HTTPS): Güvenli web trafiği sağlar (SSL sertifikası kullanıyorsanız).
2. Veritabanı ve Cache Portları (Sadece Localhost)
Veritabanı (PostgreSQL) ve cache (Redis) gibi servislerin portları sadece sunucunun kendisinden erişilebilir olmalıdır. Bu, dışarıdan bu servislere erişimi engeller.
PostgreSQL (5432):
sudo ufw allow from 127.0.0.1 to any port 5432
Redis (6379):
sudo ufw allow from 127.0.0.1 to any port 6379
Bu kurallar şu anlama gelir: - Sadece 127.0.0.1 (localhost) adresinden bu portlara erişim yapılabilir. - Sunucunun dışındaki hiçbir cihaz bu servislere bağlanamaz.
3. SSH Port Güvenliği
SSH, sunucunuza uzaktan bağlanmak için kullanılan bir protokoldür. Varsayılan olarak port 22 üzerinden çalışır, ancak güvenlik nedeniyle port numarasını değiştirmek iyi bir fikirdir. Örneğin, portu 42922 olarak değiştirebiliriz.
Yeni SSH Portu Açma:
sudo ufw allow 42922/tcp
Eski SSH Portunu Kapatma:
sudo ufw delete allow 22/tcp
Bu işlem, saldırganların sunucunuza brute-force saldırısı yapma ihtimalini azaltır.
SSH Servisini Yeniden Başlatma:
sudo systemctl restart sshd
Not: Port numarasını değiştirdiğinizde, bağlanmak için yeni port numarasını belirtmeniz gerekir:
ssh -p 42922 kullanıcı_adı@sunucu_adresi
Güvenlik Duvarını Aktif Etme
Gerekli kuralları ekledikten sonra güvenlik duvarını aktif hale getirebilirsiniz:
sudo ufw enable
Aktif olduğunda, güvenlik duvarınız sadece izin verdiğiniz portları açık tutacaktır.
Durumu kontrol etmek için:
sudo ufw status verbose
Örnek çıktı:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
Açık Portlar:
- 80/tcp : HTTP (Herkese açık)
- 443/tcp : HTTPS (Herkese açık)
- 42922/tcp : SSH (Herkese açık)
- 5432 : PostgreSQL (Sadece localhost)
- 6379 : Redis (Sadece localhost)
Güvenlik Durumu
- Varsayılan Kurallar:
- Gelen bağlantılar: Reddediliyor (deny)
-
Giden bağlantılar: İzin veriliyor (allow)
-
Açık Portlar:
- 80 (HTTP): Web tarayıcıları için.
- 443 (HTTPS): Güvenli web tarayıcıları için.
- 42922 (SSH): Sunucuya uzaktan bağlanmak için.
- 5432 (PostgreSQL): Sadece sunucudan erişilebilir.
-
6379 (Redis): Sadece sunucudan erişilebilir.
-
Kapalı Portlar:
- Diğer tüm portlar kapalıdır ve dış dünyadan erişilemez.
Sonuç
Bu yapılandırmalar sayesinde: - Sunucunuz yalnızca gerekli portları açık tutar. - Veritabanı ve cache gibi hassas servisler dış erişime kapalıdır. - SSH için özel bir port kullanılarak brute-force saldırıları azaltılmıştır.
Eğer başka güvenlik ihtiyaçlarınız varsa veya bu ayarları genişletmek isterseniz, bana danışabilirsiniz! 😊
