aturan iptables untuk mengizinkan semua lalu lintas keluar yang berasal dari lokal?

11

Saya bertanya-tanya apakah seseorang dapat membantu saya dengan aturan iptables berikut:

Kami ingin mengizinkan APAPUN dan SEMUA lalu lintas yang berasal secara lokal (seperti pada, di server yang menjalankan iptables).

DNS, HTTP, dll ... semuanya. Koneksi apa pun yang diprakarsai oleh server yang menjalankan iptables harus diizinkan.

Saat ini kami pada dasarnya menggunakan kebijakan default OUTPUT, ACCEPT. Apakah ini benar? Input diblokir, jadi saya mengasumsikan ini berarti bahwa koneksi (kecuali yang kami izinkan) tidak dapat dimulai karena akan dibatalkan sebelum pihak kami dapat mencapai kebijakan OUTPUT?

Maaf, keterampilan iptables saya lemah;)

Terima kasih.

anonim-satu
sumber

Jawaban:

26

Anda perlu dua aturan untuk melakukan itu:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Beberapa catatan.

  • Aturan yang sudah ada sebelumnya yang mungkin Anda miliki mungkin sudah melakukan ini, tetapi terlihat berbeda.
  • Ini digunakan -Iuntuk memaksa aturan ini menjadi yang pertama. iptablesaturan dievaluasi dari atas ke bawah.
  • The -odan -ibendera berarti "keluar" dan "dalam" masing-masing. Ganti eth0dengan nama antarmuka ethernet yang tepat.
bahamat
sumber
kami memiliki keduanya :) saya gagal menyebutkan yang ke-2 karena seperti saya katakan ... keterampilan iptables saya adalah saus yang lemah. terima kasih atas klarifikasi :)
anonim-satu
2
-d 0.0.0.0/0berlebihan dan tidak diperlukan.
zapstar
Jawaban yang bagus Tapi sekarang saya bisa melakukan ping server, dan saya tidak mengerti mengapa. Bisakah Anda jelaskan?
Daniel
@Aniel Karena jika Anda hanya mengizinkan lalu lintas keluar, maka balasan ping akan dijatuhkan oleh filter paket ketika mencapai host Anda. Untuk mencegah hal ini, Anda juga harus mengizinkan lalu lintas masuk yang dikaitkan dengan sesi yang sama dengan, atau terkait dengan, lalu lintas keluar apa pun. Dengan kata lain, karena balasan ping terkait dengan permintaan ping, itu harus diizinkan. Jika ada permintaan ping masuk dan tidak ada ping keluar yang tercatat di tabel sesi maka paket yang masuk akan turun. Harapan itu masuk akal!
bahamat
@ Bahahamat: Setelah saya coba lagi, saya menemukan saya harus mengizinkan lalu lintas icmp secara eksplisit. Dan saya berbicara tentang bisa melakukan ping server, di mana saya menerapkan aturan di atas. Tidak dapat mereproduksinya, mungkin saya membuat kesalahan di suatu tempat. Bagaimanapun, terima kasih.
Daniel
0

Saat ini kami pada dasarnya menggunakan kebijakan default OUTPUT, ACCEPT.

Itu cukup untuk OUTPUT karena Netfilter tidak memerlukan aturan khusus untuk memulai pelacakan koneksi stateful.

Tetapi jika Anda ingin menyaring lalu lintas masuk sesuai dengan kebijakan " default deny " itu dapat dilakukan dengan beralih- INPUTrantai ke DROP:iptables -P INPUT DROP

Setelah itu semua akan ditetapkan hanya dengan 2 aturan :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Perhatikan aturan yang mengizinkan lalu lintas input pada antarmuka loopback - seperti yang saya tunjukkan dalam posting blog saya " Minimal firewall untuk pengguna akhir ", kecuali diizinkan secara eksplisit, lalu lintas loopback tidak akan ditangani oleh pengecekan keadaan "mapan", dibandingkan dengan mengembalikan lalu lintas berakhir, misalnya eth0,.

Untuk memastikan aturan minimum ini dimuat " sebagaimana adanya " tanpa mengganggu aturan yang mungkin sudah ada, lebih mudah untuk memanfaatkannya iptables-restoredalam sesi SHELL:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

Sebelum melakukan itu pastikan Anda tidak akan memotong koneksi jaringan Anda sendiri 1 , meskipun sesi SSH yang sudah dibuka harus terus bekerja secara normal, upaya untuk membuka yang baru tidak akan berfungsi.

__

  1. Tentu saja Anda dapat menambahkan aturan lain untuk mengizinkan koneksi seperti itu. Ini bisa sesederhana hanya -A INPUT -j ACCEPT -p tcp --dport 22- tidak perlu bermain-main di -m statesini. Juga jangan lupa untuk memperbaiki lptables-restorekembali iptables-restoresebelum mencobanya;)
poige
sumber