Cara Mengijinkan SMTP Keluar di iptables Debian Linux

13

Jika saya memilih untuk mengizinkan semua lalu lintas pada rantai OUTPUT ( iptables -P OUTPUT ACCEPT) surat akan dikirim dengan baik. Segera setelah saya mengunci server saya dengan aturan-aturan ini, surat keluar berhenti berfungsi. Semua yang lain bekerja, yang aneh.

Adakah yang melihat sesuatu di sini yang akan mencegah pengiriman surat keluar saya? Saya bingung, telah melihat aturan ini berulang-ulang dan mencoba banyak versi yang berbeda.

 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
916 Jaringan
sumber

Jawaban:

18

Anda memiliki aturan untuk membiarkan lalu lintas keluar, tetapi Anda tidak memiliki aturan untuk membiarkan lalu lintas masuk.

Saya menduga Anda dimaksudkan untuk 2 aturan ini sebagai -A INPUTgantinya:

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

Namun menggunakan port sumber sebagai metode yang memungkinkan lalu lintas masuk adalah cara yang buruk untuk mengamankan sistem. Yang harus dilakukan seseorang hanyalah menggunakan salah satu port sumber ini dan aturan firewall Anda menjadi tidak berguna.

Ide yang jauh lebih baik adalah menghapus semua -A INPUT ... --sportaturan dan hanya menggunakan aturan tunggal ini sebagai gantinya:

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

Cara aturan ini bekerja adalah ketika sistem Anda membuat koneksi keluar, kernel mencatat koneksi dalam tabel pelacakan. Kemudian ketika paket-paket dari sistem jarak jauh kembali, tampak untuk melihat apakah paket-paket itu dikaitkan dengan koneksi apa pun di tabel pelacakan.
The ESTABLISHEDbit adalah salah satu yang memungkinkan lalu lintas yang berhubungan langsung dengan sesi. Ini akan menjadi paket TCP yang akan kembali ke aliran.
ItuRELATEDbit memungkinkan lalu lintas yang terkait dengan koneksi, tetapi bukan bagian dari koneksi itu sendiri, melaluinya. Ini dapat berupa hal-hal seperti paket ICMP, seperti "ICMP tidak dapat fragmen". Paket-paket ini bukan bagian dari aliran TCP, tetapi sangat penting untuk menjaga aliran tetap hidup (yang juga merupakan hal lain yang tidak diatur oleh aturan Anda, dan tanpanya Anda akan melihat masalah dan kehilangan koneksi yang aneh).

Aturan ini juga berfungsi untuk lalu lintas UDP, tetapi karena UDP tidak memiliki kewarganegaraan, itu tidak persis sama. Sebaliknya kernel harus melacak paket UDP yang keluar, dan hanya berasumsi bahwa ketika paket UDP kembali pada kombinasi host / port yang sama, dan itu dalam jangka waktu singkat, bahwa mereka terkait.

Patrick
sumber
Terima kasih balasannya. Saya pikir saya tidak ingin membiarkan lalu lintas kembali karena saya hanya membuat koneksi SMTP keluar? Berpikir jika saya menambahkan aturan ke rantai INPUT maka saya akan mengizinkan SMTP kembali. Ini adalah server web yang hanya perlu terhubung ke host SMTP eksternal untuk mengirim email .... thx!
916 Networks
Jika Anda tidak membiarkan lalu lintas kembali, bagaimana sistem Anda akan menerima semua pesan "ya saya punya data" yang digunakan protokol TCP dan SMTP?
Patrick
Itu masuk akal. Saya baru saja menambahkan aturan Anda dan itu benar-benar berfungsi. Saya menghargai jawabannya! Saya mencoba memilih tetapi mengatakan saya tidak memiliki reputasi yang cukup (baru di Unix StackExchange)
916 Networks
Saya menambahkan penjelasan tentang bagaimana aturan itu bekerja.
Patrick