Cách cho phép gửi đi SMTP trên iptables Debian Linux


13

Nếu tôi chọn cho phép tất cả lưu lượng truy cập trên chuỗi OUTPUT ( iptables -P OUTPUT ACCEPT) thư sẽ gửi tốt. Ngay sau khi tôi khóa máy chủ của mình với các quy tắc này, thư đi sẽ ngừng hoạt động. Tất cả những thứ khác hoạt động mặc dù, đó là lạ.

Có ai nhìn thấy bất cứ điều gì ở đây sẽ giữ cho thư gửi đi của tôi không gửi? Tôi đã bối rối, đã xem xét các quy tắc này nhiều lần và thử rất nhiều phiên bản khác nhau.

 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

Câu trả lời:


18

Bạn có một quy tắc để cho lưu lượng truy cập ra ngoài, nhưng bạn không có quy tắc để cho lưu lượng truy cập trở lại.

Tôi đoán bạn có nghĩa là 2 quy tắc này được -A INPUTthay thế:

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

Tuy nhiên, sử dụng cổng nguồn như một phương pháp cho phép lưu lượng truy cập trở lại là một cách không tốt để bảo mật hệ thống. Tất cả ai đó phải làm là sử dụng một trong những cổng nguồn này và quy tắc tường lửa của bạn trở nên vô dụng.

Một ý tưởng tốt hơn sẽ là loại bỏ tất cả các -A INPUT ... --sportquy tắc và chỉ sử dụng quy tắc duy nhất này:

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

Cách quy tắc này hoạt động là khi hệ thống của bạn tạo kết nối ra ngoài, hạt nhân ghi lại kết nối trong bảng theo dõi. Sau đó, khi các gói từ hệ thống từ xa quay trở lại, nó sẽ xem liệu các gói đó có được liên kết với bất kỳ kết nối nào trong bảng theo dõi hay không.
Các ESTABLISHEDbit là một trong đó cho phép giao thông liên quan trực tiếp đến phiên. Đây sẽ là các gói TCP trở lại trên luồng.
CácRELATEDbit cho phép lưu lượng truy cập liên quan đến kết nối, nhưng không phải là một phần của chính kết nối đó. Đây có thể là những thứ như các gói ICMP, chẳng hạn như "ICMP không thể phân đoạn". Các gói này không phải là một phần của luồng TCP, nhưng cực kỳ quan trọng để giữ cho luồng sống (đó cũng là một điều khác mà quy tắc của bạn không bao gồm, và nếu không có bạn sẽ thấy các vấn đề và mất kết nối kỳ lạ).

Quy tắc này cũng hoạt động đối với lưu lượng UDP, nhưng vì UDP không trạng thái, nên nó không hoàn toàn giống nhau. Thay vào đó, hạt nhân phải theo dõi các gói UDP đi ra ngoài và chỉ giả định rằng khi các gói UDP trở lại trên cùng một tổ hợp máy chủ / cổng và trong một khung thời gian ngắn, chúng có liên quan với nhau.


Cảm ơn vi đa trả lơi. Tôi nghĩ rằng tôi không muốn cho lưu lượng truy cập trở lại vì tôi chỉ tạo kết nối SMTP đi? Đã suy nghĩ nếu tôi thêm quy tắc vào chuỗi INPUT thì tôi sẽ cho phép SMTP trở lại. Đây là một máy chủ web chỉ cần kết nối với máy chủ SMTP bên ngoài để gửi thư .... thx!
916 Mạng

Nếu bạn không để lưu lượng truy cập quay trở lại, hệ thống của bạn sẽ nhận được tất cả các thông báo "có tôi nhận được dữ liệu của bạn" mà giao thức TCP và SMTP sử dụng như thế nào?
Patrick

Điều đó có ý nghĩa. Tôi chỉ cần thêm quy tắc của bạn và nó hoàn toàn làm việc. Tôi đánh giá cao câu trả lời! Tôi đã cố gắng bỏ phiếu nhưng nói rằng tôi không có đủ danh tiếng (mới đối với Unix StackExchange)
916 Networks

Tôi đã thêm một lời giải thích về cách hoạt động của quy tắc đó.
Patrick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.