Bisakah Anda merekomendasikan pengantar yang bagus untuk iptables? [Tutup]


15

Saya harus mengatur firewall pada server Linux (semua pengalaman saya sebelumnya adalah dengan Windows). Aturan saya dimaksudkan untuk menjadi sangat sederhana - melarang semua, izinkan beberapa port dengan semua, izinkan beberapa port untuk subnet IP tertentu, sementara jaringannya kecil tetapi kompleks (setiap host memiliki IP setidaknya dalam 2 192.168 ... jaring, semua orang bisa interkoneksi berbagai cara). Saya pikir menggunakan pembungkus iptables dapat membuat sistem terlalu rumit memperkenalkan banyak entitas yang tidak perlu dan akan lebih baik untuk membuatnya tetap sederhana dan menggunakan iptables secara langsung.

Bisakah Anda merekomendasikan pengantar cepat yang bagus tentang cara menulis aturan iptables?

Jawaban:


26

Tautan ke dokumentasi resmi dan yang direkomendasikan ada di situs Web Netfilter.

Ini bukan subjek baru, sumber daya tidak terbatas .

Kebanyakan perintah dasar cukup intuitif dan dapat dengan mudah menjadi referensi ke halaman manual .

netfilter, yang merupakan teknologi tingkat kernel yang memungkinkan penyaringan paket, cukup maju. Ada tabel tambahan yang bisa memotong paket, menerjemahkan paket, dan sebaliknya mempengaruhi perutean. The iptablesutilitas adalah alat userland untuk berinteraksi dengan netfilter. Jika Anda ingin mempelajari tentang fungsionalitas tingkat lanjut, saya sarankan Anda merujuk dokumentasi yang disebutkan di atas. Untuk pengantar fungsionalitas dasar, silakan baca lebih lanjut.

Untuk membuat daftar semua aturan yang ada:

iptables -L -n

-n mencegah iptables dari penyelesaian ips, yang menghasilkan output lebih cepat.

Tabel default adalah filtertabel, yang digunakan untuk menerapkan aturan firewall dasar ke tiga rantai. Tiga rantai default di filtermeja yang INPUT, OUTPUT, dan FORWARD.

Rantai sebagian besar cukup jelas. Rantai INPUT memengaruhi paket yang masuk, rantai OUTPUT memengaruhi paket yang dibuat secara lokal, dan akhirnya FORWARD untuk semua paket yang merutekan melalui sistem.

Di antara target yang bisa Anda tentukan, Anda bisa DROPpaket, artinya abaikan saja dan tidak merespons. Anda dapat REJECTpaket, di mana respons icmp akan dikirim ke sumber penolakan. Akhirnya, Anda bisa ACCEPT, yang memungkinkan paket untuk melanjutkan routing.

Seringkali dengan firewall eksternal menghadap ke pilihan default akan DROPbertentangan REJECT, karena mengurangi jejak jaringan Anda di Internet. Misalnya, IP yang membatasi layanan untuk host tertentu akan memiliki visibilitas yang lebih rendah DROP.

Catatan, -Aberarti ditambahkan ke akhir rantai. Jika Anda ingin memasukkan ke atas, Anda dapat menggunakan -I. Semua aturan diproses dari atas ke bawah. -Duntuk dihapus.

Untuk DROPpaket masuk yang berasal dari 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Ini melompat ke DROPtarget untuk semua protokol yang berasal dari IP itu.

Menerima:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Untuk mencegah akses ke IP itu dari server atau jaringan lokal Anda:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Anda dapat menentukan -pprotokol, -ssumber paket, -dtujuan paket, port tujuan --dport, port sumber --sport, dan banyak flag lainnya yang akan mempengaruhi bagaimana paket diperlakukan oleh aturan.

Jika INPUTkebijakan default Anda adalah DROPdan Anda ingin mengizinkan semua orang di 192.168.123.0/24subnet untuk mengakses SSH di server Anda, berikut adalah contohnya:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Itu benar, Anda dapat menggunakan notasi CIDR juga!

Secara umum, kebijakan default terbaik adalah DROPuntuk semua rantai. Setiap rantai memiliki kebijakan default, yang ditentukan oleh -Pbendera. Meskipun kebijakan Anda disetel ke default DROP, masih disarankan untuk memiliki entri akhir dalam rantai untuk menjadi DROPjuga.

Misalnya, untuk mengubah kebijakan ke DROPrantai INPUT, FORWARD, dan OUTPUT:

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

Hati-hati , jika Anda menetapkan kebijakan default DROP untuk INPUT pada sistem jarak jauh tanpa terlebih dahulu mengizinkan diri Anda mengakses SSH, Anda dapat mencegah diri Anda mengakses sistem. Jika pada sistem jarak jauh, Anda bisa menentukan crontab sementara untuk menghapus semua aturan setiap 5 menit sebagai failafe.

Untuk menghapus semua aturan dan mengizinkan semua lalu lintas:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Catatan, -Xhapus semua rantai yang dibuat. -Fsiram semua aturan.

Ada alat asli untuk menyimpan dan mengembalikan aturan. Khususnya, iptables-savedan iptables-restore. Sebagian besar distribusi Linux modern memiliki savedan restoreberfungsi dalam file init iptables yang disediakan dengan sistem.

Ada praktik terbaik firewall lainnya, seperti menjatuhkan paket yang salah bentuk dan jenis lalu lintas yang tidak diinginkan lainnya. Ini adalah salah satu keuntungan menggunakan utilitas ujung depan seperti Shorewall , karena akan menerapkan banyak kebijakan ini secara default. Namun demikian, saya setuju dengan pendekatan Anda dan lebih memilih untuk mempertahankan aturan saya sendiri secara langsung juga, dan praktik terbaik yang sama ini dapat diterapkan tanpa ujung depan.


2
Baru saja menemukan jawaban ini sambil mencari beberapa barang iptables acak di sini (saya mencari SF / SO sebelum Google lagi!), Dan jawaban yang sangat terperinci ini tampaknya lebih pantas mendapatkan cinta pemilih, jadi saya memberikannya!
Andrew Barber

+1 jawaban yang bagus. Saya akan menyebutkan Debian WIKI juga.
michal.kreuzman


1

Saya menemukan https://help.ubuntu.com/community/IptablesHowTo membantu baru-baru ini. Saya tidak berpikir apa-apa di sana terutama Ubuntu-spesifik.


Saya menggunakan Arch di laptop saya, tetapi Ubuntu Lucid Server adalah tugas yang tepat untuk diatur. Jadi ini bisa di tangan jika tidak usang (ini membahas Ubuntu 8.04 sejauh yang saya bisa lihat).
Ivan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.