İptables Debian Linux için Giden SMTP'ye İzin Verme


13

ÇIKIŞ zinciri ( iptables -P OUTPUT ACCEPT) üzerindeki tüm trafiğe izin vermeyi seçersem posta gönderir. Sunucumu bu kurallarla kilitler kilitlemez, giden postaların çalışması durur. Her şey olsa işe yarıyor, bu garip.

Burada giden postalarımın gönderilmesini engelleyecek bir şey gören var mı? Yorgunum, bu kurallara defalarca baktım ve birçok farklı sürümü denedim.

 iptables -F
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT DROP


 iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT  -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

 iptables -A OUTPUT -p udp  --dport 53 -j ACCEPT
 iptables -A INPUT -p udp  --sport 53 -j ACCEPT

 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT


 iptables -N LOGGING
 iptables -A INPUT -j LOGGING
 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
 iptables -A LOGGING -j DROP

Yanıtlar:


18

Trafiği dışarıda bırakmak için bir kuralınız var, ancak dönüş trafiğini içeri almak için bir kuralınız yok.

Sanırım bu 2 kuralın -A INPUTyerine geçmeyi planladınız :

iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

Ancak, kaynak bağlantı noktasını dönüş trafiğine izin verme yöntemi olarak kullanmak, sistemi güvenli hale getirmenin kötü bir yoludur. Birinin tek yapması gereken bu kaynak bağlantı noktalarından birini kullanmaktır ve güvenlik duvarı kural kümeniz işe yaramaz hale gelir.

Daha iyi bir fikir, tüm -A INPUT ... --sportkuralları kaldırmak ve bunun yerine sadece bu tek kuralı kullanmak olacaktır:

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Bu kuralın çalışması, sisteminiz giden bir bağlantı kurduğunda, çekirdeğin bağlantıyı bir izleme tablosuna kaydetmesidir. Ardından, uzak sistemden gelen paketler geri geldiğinde, bu paketlerin izleme tablosundaki herhangi bir bağlantıyla ilişkilendirilip ilişkilendirilmediğine bakar. Bit doğrudan oturuma ilişkin trafiğe izin biridir. Bu akışa geri gelen TCP paketleri olacaktır.
ESTABLISHED
RELATEDbit, bağlantıyla ilgili olan, ancak bağlantının bir parçası olmayan trafiğe izin verir. Bu, "ICMP parçalanamaz" gibi ICMP paketleri gibi şeyler olabilir. Bu paketler TCP akışının bir parçası değildir, ancak akışı canlı tutmak için hayati öneme sahiptir (bu da kural kümenizin kapsamadığı başka bir şeydir ve bunlar olmadan garip bağlantı sorunları ve kaybı göreceksiniz).

Bu kural UDP trafiği için de geçerlidir, ancak UDP vatansız olduğu için aynı değildir. Bunun yerine, çekirdek dışarı çıkan UDP paketlerini takip etmek zorundadır ve UDP paketlerinin aynı ana bilgisayar / bağlantı noktası birleşimine geri döndüğünde ve kısa bir süre içinde ilişkili olduklarını varsayar.


Cevap için teşekkürler. Sanırım trafiği geri almak istemiyorum çünkü sadece giden bir SMTP bağlantısı yapıyorum? Eğer INPUT zincirine kural eklediysem SMTP'ye geri dönmeye izin veriyordum. Bu sadece posta göndermek için harici bir SMTP ana bilgisayara bağlanması gereken bir web sunucusudur .... thx!
916 Networks

Dönüş trafiğinin tekrar girmesine izin vermezseniz, sisteminiz TCP ve SMTP protokollerinin kullandığı tüm "evet verilerinizi aldım" mesajlarını nasıl alacaktır?
Patrick

Mantıklı. Kuralını yeni ekledim ve tamamen işe yaradı. Cevabı takdir ediyorum! Oy vermeye çalıştım ama yeterli itibarım yok diyor (Unix StackExchange için yeni)
916 Networks

Bu kuralın nasıl çalıştığına dair bir açıklama ekledim.
Patrick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.