วิธีการอนุญาต SMTP ขาออกบน iptables Debian Linux


13

หากฉันเลือกที่จะอนุญาตการรับส่งข้อมูลทั้งหมดใน chain ( iptables -P OUTPUT ACCEPT) ส่งทางไปรษณีย์( ) ส่งดี ทันทีที่ฉันล็อคเซิร์ฟเวอร์ของฉันด้วยกฎเหล่านี้เมลขาออกจะหยุดทำงาน ทุกอย่างทำงานได้ซึ่งแปลก

มีใครเห็นอะไรบ้างในที่นี่ที่จะป้องกันไม่ให้ส่งเมลขาออกของฉัน ฉันนิ่งงันได้ดูกฎเหล่านี้ซ้ำแล้วซ้ำอีกและลองใช้เวอร์ชั่นต่าง ๆ มากมาย

 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

คำตอบ:


18

คุณมีกฎให้ปล่อยปริมาณการเข้าชมออกมา แต่คุณไม่มีกฎให้ปล่อยปริมาณการเข้าชมกลับ

ฉันเดาว่าคุณหมายถึงให้กฎ 2 ข้อนี้ใช้-A INPUTแทน:

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

อย่างไรก็ตามการใช้พอร์ตต้นทางเป็นวิธีการอนุญาตให้รับส่งข้อมูลกลับเป็นวิธีที่ไม่ดีในการรักษาความปลอดภัยของระบบ สิ่งที่ทุกคนต้องทำคือใช้พอร์ตต้นทางเหล่านี้และชุดไฟร์วอลล์ของคุณก็ไร้ประโยชน์

แนวคิดที่ดีกว่าคือการลบ-A INPUT ... --sportกฎทั้งหมดและใช้เพียงกฎเดียวนี้แทน:

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

วิธีการทำงานของกฎนี้คือเมื่อระบบของคุณทำการเชื่อมต่อขาออกเคอร์เนลจะบันทึกการเชื่อมต่อในตารางติดตาม จากนั้นเมื่อแพ็กเก็ตจากระบบรีโมตกลับมาอีกครั้งดูเหมือนว่าแพ็กเก็ตเหล่านั้นเชื่อมโยงกับการเชื่อมต่อใด ๆ ในตารางการติดตามหรือไม่ บิตเป็นสิ่งหนึ่งที่จะช่วยให้การจราจรที่เกี่ยวข้องโดยตรงกับเซสชั่น นี่จะเป็นแพ็กเก็ต TCP ที่กลับมาในสตรีม
ESTABLISHED
RELATEDบิตให้ปริมาณข้อมูลที่เกี่ยวข้องกับการเชื่อมต่อ แต่ไม่ใช่ส่วนหนึ่งของการเชื่อมต่อเอง นี่อาจเป็นสิ่งต่างๆเช่นแพ็คเก็ต ICMP เช่น "ICMP ไม่สามารถแยกส่วน" แพ็กเก็ตเหล่านี้ไม่ได้เป็นส่วนหนึ่งของสตรีม TCP แต่มีความสำคัญอย่างยิ่งต่อการทำให้สตรีมยังคงอยู่ (ซึ่งเป็นอีกสิ่งหนึ่งที่ชุดกฎของคุณไม่ครอบคลุมและจะไม่มีปัญหาการเชื่อมต่อและการสูญเสีย)

กฎนี้ยังใช้งานได้กับการรับส่งข้อมูลของ UDP แต่เนื่องจาก UDP ไม่มีสถานะจึงไม่เหมือนกัน เคอร์เนลต้องติดตามแพ็กเก็ต UDP ที่ออกไปและเพียงสมมติว่าเมื่อแพ็กเก็ต UDP กลับมารวมกันในโฮสต์ / พอร์ตเดียวกันและอยู่ในช่วงเวลาอันสั้นซึ่งเกี่ยวข้องกัน


ขอบคุณสำหรับการตอบกลับ. ฉันคิดว่าฉันไม่ต้องการปล่อยให้ทราฟฟิกกลับมาเพราะฉันเพียงแค่ทำการเชื่อมต่อ SMTP ขาออก กำลังคิดว่าถ้าฉันเพิ่มกฎลงในห่วงโซ่การป้อนข้อมูลแล้วฉันจะอนุญาตให้ SMTP กลับมา นี่คือเว็บเซิร์ฟเวอร์ที่ต้องการเชื่อมต่อกับโฮสต์ SMTP ภายนอกเพื่อส่งจดหมาย .... ขอบคุณ!
916 เครือข่าย

หากคุณไม่ปล่อยให้ทราฟฟิกกลับมาระบบของคุณจะรับข้อความ "ใช่ฉันได้รับข้อมูลของคุณ" ทั้งหมดที่โปรโตคอล TCP และ SMTP ใช้อย่างไร
Patrick

นั่นทำให้รู้สึก ฉันเพิ่งเพิ่มกฎของคุณและใช้งานได้ทั้งหมด ฉันขอขอบคุณคำตอบ! ฉันพยายามลงคะแนน แต่บอกว่าฉันไม่มีชื่อเสียงเพียงพอ (ใหม่สำหรับ Unix StackExchange)
916 Networks

ฉันเพิ่มคำอธิบายว่ากฎนั้นทำงานอย่างไร
Patrick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.