Flask Uygulamanızda Güvenlik ve Performans: SSL, Firewall, Loglama ve Optimizasyon

  • Home
  • Linux
  • Flask Uygulamanızda Güvenlik ve Performans: SSL, Firewall, Loglama ve Optimizasyon
Python Flask

Flask Uygulamanızda Güvenlik ve Performans: SSL, Firewall, Loglama ve Optimizasyon

Flask uygulamanızı Narweb VDS üzerinde güvenli ve yüksek performanslı hale getirmek için SSL kurulumu, güvenlik duvarı ayarları, loglama ve optimizasyon tekniklerini öğrenin.

Python Flask

Giriş

İlk bölümde Flask uygulamanızı Narweb VDS üzerine deploy ettiniz. Ancak, üretim ortamında bir uygulamanın sadece çalışması yetmez; güvenli, hızlı ve sürdürülebilir olmalıdır. Bu bölümde, HTTPS desteği, temel güvenlik önlemleri, performans iyileştirmeleri ve log yönetimini ele alacağız.

SSL (Let’s Encrypt & Certbot) ile HTTPS Kurulumu

Güvenli bir bağlantı için SSL sertifikası eklemek şarttır. Let’s Encrypt ve Certbot ile ücretsiz bir SSL sertifikası kurabilirsiniz. Öncelikle, bir alan adınızın (ör. example.com) sunucuya yönlendirildiğinden emin olun.

Certbot’u kurun:

apt install -y certbot python3-certbot-nginx

Certbot ile SSL sertifikasını alın:

certbot --nginx -d example.com -d www.example.com

Certbot, Nginx yapılandırmasını otomatik olarak günceller ve HTTPS’yi etkinleştirir. Sertifikanın otomatik yenilenmesini test edin:

certbot renew --dry-run

Nginx Yapılandırmasında SSL Detayları

Certbot, Nginx yapılandırmanızı güncellese de, manuel kontrol için /etc/nginx/sites-available/flask-uygulama dosyasını inceleyin. Tipik bir HTTPS yapılandırması şöyle görünür:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Yapılandırmayı test edin ve Nginx’i yeniden başlatın:

nginx -t
systemctl restart nginx

UFW ile Temel Güvenlik Duvarı Ayarları

UFW (Uncomplicated Firewall), sunucunuzu korumak için basit bir araçtır. Yalnızca gerekli portları açık tutun:

# UFW kurulumu
apt install -y ufw

# SSH (22), HTTP (80) ve HTTPS (443) portlarını aç
ufw allow 22
ufw allow 80
ufw allow 443

# UFW’yi etkinleştir
ufw enable

UFW durumunu kontrol edin:

ufw status

SSH Anahtar Tabanlı Giriş ve Root Erişiminin Kapatılması

Parola tabanlı SSH girişini devre dışı bırakarak güvenliği artırın. Yerel makinenizde bir SSH anahtarı oluşturun:

ssh-keygen -t rsa -b 4096

Anahtarı sunucuya kopyalayın:

ssh-copy-id root@<sunucu-ip-adresi>

Sunucuda, SSH yapılandırmasını düzenleyin (/etc/ssh/sshd_config):

PasswordAuthentication no
PermitRootLogin prohibit-password

SSH servisini yeniden başlatın:

systemctl restart sshd

Artık yalnızca anahtar tabanlı giriş mümkün. Root erişimini tamamen kapatmak için yeni bir kullanıcı oluşturabilirsiniz:

adduser yeni-kullanici
usermod -aG sudo yeni-kullanici

Fail2ban Kurulumu ve Brute-Force Koruması

Fail2ban, brute-force saldırılarını engeller. Kurulumu yapın:

apt install -y fail2ban

SSH için bir jail yapılandırın (/etc/fail2ban/jail.local):

