NİCELİĞİ ARTA ARTA GİDEN KILAVUZ: E-posta iletimini güvenilir hale getirmek için sunucunuzu ayarlama. BÖLÜM I: Güvenlik Duvarı

Güvenlik Duvarı, sunucuya hangi bağlantılara izin verileceğini ve hangilerinin engelleneceğini kontrol eden bir yazılımdır (veya donanım-yazılım aygıtıdır). Modern Linux sunucu dağıtımlarının büyük çoğunluğunda, kutudan çıktığı anda bir tür güvenlik duvarı mevcuttur.
Alıcıya güvenilir e-posta teslimi, yalnızca posta sunucusunun kendisine değil, aynı zamanda doğru DNS kayıtlarına ve güvenlik duvarı yapılandırmasına da bağlıdır. Bunlardan herhangi birinde bir sorun varsa, iletilerinizin büyük olasılıkla Spam klasörüne düşmesi veya hiç teslim edilmemesi demektir.
Bu makale, sunucunuzdan gönderilen iletilerin neredeyse %100 güvenilir bir şekilde teslim edilmesini sağlamanıza olanak tanıyacak temel adımları özetlemektedir. 1. Bölüm'de olası güvenlik duvarı ile ilgili sorunları ayrıntılı olarak inceleyeceğiz; 2. Bölüm'de ise DNS kayıtlarının yapılandırılmasına ilişkin talimatları bulacaksınız.
Bu makaledeki bilgiler yalnızca Linux dağıtımlarında çalışan posta sunucuları için geçerlidir. Örnek olarak FASTPANEL kontrol paneli ile Debian 12 ve Rocky Linux 8.10 kullanılmaktadır.
Ön Koşullar
Adım 1. Tanı araçlarını yükleyin
Kayıtları ve bağlantı noktalarını kontrol etmek için şunlara ihtiyacınız olacak:
-
dig - DNS kayıtlarını analiz etmek için
-
lsof - posta sunucusu durumunu kontrol etmek için
-
netcat - bağlantı noktası kullanılabilirliğini kontrol etmek için
-
whois - mevcut DNS sağlayıcısını kontrol etmek için
Debian/Ubuntu'da kurulum:
sudo apt update && sudo apt install -y bind9-dnsutils netcat-openbsd lsof whois
CentOS/AlmaLinux/Rocky Linux:
sudo yum install -y bind-utils nmap-ncat lsof whois
Posta bağlantı noktası kullanılabilirliği
Bağlantı noktası, bir sunucudaki farklı hizmetlere hitap etmek için kullanılan sayısal bir tanımlayıcıdır. Her hizmet veya uygulama, ağ üzerinden veri alışverişi yapmak için kendi bağlantı noktasında dinler (örneğin, HTTP 80 numaralı bağlantı noktasını, SMTP ise 25 numaralı bağlantı noktasını kullanır).
Aşağıdaki adımların tümünü gerçekleştirmek için, kök kullanıcı kimlik bilgileriyle SSH üzerinden sunucunuza bağlanın veya örneklerde gösterildiği gibi komutları çalıştırırken sudo kullanın. SSH üzerinden bir sunucuya nasıl bağlanacağınızı SSH makalemizde öğrenebilirsiniz.
Adım 2. Posta sunucusu durumunu kontrol edin
Bağlantı noktalarının ağ üzerinden erişilebilir olup olmadığını kontrol etmeden önce, posta sunucularının çalıştığından ve doğru şekilde çalıştığından emin olun. Giden posta genellikle Exim veya Postfix tarafından, gelen posta ise Dovecot tarafından işlenir.
Çalıştıklarını kontrol etmek için komutları kullanın:
sudo lsof -i:25
sudo lsof -i:143
Hizmetler çalışıyorsa, a şağıdaki gibi bir çıktı alırsınız:
25 numaralı bağlantı noktası:
KOMUT PID KULLANICI FİDESİ TIP CİHAZ BOYUT/KAPALI DUGUM AD
exim 839 exim 4u IPv6 778199358 0t0 TCP *:smtp (LISTEN)
exim 839 exim 5u IPv4 778199359 0t0 TCP *:smtp (LISTEN)
Sunucunuz farklı bir SMTP sunucusu kullanıyorsa, örneğin Postfix, ilk sütunda exim yerine tam adını görürsünüz. Gerekirse, sonraki komutlarda bu adı kullanın.
143 numaralı bağlantı noktası:
KOMUT PID KULLANICI FİDESİ TIP CİHAZ BOYUT/KAPALI DUGUM AD
dovecot 859 root 39u IPv4 778204692 0t0 TCP *:imap (LISTEN)
dovecot 859 root 40u IPv6 778204693 0t0 TCP *:imap (LISTEN)
Bu, her şeyin yolunda olduğu ve bir sonraki adıma geçebileceğiniz anlamına gelir.
Posta hizmetleri çalışmıyorsa, boş bir çıktı alırsınız:
~ sudo lsof -i:25
~
~ sudo lsof -i:143
~
Bu durumda bir sorun var ve posta hizmetleri kullanılamıyor. Manuel olarak başlatmayı deneyebilir ve ardından durumlarını kontrol edebilirsiniz:
Debian/Ubuntu:
systemctl restart exim4 dovecot
systemctl status exim4
systemctl status dovecot
CentOS/AlmaLinux/Rocky Linux:
systemctl restart exim dovecot
systemctl status exim
systemctl status dovecot
Çalışır durumda, hizmet durumu şuna benzer olacaktır:
Exim:
● exim.service - Exim Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/exim.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-11-02 16:38:57 UTC; 57min ago
Main PID: 839 (exim)
Tasks: 1
Memory: 11.0M
CGroup: /system.slice/exim.service
└─839 /usr/sbin/exim -bd -q1h
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
Dovecot:
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-11-02 16:38:58 UTC; 58min ago
Docs: man:dovecot(1)
https://doc.dovecot.org/
Main PID: 859 (dovecot)
Tasks: 5
Memory: 9.5M
CGroup: /system.slice/dovecot.service
├─ 859 /usr/sbin/dovecot -F
├─ 880 dovecot/anvil
├─ 881 dovecot/log
├─ 882 dovecot/config
└─1729 dovecot/stats
Bu durumda her şey yolunda ve bir sonraki adıma geçebilirsiniz.
Hizmetlerde bir sorun varsa, şuna benzer bir çıktı görürsünüz:
Exim:
● exim.service - Exim Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/exim.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2025-11-02 17:38:44 UTC; 3s ago
Process: 839 ExecStart=/usr/sbin/exim -bd -q${QUEUE} (code=exited, status=0/SUCCESS)
Main PID: 839 (code=exited, status=0/SUCCESS)
Dovecot:
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2025-11-02 17:39:32 UTC; 3s ago
Docs: man:dovecot(1)
https://doc.dovecot.org/
Process: 2278 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
Process: 859 ExecStart=/usr/sbin/dovecot -F (code=exited, status=0/SUCCESS)
Main PID: 859 (code=exited, status=0/SUCCESS)
Hizmetlerin neden kullanılamayacağına dair birçok olası neden vardır (yapılandırma dosyalarındaki hatalar, yanlışlıkla silinmiş günlük dosyaları, sunucuda boş disk alanı olmaması ve çok daha fazlası). Bu yönler bu makalenin kapsamı dışındadır.
Bu sorunla karşılaşırsanız ve kendiniz araştırmak isterseniz, sistem günlüğüyle ilgili makalemizi öneririz. Veya yardım için barındırma sağlayıcınızın destek ekibiyle iletişime geçin. kodu.cloud'da 7/24 çalışıyoruz ve taleplere birkaç dakika içinde yanıt veriyoruz.
Adım 3. Genel ağdan posta bağlantı noktalarının erişilebilirliğini kontrol etme
E-postanın doğru çalışması için aşağıdaki TCP bağlantı noktalarının ağ üzerinden erişilebilir olması gerekir:
-
25, 465, 587 - posta göndermek için (SMTP)
-
143, 993 - posta almak için (IMAP)
Erişilebilirliğini netcat kullanarak kontrol edebilirsiniz:
nc -vz 1.2.3.4 25
1.2.3.4 kısmını sunucunuzun gerçek IP adresiyle değiştirin.
Bağlantı noktası açıksa, aşağıdaki yanıtı alırsınız:
Debian/Ubuntu:
Connection to 1.2.3.4 25 port [tcp/smtp] succeeded!
CentOS/AlmaLinux/Rocky Linux:
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 1.2.3.4:25.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Bağlantı noktası kapalıysa, yanıt aşağıdaki gibi olacaktır:
Debian/Ubuntu:
nc: connect to 1.2.3.4 port 25 (tcp) failed: Connection refused
CentOS/AlmaLinux/Rocky Linux:
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.
Bu bölümün başında listelenen tüm bağlantı noktaları için bu komutu çalıştırın. Hepsi erişilebilir durumdaysa, bu makalenin ikinci kısmına geçin. Erişilebilir değilse, sorunu çözmek için Adım 4'e gidin.
Adım 4. Erişim açma (isteğe bağlı)
Çoğu zaman, sunucular istenmeyen bağlantılara karşı korunmak için güvenlik duvarı olarak iptables veya UFW kullanır. Komutu çalıştırın:
sudo ufw status
Aşağıdaki yanıtı alırsanız:
-bash: ufw: komutu bulunamadı
iptables'in kullanıldığı anlamına gelir. Ancak, çıktı şu şekilde başlıyorsa:
Durum: aktif
UFW'nin kullanıldığı anlamına gelir.
Kullanılan güvenlik duvarına göre bu adımın ilgili alt bölümüne gidin.
Linux sistem güvenlik duvarını yönetmek için başka yazılımlar da vardır (nftables, firewalld ve diğerleri). Bu makalenin boyutunu artırmamak için bunlar bu makalede ele alınmayacaktır.
Iptables
Bu bölümde, tüm örnekler yalnızca IPv4 için geçerlidir. Sunucunuzda bir IPv6 adresi varsa ve posta bağlantı noktalarının IPv6 üzerinden de kullanılabilir olmasını istiyorsanız, iptables yerine ip6tables kullanarak tüm komutları ek olarak tekrarlayın.
Tüm mevcut kuralları görüntülemek için şunu çalıştırın:
sudo iptables -L -v -n --line-numbers
Sunucuda eklenen kural kümesine bağlı olarak çıktı farklılık gösterebilir. Varsayılan olarak kural yoktur, ancak barındırma yapılandırmasına veya işletim sistemine bağlı olarak bazı yapılandırmalar zaten yapılmış olabilir. Bir posta sunucusunu yapılandırırken sıkça karşılaşılan iki ana vakaya bakalım.
- “Yasaklanmayan her şey izinlidir” politikası (policy ACCEPT)
Bu durumda güvenlik duvarı, açıkça engelleyen bir kural oluşturulana kadar varsayılan olarak tüm trafiğe izin verir. Bu politika genellikle varsayılan olarak kullanılır.
Aşağıda, SSH ve posta bağlantı noktalarının engellendiği bir kural kümesi örneği verilmiştir:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 51 5637 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 22
2 0 0 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 25,143,993,587,465
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 25,143,993,587,465
Bu örnekte:
-
Política ACCEPT varsayılan davranışı tanımlar: aksi belirtilmedikçe tüm bağlantılara izin verilir.
-
Chain INPUT (gelen bağlantılar): port 22 (SSH) ve tüm standart posta bağlantı noktalarına (SMTP: 25, 465, 587; IMAP: 143; IMAPS: 993) gelen yeni bağlantılar engellenir.
-
Chain OUTPUT (giden bağlantılar): aynı bağlantı noktalarına giden paketler engellenir.
Kural numarası satırın başında gösterilir (num). Örneğin, INPUT zincirindeki posta bağlantı noktalarını engelleyen kuralı (kural numarası 2) silmeniz gerekirse, komut şöyle olacaktır:
sudo iptables -D INPUT 2
Burada:
-
-D - bir kuralı silme komutudur.
-
INPUT - kuralın silindiği zincirdir (bu durumda, gelen trafik).
-
2 - silmek istediğiniz kuralın bulunduğu satır numarasıdır.
Benzer şekilde, bu örnekteki giden bağlantı noktası engelini kaldırmak için şunu çalıştırmanız gerekir:
sudo iptables -D OUTPUT 1
iptables -L -v -n --line-numbers çıktısındaki satır numaraları, başka kurallar ekleyip sildiğinizde değişebilir. Bu nedenle, yeni kurallar eklerseniz, satır numaraları kayabilir. Hata yapmamak için, bir kuralı silmeden önce her zaman mevcut satır numaralarını kontrol edin.
Bundan sonra, her şeyin doğru olduğundan emin olmak için komutu tekrar çalıştırın:
iptables -L -v -n --line-numbers
Çıktı, posta bağlantı noktalarının çalışmasını engelleyen kurallar içermemelidir:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 51 5637 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Kurallar hala mevcutsa, girdiğiniz komutların ve satır numaralarının doğruluğunu kontrol edin.
Güvenlik duvarı kurallarını değiştirdikten sonra değişiklikleri kaydettiğinizden emin olun, aksi takdirde yeniden başlatmadan sonra kaybolurlar. Mevcut iptables kurallarını kaydetmek için şunu çalıştırın:
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
CentOS/AlmaLinux/Rocky Linux:
iptables-save > /etc/sysconfig/iptables
Bundan sonra, 3. Adımda açıklandığı gibi posta bağlantı noktalarının kullanılabilirliğini tekrar test edin. Hala kullanılamıyorlarsa, 5. Adıma devam edin. Her şey yolundaysa, bu makalenin ikinci bölümüne gidin buradan.
2. “Açıkça izin verilmeyen her şeyi engelle” politikası (policy DROP)**
Bu tür bir yapılandırma çok daha katıdır. Tüm bağlantı noktaları ve protokoller varsayılan olarak engellenir ve yalnızca belirli bağlantı noktaları için açık izin kuralları trafiğe izin verir. Bu, sunucular için, özellikle riskleri en aza indirmek istiyorsanız, daha güvenli ve önerilen bir yaklaşımdır.
Böyle bir yapılandırma için bir kural örneği:
Chain INPUT (policy DROP 306 packets, 17962 bytes)
num pkts bytes target prot opt in out source destination
1 92 12474 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 466 32947 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 197 packets, 29192 bytes)
num pkts bytes target prot opt in out source destination
1 44 10332 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Bu örnekte:
- Chain INPUT (gelen bağlantılar): politika DROP'tur, yani izin kuralları olanlar hariç tüm paketler varsayılan olarak engellenir.
Kural 1: ACCEPT state RELATED,ESTABLISHED - mevcut bağlantılarla ilgili veya onlarla ilişkili gelen paketlere izin verir. Bu, sunucunun giden bağlantılara (örneğin, SSH, posta, DNS sorguları) yanıtları doğru bir şekilde alması için önemlidir.
Kural 2: ACCEPT tcp dpt:22 - 22 numaralı bağlantı noktasında (SSH) yeni gelen bağlantılara izin verir.
- Chain OUTPUT (giden bağlantılar): politika DROP'tur, yani tüm giden paketler varsayılan olarak engellenir.
Kural 1: ACCEPT state RELATED,ESTABLISHED - mevcut bağlantılarla ilgili giden paketlere izin verir. Bu, sunucunun istemci isteklerine (örneğin, SSH, posta bağlantıları) yanıt vermesini ve kararlı bir bağlantı sürdürmesini sağlar.
Yani posta bağlantı noktaları için izin kurallarının olmadığını görüyoruz. Bunları eklemek için aşağıdaki komutları çalıştırın:
sudo iptables -A INPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT
Bundan sonra kuralları kaydedin:
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
CentOS/AlmaLinux/Rocky Linux:
iptables-save > /etc/sysconfig/iptables
Ardından 3. Adımda açıklandığı gibi posta bağlantı noktalarının kullanılabilirliğini tekrar test edin. Hala kullanılamıyorlarsa, 5. Adıma devam edin. Her şey yolundaysa, bu makalenin ikinci bölümüne gidin buradan.
UFW (Basitleştirilmiş Güvenlik Duvarı)
Bazı sunucularda, güvenlik duvarı yapılandırması için basitleştirilmiş bir arabirim olan iptables yerine UFW kullanılır. Temel posta sunucusu yapılandırması için uygundur ve genellikle Ubuntu ve Debian'da bulunur.
UFW'nin etkin olup olmadığını ve hangi kuralların aktif olduğunu görmek için şunu çalıştırın:
sudo ufw status verbose
Örnek çıktı:
Durum: aktif
Günlükleme: açık (düşük)
Varsayılan: reddet (gelen), izin ver (giden)
Yeni profiller: atla
Burada:
-
Varsayılan: reddet (gelen) - varsayılan olarak tüm gelen bağlantılar engellenir.
-
Varsayılan: izin ver (giden) - varsayılan olarak tüm giden bağlantılara izin verilir.
Posta sunucusunun düzgün çalışması için standart bağlantı noktalarını açmanız gerekir. Aşağıdaki komutları sırayla çalıştırın:
sudo ufw allow 25/tcp
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
Giden kısıtlamalarınız varsa, giden posta için SMTP bağlantı noktalarına izin vermeniz gerekir:
sudo ufw allow out 25/tcp
sudo ufw allow out 465/tcp
sudo ufw allow out 587/tcp
Kuralları ekledikten sonra tekrar kontrol edebilirsiniz:
sudo ufw status numbered
Numaralarla birlikte bir kural listesi göreceksiniz. Bir kuralı silmeniz gerekiyorsa, çıktıda yer alan numarayı kullanın:
sudo ufw delete 3
UFW'de kurallar otomatik olarak kaydedilir ve yeniden başlatmadan sonra da geçerli kalır.
Ardından, 3. Adımda açıklandığı gibi posta bağlantı noktalarının kullanılabilirliğini tekrar test edin. Hala kullanılamıyorlarsa, 5. Adıma devam edin. Her şey yolundaysa, bu makalenin ikinci bölümüne gidin buradan.
Adım 5. Güvenlik duvarı doğru yapılandırıldı, ancak posta bağlantı noktaları hala kullanılamıyor (isteğe bağlı)
Bu davranış, posta bağlantı noktalarının sunucunuz düzeyinde değil, barındırma sağlayıcınızın ekipmanında engellendiğini gösterir. Bu durumda, bir destek bileti oluşturun ve bu bağlantı noktalarını sunucunuz için açmalarını isteyin. Bu mümkün değilse, tek çözüm barındırma sağlayıcınızı değiştirmek olacaktır.
kodu.cloud'da posta bağlantı noktalarının çalışmasını hiçbir şekilde kısıtlamıyoruz. Kurallarımız toplu posta gönderimini yasaklar, ancak iyi niyetli müşteriler için e-posta tam olarak kullanılabilir. Bir e-posta sunucusu yapılandırmanıza bile gerek yok, çünkü tüm müşterilerimize genişletilmiş lisanslı FASTPANEL kontrol paneline ücretsiz erişim sağlanmaktadır. Kontrol paneliyle birlikte bir sunucu sipariş edin ve yalnızca birkaç dakika içinde kendi alan adınızda posta kullanmaya başlayın.
Düzgün DNS kaydı yapılandırması için sonraki adımlar bu makalenin ikinci bölümünde ele alınacaktır buradan.