---
title: "firewalld Rich Rule Nedir? Kullanım ve Örnekler"
canonical: https://hamzadenizyilmaz.com.tr/blog/firewalld-rich-rule-rehberi
author: "Hamza Deniz Y\u0131lmaz"
created: 2026-04-13T12:26:14.0000000+03:00
published: 2026-07-23T02:34:56.6999649+00:00
modified: 2026-08-27T08:40:21.3572120+00:00
---

# firewalld Rich Rule Nedir? Kullanım ve Örnekler

## firewalld Rich Rule nedir?

Rich Rule, firewalld içinde kaynak/hedef adresi, servis veya port, protokol, log/limit
ve `accept`, `reject` ya da `drop` eylemini tek bir okunabilir kuralda birleştiren
rich-language sözdizimidir. Basit `--add-service` veya `--add-port` işleminin ifade
edemediği “yalnız bu IP bu porta erişsin ve reddedilenleri sınırlı logla” gibi kurallar
için kullanılır.

Rich Rule bir zone veya policy parçasıdır. Bu nedenle komutta `--zone` değerini açıkça
belirtmek, aktif zone'u tahmin etmekten daha güvenlidir.

## Değişiklikten önce mevcut durumu oku

```bash
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --zone=public --list-rich-rules
sudo firewall-cmd --permanent --zone=public --list-rich-rules
```

İlk liste runtime, `--permanent` kullanılan liste kalıcı yapılandırmadır. İkisi farklıysa
reload sonrası runtime-only değişiklik kaybolabilir.

## Rich Rule sözdizimi

Temel yapı şöyledir:

```text
rule [family] [priority]
     [source]
     [destination]
     service|port|protocol|...
     [log|nflog|audit]
     [accept|reject|drop|mark]
```

Örnek:

```text
rule family="ipv4"
     source address="203.0.113.10"
     port port="443" protocol="tcp"
     log prefix="HTTPS_ALLOW " limit value="5/m"
     accept
```

Adresler örnektir. Production komutuna kendi yönetim IP'nizi yazmadan önce mevcut SSH
oturumunu ve ikinci erişim kanalını koruyun.

## Rich Rule nasıl eklenir?

Önce runtime kuralıyla davranışı test et:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="443" protocol="tcp" accept'
```

Doğrulama başarılıysa aynı kuralı permanent yapılandırmaya ekle:

```bash
sudo firewall-cmd --permanent --zone=public   --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="443" protocol="tcp" accept'
```

Son olarak yapılandırmayı kontrol edip reload et:

```bash
sudo firewall-cmd --check-config
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-rich-rules
```

`--permanent` değişikliği tek başına runtime'a uygulanmaz. Resmî `firewall-cmd`
dokümantasyonuna göre permanent yapılandırma reload veya servis yeniden başlatma sonrası
runtime olur.

## Rich Rule nasıl sorgulanır?

```bash
RULE='rule family="ipv4" source address="203.0.113.10" port port="443" protocol="tcp" accept'

sudo firewall-cmd --zone=public --query-rich-rule="$RULE"
echo $?
```

Çıkış kodu `0` kuralın bulunduğunu, `1` bulunmadığını belirtir. Otomasyon scriptinde
yalnız ekrana yazılan `yes/no` metnine değil çıkış koduna göre karar verilebilir.

## Rich Rule nasıl silinir?

Silme komutundaki kural, eklenen sözdizimiyle eşleşmelidir:

```bash
RULE='rule family="ipv4" source address="203.0.113.10" port port="443" protocol="tcp" accept'

sudo firewall-cmd --zone=public --remove-rich-rule="$RULE"
sudo firewall-cmd --permanent --zone=public --remove-rich-rule="$RULE"
sudo firewall-cmd --reload
```

Silmeden önce hem runtime hem permanent listede kuralı doğrulayın.

## IP adresine izin verme

Belirli bir IPv4 adresinden tüm bağlantılara izin vermek:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="203.0.113.10" accept'
```

Bu kural geniş yetki verir. Çoğu durumda servis veya port ile daraltmak daha doğrudur:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="203.0.113.10" service name="ssh" accept'
```

## IP adresini engelleme: reject ve drop

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="198.51.100.25" reject'

sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="198.51.100.26" drop'
```

`reject` paketi reddeder ve karşı tarafa hata cevabı üretebilir. `drop` paketi sessizce
atar. Hangisinin kullanılacağı tehdit modeli ve teşhis ihtiyacına göre seçilir.

## IP + port kısıtlama

Yalnız belirli ağdan TCP 5432 erişimi:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="10.20.0.0/16" port port="5432" protocol="tcp" accept'
```

Bu kuralın anlamlı olması için aynı porta daha geniş izin veren başka zone/port/rule
olmadığını `--list-all` ve `--list-rich-rules` ile kontrol edin.

## TCP ve UDP

DNS gibi TCP ve UDP gerektiren serviste iki port kuralı gerekir:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="10.20.0.0/16" port port="53" protocol="udp" accept'

sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="10.20.0.0/16" port port="53" protocol="tcp" accept'
```

Servis tanımı ihtiyacı doğru karşılıyorsa `service name="dns"` daha anlaşılır olabilir.

