Üretim Sunucusu Güvenliğini Güçlendirme: Kapsamlı Bir Kontrol Listesi
Bir veri ihlalinin tespit edilmesi için geçen ortalama süre 204 gündür. Üretim sunucusunun güçlendirilmesi, saldırı yüzeyinizi azaltır, böylece ihlallerin başlatılması daha zor ve tespit edilmesi daha hızlı olur. Bu kılavuz, SSH yapılandırmasından web uygulaması güvenlik duvarlarına kadar her üretim sunucusunun uygulaması gereken somut güvenlik önlemlerini kapsar.
Önemli Çıkarımlar
- Yalnızca SSH anahtar kimlik doğrulaması ve standart dışı bağlantı noktaları, otomatik kaba kuvvet saldırılarının %99'unu engeller
- Düzgün yapılandırılmış bir güvenlik duvarı, saldırı yüzeyini binlerce giriş noktasından ondan daha azına indirir
- Web Uygulaması Güvenlik Duvarları, ağ katmanındaki SQL enjeksiyonunu, XSS'yi ve diğer OWASP İlk 10 saldırılarını engeller
- Otomatik yama uygulama, güvenlik açıklarının haftalar değil, ifşa edildikten birkaç saat sonra düzeltilmesini sağlar
SSH Sertleştirme
Yapılandırma
# /etc/ssh/sshd_config
# Disable password authentication
PasswordAuthentication no
ChallengeResponseAuthentication no
# Disable root login
PermitRootLogin no
# Use SSH keys only
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# Limit login attempts
MaxAuthTries 3
MaxSessions 5
# Set idle timeout (5 minutes)
ClientAliveInterval 300
ClientAliveCountMax 0
# Restrict SSH to specific users
AllowUsers deploy ubuntu
# Disable X11 forwarding
X11Forwarding no
# Use only strong algorithms
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
Ciphers [email protected],[email protected],[email protected]
MACs [email protected],[email protected]
Fail2Ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
Güvenlik Duvarı Yapılandırması
UFW (Ubuntu)
# Reset and set default policies
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow SSH (consider changing port)
sudo ufw allow 22/tcp
# Allow HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Allow specific IPs for management
sudo ufw allow from 203.0.113.10 to any port 9090 comment "Grafana"
sudo ufw allow from 203.0.113.10 to any port 9093 comment "Alertmanager"
# Deny everything else (implicit with default deny)
sudo ufw enable
sudo ufw status verbose
AWS Güvenlik Grupları
# Terraform security group
resource "aws_security_group" "app" {
name_prefix = "app-"
vpc_id = aws_vpc.main.id
# Allow HTTPS from anywhere
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
description = "HTTPS from internet"
}
# Allow SSH from office IP only
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["203.0.113.0/24"]
description = "SSH from office"
}
# Allow all outbound
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# Database security group - no public access
resource "aws_security_group" "db" {
name_prefix = "db-"
vpc_id = aws_vpc.main.id
ingress {
from_port = 5432
to_port = 5432
protocol = "tcp"
security_groups = [aws_security_group.app.id]
description = "PostgreSQL from app servers only"
}
}
Nginx Güvenlik Başlıkları
# Security headers for all responses
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self' https://api.example.com;" always;
# Hide server version
server_tokens off;
# Limit request size
client_max_body_size 10m;
# Rate limiting
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=api:10m rate=30r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
server {
location / {
limit_req zone=general burst=20 nodelay;
}
location /api/ {
limit_req zone=api burst=50 nodelay;
}
location /auth/ {
limit_req zone=login burst=3 nodelay;
}
}
SSL/TLS Yapılandırması
# Modern TLS configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# Session configuration
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Certificate (Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Otomatik Sertifika Yenileme
# /etc/cron.d/certbot
0 0,12 * * * root certbot renew --quiet --post-hook "nginx -s reload"
Konteyner Güvenliği
Docker'ı üretimde çalıştırıyorsanız şu ek sağlamlaştırma önlemlerini uygulayın:
Docker Daemon Güvenliği
{
"userns-remap": "default",
"no-new-privileges": true,
"live-restore": true,
"userland-proxy": false,
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Kapsayıcı Çalışma Zamanı Kısıtlamaları
# docker-compose.yml security settings
services:
api:
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
Temel ilkeler:
- Tüm yetenekleri bırakın ve yalnızca ihtiyaç duyulanları geri ekleyin
- Salt okunur dosya sistemi, saldırganların kapsayıcı içeriğini değiştirmesini önler
- Yeni ayrıcalık yok kapsayıcılar içinde ayrıcalık artışını önler
- Dockerfile'da root olmayan kullanıcı (Docker dağıtım kılavuzumuza bakın)
Görüntü Güvenliği
- Resmi, minimum temel görselleri kullanın (Alp çeşitleri)
- Resim sürümlerini sabitleyin (üretimde asla
:latestkullanmayın) - Trivy veya Grype ile görselleri güvenlik açıklarına karşı tarayın
- Docker Content Trust ile görüntüleri imzalayın
- Erişim kontrollerine sahip özel bir kayıt defteri kullanın
Veritabanı Güvenliği
PostgreSQL Sertleştirme
# postgresql.conf security settings
listen_addresses = 'localhost' # Only listen on localhost
ssl = on # Require SSL for connections
ssl_cert_file = '/path/to/server.crt'
ssl_key_file = '/path/to/server.key'
password_encryption = scram-sha-256 # Modern password hashing
log_connections = on # Log all connections
log_disconnections = on # Log disconnections
log_statement = 'ddl' # Log DDL statements
# pg_hba.conf - restrict connections
# TYPE DATABASE USER ADDRESS METHOD
local all all scram-sha-256
host all all 10.0.0.0/8 scram-sha-256
hostssl all all 0.0.0.0/0 scram-sha-256
- PostgreSQL'i asla halka açık internete maruz bırakmayın
- Gerekli minimum izinlere sahip özel veritabanı kullanıcılarını kullanın
- Bağlantı şifrelemesini etkinleştirin (SSL)
- Güçlü şifre politikaları belirleyin
- Düzenli yedekleme doğrulaması (olağanüstü durum kurtarma kılavuzumuza bakın)
İzinsiz Giriş Tespiti
OSSEC Yapılandırması
<!-- /var/ossec/etc/ossec.conf -->
<ossec_config>
<syscheck>
<!-- Monitor critical files for changes -->
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/opt/app/dist</directories>
<!-- Ignore frequently changing files -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/resolv.conf</ignore>
<!-- Run integrity check every 6 hours -->
<frequency>21600</frequency>
</syscheck>
<rootcheck>
<rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
<rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
</rootcheck>
</ossec_config>
AWS GuardDuty
resource "aws_guardduty_detector" "main" {
enable = true
datasources {
s3_logs {
enable = true
}
kubernetes {
audit_logs {
enable = true
}
}
}
}
Otomatik Güvenlik Yaması
# Ubuntu: Enable unattended security updates
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
Unattended-Upgrade::Mail "[email protected]";
Güvenliği Güçlendirme Kontrol Listesi
Sunucu Düzeyi
- Yalnızca SSH anahtarı kimlik doğrulaması, kök oturum açma devre dışı
- Varsayılan olarak reddetme politikasıyla yapılandırılmış güvenlik duvarı
- Fail2Ban SSH ve web sunucusunda aktif
- Otomatik güvenlik güncellemeleri etkinleştirildi
- Gerekli olmayan hizmetler devre dışı bırakıldı
- Dosya bütünlüğü izleme (OSSEC veya eşdeğeri)
- Denetim günlüğü etkinleştirildi (auditd)
Uygulama Düzeyi
- Tüm uç noktalarda TLS 1.2+, HSTS etkin
- Güvenlik üstbilgileri yapılandırıldı (CSP, X-Frame-Options, vb.)
- Tüm genel uç noktalarda hız sınırlaması
- Giriş doğrulama ve parametreli sorgular (
sql.raw()yok) - HttpOnly, Kimlik doğrulama için güvenli çerezler
- CORS bilinen kaynaklarla sınırlıdır
- Hata yanıtları yığın izlerini sızdırmaz
Ağ Düzeyi
- Veritabanı herkese açık değil
- Özel alt ağlardaki dahili hizmetler
- AWS hizmetleri için VPC uç noktaları (genel internet yok)
- Herkese açık uç noktalarda WAF
- DDoS koruması (Cloudflare, AWS Shield)
İzleme
- Güvenlik olayı uyarısı yapılandırıldı
- En az 90 gün boyunca günlük tutma
- Başarısız kimlik doğrulama girişimleri izlendi
- Olağandışı trafik düzenleri algılandı
Sıkça Sorulan Sorular
Güvenlik denetimlerini ne sıklıkla gerçekleştirmeliyiz?
Üç ayda bir otomatik taramalar (güvenlik açığı taraması, bağımlılık denetimleri) ve yıllık manuel sızma testleri. Yüksek riskli uygulamalar (ödeme işleme, sağlık verileri) her 6 ayda bir harici sızma testlerine tabi tutulmalıdır. Her üretim dağıtımı, CI/CD hattında otomatik güvenlik taramasını içermelidir — CI/CD en iyi uygulamalar kılavuzumuza bakın.
Halihazırda hız sınırlamamız varsa WAF gerekli midir?
Evet. Hız sınırlaması kötüye kullanımı önler ancak istek içeriğini denetlemez. WAF, istek yüklerini analiz ederek SQL enjeksiyonunu, XSS'yi ve diğer uygulama katmanı saldırılarını engeller. Hız sınırlamayı taşkın koruması olarak ve WAF'ı içerik denetimi olarak düşünün; ikisine de ihtiyacınız var.
Odoo üretim sunucusunun güvenliğini nasıl sağlarız?
Yukarıdaki genel sağlamlaştırmaya ek olarak: üretimde veritabanı yöneticisini devre dışı bırakın (list_db = False), güçlü bir admin_passwd ayarlayın, veritabanı erişimini kısıtlamak için dbfilter kullanın, Odoo'yu Nginx'in arkasında çalıştırın (Odoo'yu asla doğrudan açığa çıkarmayın) ve Odoo'yu ve tüm modülleri güncel tutun. ECOSIRE, yönetilen barındırma hizmetlerimizin bir parçası olarak Odoo güvenlik güçlendirmesi sağlar.
En etkili güvenlik önlemi nedir?
Tüm yönetici hesaplarında MFA'nın (Çok Faktörlü Kimlik Doğrulama) etkinleştirilmesi. Bu tek kontrol, kimlik bilgilerine dayalı saldırıların %99'unu önler. Diğer herhangi bir sağlamlaştırma önleminden önce MFA'yı SSH (PAM aracılığıyla), AWS konsolu, veritabanı yönetim araçları ve uygulama yönetici panellerinde uygulayın.
Sırada Ne Var?
Güvenliğin güçlendirilmesi devam eden bir uygulamadır. Algılama için izleme ve uyarı, dayanıklılık için olağanüstü durum kurtarma ve önleme için CI/CD güvenlik taraması ile birleştirin.
Güvenliği güçlendirme danışmanlığı için ECOSIRE ile iletişime geçin veya altyapı yol haritasının tamamı için DevOps kılavuzumuzu inceleyin.
ECOSIRE tarafından yayınlandı - işletmelerin üretim altyapısını güvence altına almasına yardımcı oluyor.
Yazan
ECOSIRE Research and Development Team
ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.
İlgili Makaleler
E-Ticaret için Yapay Zeka Dolandırıcılık Tespiti: İyi Müşterileri Engellemeden Geliri Koruyun
Yanlış pozitifleri %50-70 oranında azaltırken sahtekarlık işlemlerinin %95'ten fazlasını yakalayan yapay zeka dolandırıcılık tespitini kullanın. Modelleri, kuralları ve uygulamayı kapsar.
Modern Uygulamalar için API Ağ Geçidi Kalıpları ve En İyi Uygulamalar
Ölçeklenebilir web mimarileri için hız sınırlama, kimlik doğrulama, istek yönlendirme, devre kesiciler ve API sürüm oluşturma dahil olmak üzere API ağ geçidi modellerini uygulayın.
CDN Performans Optimizasyonu: Daha Hızlı Küresel Teslimat İçin Tam Kılavuz
Daha hızlı küresel içerik dağıtımı için önbelleğe alma stratejileri, uç bilgi işlem, görüntü optimizasyonu ve çoklu CDN mimarileriyle CDN performansını optimize edin.