# nftables ile sunucu güvenlik duvarı oluşturun

> Debian veya Ubuntu sunucu için varsayılan olarak reddeden nftables kural seti yazın: ICMP, SSH, web portları ve izin listeleri, geri alma güvencesiyle.

Zorluk: Orta\
Denendiği sistemler: Debian 12, Debian 13, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS

nftables, güncel Linux çekirdeklerinin paket filtreleme altyapısı ve Debian'ın varsayılan güvenlik duvarıdır. Yapılandırması IPv4 ve IPv6'yı kapsayan okunabilir tek bir dosyadır. Bu rehber bir sunucu için varsayılan olarak reddeden bir kural seti yazar, güvenle uygular ve nasıl genişletileceğini gösterir. `198.51.100.7` yerine kendi IP adresinizi yazın.

## Başlamadan önce

- sudo kullanıcısıyla giriş yapın ve hizmet sayfanızda görünüyorsa web konsolunu hazır tutun.
- **Tek** bir güvenlik duvarı aracı kullanın. UFW etkinse (`sudo ufw status`) önce `sudo ufw disable` ile kapatın ya da UFW ile devam edin: [UFW güvenlik duvarı](/guides/ufw-firewall).
- Gerekirse araçları kurun (Debian'da hazırdır; Ubuntu'da `sudo apt install nftables` çalıştırın).

## 1. adım: Kural setini yazın

`/etc/nftables.conf` dosyasını açın:

```bash
sudo nano /etc/nftables.conf
```

İçeriğini şununla değiştirin:

```text
#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    set admin_hosts {
        type ipv4_addr
        flags interval
        elements = { 198.51.100.7 }
    }

    chain input {
        type filter hook input priority filter; policy drop;

        ct state established,related accept
        ct state invalid drop
        iif "lo" accept

        meta l4proto icmp accept
        meta l4proto ipv6-icmp accept

        tcp dport 22 accept
        tcp dport { 80, 443 } accept

        counter comment "dropped by policy"
    }

    chain forward {
        type filter hook forward priority filter; policy drop;
    }

    chain output {
        type filter hook output priority filter; policy accept;
    }
}
```

Ne yapar: kendi bağlantılarınıza gelen yanıtlara, loopback'e ve ICMP'ye izin verilir, SSH ve web portları açıktır, gelen diğer her şey düşürülür. `admin_hosts` kümesi izin listeleri için hazırdır (4. adım).

## 2. adım: Sözdizimini kontrol edin

```bash
sudo nft -c -f /etc/nftables.conf
```

Çıktı yoksa dosya geçerlidir.

## 3. adım: Bir güvenlik ağıyla uygulayın

Kuralları yüklemeden önce otomatik bir geri alma zamanlayın. Bir şey bağlantınızı keserse kurallar beş dakika sonra temizlenir:

```bash
sudo systemd-run --on-active=5min /usr/sbin/nft flush ruleset
sudo nft -f /etc/nftables.conf
```

**Yeni** bir SSH oturumu açın. Çalışıyorsa geri almayı iptal edin: `systemctl list-timers` zamanlayıcıyı gösterir (adı `run-` ile başlar) ve `sudo systemctl stop` ardından bu ad onu iptal eder.

Kural setinin açılışta yüklenmesini sağlayın:

```bash
sudo systemctl enable nftables
```

**Doğrulama:**

```bash
sudo nft list ruleset
```

## 4. adım: Bir portu adreslerinizle sınırlayın

SSH'ye yalnızca `admin_hosts` içindeki adreslerden izin vermek için SSH satırını şöyle değiştirin:

```text
tcp dport 22 ip saddr @admin_hosts accept
```

Tüm dosyayı yeniden yüklemeden, çalışma anında adres ekleyin veya kaldırın:

```bash
sudo nft add element inet filter admin_hosts { 203.0.113.0/24 }
sudo nft delete element inet filter admin_hosts { 203.0.113.0/24 }
```