## IPv6 kuralı

IPv4 kuralı IPv6 trafiğini kapsamaz:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv6" source address="2001:db8:100::/64" service name="ssh" accept'
```

IPv6 etkin bir sunucuda yalnız IPv4 filtreleyip sistemi güvenli varsaymayın.

## Logging ve rate limit

Sınırsız paket loglamak disk ve log pipeline'ını doldurabilir. Prefix ve limit ekleyin:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" port port="22" protocol="tcp" log prefix="SSH_REJECT " level="warning" limit value="5/m" reject'
```

Logun hangi journal/syslog hedefinde göründüğü dağıtımın log yapılandırmasına bağlıdır:

```bash
sudo journalctl -u firewalld --since "10 minutes ago"
```

Paket seviyesindeki kayıtlar kernel/journal tarafında farklı facility altında görülebilir;
test paketini üretip gerçek log hedefini doğrulayın.

## Runtime, permanent ve timeout

Geçici teşhis kuralı için timeout kullanılabilir:

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule family="ipv4" source address="203.0.113.10" service name="ssh" accept'   --timeout=20m
```

Resmî dokümana göre `--timeout`, `--permanent` ile birlikte kullanılamaz. Süre dolunca
runtime kural otomatik kaldırılır.

## Rule priority

Birden fazla kural çakışıyorsa değerlendirme sırası önemlidir. Rich Rule `priority`
değeri `-32768` ile `32767` aralığındadır; düşük değer daha önce değerlendirilir.

```bash
sudo firewall-cmd --zone=public   --add-rich-rule='rule priority=-100 family="ipv4" source address="203.0.113.10" service name="ssh" accept'
```

Priority kullanmak yerine önce zone tasarımını sadeleştirmek tercih edilir. Priority
verildiğinde kural envanterinde gerekçesi belgelenmelidir.

## Güvenli uygulama sırası

1. Aktif interface ve zone eşleşmesini oku.
2. Mevcut runtime/permanent kural listesini kaydet.
3. Yönetim erişimini kesmeyecek dar runtime kuralı ekle.
4. Ayrı istemciden gerçek bağlantıyı test et.
5. `--query-rich-rule` ve port/servis testiyle sonucu doğrula.
6. Aynı kuralı permanent ekle.
7. `--check-config`, reload ve tekrar bağlantı testi çalıştır.

## Sık hatalar

| Belirti | Olası neden | Doğrulama |
|---|---|---|
| Kural eklendi ama trafik değişmedi | Yanlış zone/interface | `--get-active-zones`, `--get-zone-of-interface` |
| Reload sonrası kural kayboldu | Yalnız runtime eklendi | Permanent listeyi kontrol et |
| Permanent kural hemen çalışmadı | Reload yapılmadı | Runtime ve permanent listeleri karşılaştır |
| Silme komutu kuralı bulamadı | Sözdizimi/zone farklı | `--list-rich-rules` çıktısını aynen kullan |
| IPv6 erişimi açık kaldı | Yalnız IPv4 kuralı var | IPv6 listener ve rule family kontrolü |
| SSH bağlantısı kesildi | Allow kuralından önce geniş deny | Konsol erişimi ve priority/zone incelemesi |

## İlgili rehberler

- [Sunucu Güvenliği, Ağ ve Erişim Kontrolü](/rehber/sunucu-guvenligi-ag)
- [firewalld Zone, Service ve Kalıcı Kural Tasarımı](/blog/firewalld-zone-service-ve-kalici-kural-tasarimi)
- [nftables ile Stateful Linux Firewall Tasarımı](/blog/nftables-ile-stateful-linux-firewall-tasarimi)

## Kaynaklar

- [firewalld rich language manual](https://firewalld.org/documentation/man-pages/firewalld.richlanguage.html)
- [firewall-cmd manual](https://firewalld.org/documentation/man-pages/firewall-cmd)
- [firewalld rich rule priorities](https://firewalld.org/2018/12/rich-rule-priorities)

## firewalld Rich Rule Nedir? Kullanım ve Örnekler — kaynak ve uygulama notları

### Konuya özgü sınır

Veritabanı bağlantısı, havuzdaki istemci ve sunucu oturumu aynı kapasite ölçüsü değildir. Bekleyen oturumları, etkin sorguları ve kilitleri birlikte yorumlayın. Üretimde ölçüm amacıyla sorgu metni toplarken kişisel veri veya parametrelerin loglara taşınmasını önleyin.

### Durumu değiştirmeden ön kontrol

Aşağıdaki sorgular envanter içindir; yetki veya modül eksikliği ayrıca değerlendirilmelidir. Çıktılar burada çalıştırılmış test sonucu olarak sunulmamaktadır.

```sql
SELECT state, count(*) FROM pg_stat_activity GROUP BY state;
```

### Birincil başvuru

- [PostgreSQL yönetim ve izleme](https://www.postgresql.org/docs/current/monitoring-stats.html)

### İlgili okuma yolu

- [firewalld Zone, Service ve Kalıcı Kural Tasarımı](/blog/firewalld-zone-service-ve-kalici-kural-tasarimi)