[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 3600

Fail2ban’ı başlatın:

systemctl start fail2ban
systemctl enable fail2ban

Nginx ve Gunicorn için Performans Ayarları

Performansı artırmak için Nginx ve Gunicorn’u optimize edin:

  • Nginx: Gzip sıkıştırmasını etkinleştirin ve rate limiting ekleyin. /etc/nginx/nginx.conf dosyasına şu ayarları ekleyin:
http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
}

Rate limiting’i site yapılandırmanıza ekleyin:

location / {
    limit_req zone=mylimit burst=20;
    proxy_pass http://127.0.0.1:8000;
    ...
}
  • Gunicorn: Worker sayısını CPU çekirdek sayısına göre ayarlayın. Örnek komut:
gunicorn --workers 3 --bind 0.0.0.0:8000 wsgi:app

Statik Dosyaların Nginx ile Sunulması

Flask uygulamanızın statik dosyalarını (CSS, JS, resimler) Nginx ile sunarak performansı artırın. Nginx yapılandırmanıza şu bloğu ekleyin:

location /static {
    alias /var/www/flask-uygulama/static;
}

Flask uygulamanızda statik dosyaların doğru yolunu ayarlayın:

app = Flask(__name__, static_url_path='/static')

Flask DEBUG Modunun Kapatılması ve Güvenli Yapılandırma

Üretimde DEBUG modunu kapatın. app.py veya ana Flask dosyanızda:

app.config['DEBUG'] = False

Güvenli bir SECRET_KEY ayarlayın:

app.config['SECRET_KEY'] = 'uzun-ve-rastgele-bir-anahtar'

Loglama: Flask, Gunicorn ve Nginx Loglarının Yönetimi

Logları düzenli tutmak için:

  • Flask: Python’un logging modülünü kullanın:
import logging
logging.basicConfig(filename='app.log', level=logging.INFO)
app.logger.info('Uygulama başlatıldı')
  • Gunicorn: Logları bir dosyaya yönlendirin:
gunicorn --access-logfile access.log --error-logfile error.log --bind 0.0.0.0:8000 wsgi:app
  • Nginx: Log dosyalarını kontrol edin (/var/log/nginx/access.log ve error.log). Log rotasyonu için logrotate kullanın:
apt install -y logrotate

Kontrol Listesi

  • [ ] SSL sertifikası kuruldu ve HTTPS çalışıyor mu?
  • [ ] Nginx yapılandırması HTTPS için güncellendi mi?
  • [ ] UFW ile gerekli portlar açık mı?
  • [ ] SSH anahtar tabanlı giriş ayarlandı mı?
  • [ ] Fail2ban brute-force koruması aktif mi?
  • [ ] Nginx ve Gunicorn performans ayarları yapıldı mı?
  • [ ] Statik dosyalar Nginx ile sunuluyor mu?
  • [ ] Flask DEBUG modu kapalı mı?
  • [ ] Loglama yapılandırmaları tamamlandı mı?

Sıkça Sorulan Sorular

S: Let’s Encrypt yerine başka bir SSL sağlayıcısı kullanabilir miyim?
C: Evet, Cloudflare, ZeroSSL veya ücretli sağlayıcılar kullanılabilir, ancak Let’s Encrypt ücretsiz ve kolaydır.

S: Fail2ban olmadan güvenlik sağlanabilir mi?
C: Evet, ancak Fail2ban brute-force saldırılarına karşı ek bir koruma katmanı sağlar.

Bir Sonraki Bölümde Neler Var?

Bir sonraki bölümde, uygulamanızın sürdürülebilirliğini artırmak için otomatik deploy, izleme araçları, yedekleme stratejileri ve sıfır kesintiyle güncelleme tekniklerini ele alacağız.

Bir yanıt yazın

Hemen bugün siz de mutlu Narweb müşterileri arasına katılın!

Narweb Cloud altyapısına geçerek siz de hem uygun fiyat hem de kaliteli hizmet almaya hemen başlayabilirsiniz.

Copyright 2000 - 2025 © NARWEB.net. Tüm hakları saklıdır. Narweb® Markası Narnet Bilgisayar Dahili Tic. LTD. ŞTİ.'nin tescilli bir markasıdır.