Çalışma anındaki değişiklikler yeniden başlatmada kaybolur; bunları `/etc/nftables.conf` dosyasına da ekleyin. IPv6 yönetici adresleri için `type ipv6_addr` türünde ikinci bir küme ve `ip6 saddr` ile eşleşen bir kural oluşturun.

## 5. adım: Daha fazla port açın

`input` zincirine her servis için bir satır ekleyin, kontrol edip yeniden yükleyin:

```text
udp dport 51820 accept
tcp dport 25565 accept
```

```bash
sudo nft -c -f /etc/nftables.conf
sudo nft -f /etc/nftables.conf
```

## Düşürülenleri kaydedin

Düşürülen paketleri görmek için `input` zincirinin son satırı olarak hız sınırlı bir log kuralı ekleyin:

```text
limit rate 5/minute log prefix "nft-drop: "
```

Kaydı `sudo journalctl -k | grep nft-drop` ile okuyun.

## Sorun giderme

**Kuralları yükledikten sonra SSH dondu.** Geri alma zamanlayıcısını bekleyin ya da konsolu kullanın: `sudo nft flush ruleset`. Ardından dosyayı düzeltin. Bkz. [güvenlik duvarı değişikliğinden sonra erişimi kaybetmek](/guides/locked-out-after-firewall-change).

**IPv6 çalışmayı durdurdu.** ICMPv6 engelleniyor. `ipv6-icmp` satırını koruyun.

**Kurallar yeniden başlatmadan sonra kayboluyor.** `nftables` servisi etkin değil ya da başka bir araç (UFW, Docker, firewalld) kendi kurallarını yüklüyor. `systemctl status nftables` ile kontrol edin.

**output zinciri izin verdiği halde 25 numaralı porttan posta gönderilemiyor.** HyperDC VPS'lerde giden 25 numaralı port varsayılan olarak kapalıdır. 3 ay veya daha uzun süreyle satın alınan hizmetlerde bir destek bildirimi açtığınızda talep üzerine açılır. O zamana kadar postayı 587 portu üzerinden bir aktarıcıyla (relay) gönderin.

**Docker container'ları ağ erişimini kaybediyor.** Docker kendi kurallarını yönetir; `flush ruleset` onları kaldırır. Yeniden yüklemeden sonra Docker'ı yeniden başlatın ya da belgelerinde anlatıldığı gibi Docker'ın tablolarını temizlemenin dışında tutun.

## Sonraki adımlar

- Port yönlendirme ve NAT: [portlar ve port yönlendirme](/guides/ports-and-port-forwarding).
- Sunucunuzda IPv6: [IPv6 kurulumu](/guides/ipv6-setup).

## Sık sorulan sorular

### nftables mı, UFW mi kullanmalıyım?

UFW yaygın durumlar için daha kolaydır. nftables, okunabilir tek bir dosyada tam kontrol, izin listeleri için kümeler (set) ve NAT sağlar. Birini seçin; kuralları ikisinde birden tutmayın.

### IPv6 için ayrı kurallar gerekir mi?

inet ailesinden bir tablo kullanırsanız hayır: kuralları IPv4 ve IPv6'ya uygulanır. IPv6'nın çalışması için gereken ICMPv6'ya izin vermeyi unutmayın.

### Kurallarım yeniden başlatmadan sonra korunur mu?

Evet; /etc/nftables.conf içindeyse ve nftables servisi etkinse. Yalnızca nft komutuyla eklenen kurallar yeniden başlatmada kaybolur.

### ICMP'ye neden izin vermeliyim?

ICMP, yol MTU keşfi gibi bağlantıların çalışmasını sağlayan hata mesajlarını taşır; IPv6 da komşu keşfi için ICMPv6'ya ihtiyaç duyar. Engellemek, bulunması zor sorunlara yol açar.

### Trafiği hangi kuralın engellediğini nasıl görürüm?

Kurala sayaç veya bir log ifadesi ekleyin, örneğin ardından bir metin gelen log prefix, sonra çekirdek kaydını journalctl -k ile okuyun.

---

Kaynak: <https://hyperdc.com/tr/guides/networking/nftables-firewall>\
Son güncelleme: 2026-10-09
