Ini adalah diusulkan Canonical Pertanyaan tentang pemahaman dan debugging firewall perangkat lunak pada sistem Linux.
Menanggapi jawaban EEAA dan komentar @ Shog bahwa kita memerlukan Tanya Jawab kanonik yang sesuai untuk menutup pertanyaan umum yang relatif sederhana tentang iptables.
Apa metode terstruktur untuk men-debug masalah dengan firewall perangkat lunak Linux, kerangka penyaringan paket netfilter , yang biasa disebut oleh iptables antarmuka pengguna ?
Apa jebakan yang umum, pertanyaan berulang dan hal-hal sederhana atau sedikit lebih tidak jelas untuk memeriksa bahwa administrator firewall sesekali mungkin mengabaikan atau mendapat manfaat dari mengetahui?
Bahkan ketika Anda menggunakan perkakas seperti UFW , FirewallD (alias firewall-cmd
), Shorewall atau sejenisnya, Anda mungkin mendapat manfaat dari mencari di bawah tenda tanpa lapisan abstraksi yang ditawarkan alat tersebut.
Pertanyaan ini tidak dimaksudkan sebagai How-To untuk membangun firewall: periksa dokumentasi produk untuk itu dan misalnya berkontribusi resep untuk iptables Trips & Trik atau cari tagged iptables ufw firewalld firewall-cmd pertanyaan untuk skor tinggi yang sering ada dan dihargai dengan baik Tanya Jawab.
net.netfilter.nf_conntrack_log_invalid
ke 255 akan menangkap paket tidak valid dengan cukup baik yang dapat membantu jika itu adalah bagian dari netfilter yang menghasilkan perilaku buruk.Jawaban:
Secara umum:
Melihat dan memodifikasi konfigurasi firewall memerlukan hak administrator (
root
) seperti halnya membuka layanan dalam kisaran nomor port terbatas. Itu berarti bahwa Anda harus masuk sebagairoot
atau gunakan alternatifsudo
untuk menjalankan perintah sebagai root. Saya akan mencoba menandai perintah tersebut dengan opsional[sudo]
.Isi:
-I
dan-A
iptables -L -v -n
1. Urutan masalah atau perbedaan antara
-I
dan-A
Yang perlu diingat adalah bahwa aturan firewall diperiksa dalam urutan yang terdaftar. Kernel akan berhenti memproses rantai ketika sebuah aturan dipicu yang akan mengizinkan atau menonaktifkan paket atau koneksi.
Saya pikir kesalahan paling umum untuk administrator firewall pemula adalah mereka mengikuti instruksi yang benar untuk membuka port baru, seperti yang di bawah ini:
dan kemudian menemukan bahwa itu tidak akan berpengaruh.
Alasan untuk itu adalah bahwa
-A
opsi menambahkan aturan baru, setelah semua aturan yang ada dan karena sangat sering aturan akhir dalam firewall yang ada adalah yang memblokir semua lalu lintas yang tidak diperbolehkan secara eksplisit, menghasilkanAtau setara dengan iptables-save:
dan aturan baru yang membuka port TCP 8080 tidak akan pernah tercapai. (seperti yang dibuktikan oleh penghitung yang tetap membandel pada 0 paket dan nol byte).
Dengan menyisipkan aturan dengan aturan
-I
baru akan menjadi yang pertama dalam rantai dan akan berfungsi.2. Tampilkan konfigurasi firewall saat ini
Rekomendasi saya untuk administrator firewall adalah untuk melihat konfigurasi aktual yang dijalankan kernel Linux, daripada mencoba mendiagnosis masalah firewall dari alat yang ramah pengguna. Seringkali sekali Anda memahami masalah mendasar Anda dapat dengan mudah menyelesaikannya dalam masalah yang didukung oleh alat-alat itu.
Perintahnya
[sudo] iptables -L -v -n
adalah teman Anda (walaupun beberapa orangiptables-save
lebih suka ). Seringkali ketika membahas konfigurasi, berguna untuk menggunakan--line-numbers
opsi juga untuk nomor baris. Merujuk ke aturan #X membuat mendiskusikannya agak lebih mudah.Catatan: Aturan NAT termasuk dalam
iptables-save
output tetapi harus terdaftar secara terpisah dengan menambahkan-t nat
opsi yaitu[sudo] iptables -L -v -n -t nat --line-numbers
,.Menjalankan perintah beberapa kali dan memeriksa penghitung yang bertambah dapat menjadi alat yang berguna untuk melihat apakah aturan baru benar-benar dipicu.
Atau output dari
iptables-save
memberikan skrip yang dapat membuat ulang konfigurasi firewall di atas:Ini adalah masalah preferensi yang menurut Anda akan lebih mudah dipahami.
3. Menafsirkan ouput dari
iptables -L -v -n
The Kebijakan menetapkan tindakan default menggunakan rantai ketika ada aturan eksplisit pertandingan. Dalam
INPUT
rantai yang diatur untuk MENERIMA semua lalu lintas.Aturan pertama dalam rantai INPUT adalah aturan yang menarik, mengirimkan semua lalu lintas (sumber 0.0.0.0/0 dan tujuan 0.0.0.0/0) yang ditujukan untuk port TCP 22 (
tcp dpt:22
) port default untuk SSH ke target kustom (fail2ban-SSH
) . Seperti namanya menunjukkan aturan ini dikelola oleh fail2ban (produk keamanan yang antara lain memindai file log sistem untuk kemungkinan penyalahgunaan dan memblokir alamat IP dari pelaku).Aturan itu akan dibuat oleh commandline iptables yang mirip
iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
atau ditemukan di output iptables-save as-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
. Seringkali Anda akan menemukan salah satu dari notasi tersebut dalam dokumentasi.Penghitung menunjukkan bahwa aturan ini telah cocok dengan 784'000 paket dan 65 Megabita data.
Lalu lintas yang cocok dengan aturan pertama ini kemudian diproses oleh
fail2ban-SSH
rantai yang, sebagai rantai non-standar, terdaftar di bawah rantai OUTPUT.Rantai itu terdiri dari dua aturan, satu untuk setiap pelaku (sumber ip-address 117.253.221.166 atau 58.218.211.166) yang diblokir (dengan a
reject-with icm-port-unreachable
).Paket SSH yang bukan berasal dari host yang diblokir belum diizinkan atau tidak diizinkan dan akan sekarang setelah rantai kustom selesai akan diperiksa berdasarkan aturan kedua dalam rantai INPUT.
Semua paket yang tidak diperuntukkan untuk port 22 melewati aturan pertama dalam rantai INPUT dan juga akan dievaluasi dalam aturan INPUT # 2.
Aturan INPUT nomor 2 membuat ini dimaksudkan sebagai firewall statefull , yang melacak koneksi. Itu memiliki beberapa keuntungan, hanya paket-paket untuk koneksi baru yang perlu diperiksa terhadap aturan-set lengkap, tetapi begitu paket-paket tambahan yang dimiliki oleh koneksi yang dibuat atau yang terkait diterima tanpa pengecekan lebih lanjut.
Aturan input # 2 cocok dengan semua koneksi dan paket yang terbuka dan terkait yang cocok dengan aturan itu tidak perlu dievaluasi lebih lanjut.
Catatan: perubahan aturan dalam konfigurasi firewall stateful hanya akan berdampak pada koneksi baru, bukan koneksi yang dibuat.
Sebaliknya, filter paket sederhana menguji setiap paket terhadap aturan-penuh, tanpa melacak status koneksi. Dalam firewall seperti itu tidak ada kata kunci negara yang akan digunakan.
Aturan INPUT # 3 cukup membosankan, semua lalu lintas yang terhubung ke
lo
antarmuka loopback ( atau 127.0.0.1) diperbolehkan.Aturan INPUT 4, 5 dan 6 digunakan untuk membuka port TCP 22, 80 dan 443 (port default untuk resp. SSH, HTTP, dan HTTPS) dengan memberikan akses ke koneksi BARU (koneksi yang ada sudah diizinkan oleh aturan INPUT 2).
Dalam firewall stateless aturan-aturan itu akan muncul tanpa atribut negara:
atau
Aturan INPUT terakhir, # 7 adalah aturan yang memblokir semua lalu lintas yang TIDAK diberikan akses dalam aturan INPUT 1-7. Konvensi yang cukup umum: semua yang tidak diizinkan ditolak. Secara teori aturan ini bisa dihilangkan dengan menetapkan KEBIJAKAN standar untuk MENOLAK.
Selidiki selalu seluruh rantai.
4. Kenali lingkungan Anda
4.1. Pengaturan dalam firewall perangkat lunak tidak akan memengaruhi pengaturan keamanan yang dipelihara di tempat lain dalam jaringan, yaitu meskipun membuka layanan jaringan dengan
iptables
daftar kontrol akses yang tidak dimodifikasi pada router atau firewall lain di jaringan Anda mungkin masih memblokir lalu lintas ...4.2. Ketika tidak ada layanan yang mendengarkan Anda tidak akan dapat terhubung dan mendapatkan koneksi yang ditolak kesalahan , terlepas dari pengaturan firewall. Karena itu:
[sudo] netstat -plnut
atau gunakan secara alternatifss -tnlp
.[sudo] nc -l -p 123
atauopenssl s_server -accept 1234 [options]
jika Anda memerlukan pendengar TLS / SSL (centangman s_server
opsi).telnet <IP of Server> 123
atauecho "Hello" | nc <IP of Server> 123
atau saat menguji layanan aman TLS / SSLopenssl s_client -connect <IP of Server>:1234
, sebelum mencoba yang sama dari host jarak jauh.4.3. Pahami protokol yang digunakan oleh layanan Anda. Anda tidak dapat mengaktifkan / menonaktifkan layanan yang tidak Anda mengerti. Contohnya:
/etc/services
tidak harus sesuai dengan layanan aktual menggunakan port.4.4. Filter paket kernel bukan satu-satunya hal yang dapat membatasi konektivitas jaringan:
getenforce
akan mengkonfirmasi jika SELinux sedang berjalan.ldd /path/to/service |grep libwrap
dan/hosts.[allow|deny]
file kontrol.5.
INPUT
atauFORWARD
RantaiKonsep rantai dijelaskan secara lebih menyeluruh di sini, tetapi singkatnya adalah:
The
INPUT
chain adalah di mana Anda membuka dan / atau port jaringan dekat untuk layanan yang berjalan secara lokal, pada host mana Anda mengeluarkan perintah iptables.The
FORWARD
chain adalah di mana Anda menerapkan aturan lalu lintas filter yang akan diteruskan oleh kernel untuk sistem lain, sistem yang sebenarnya, tetapi juga wadah Docker dan Virtual Server tamu server ketika mesin Linux Anda bertindak sebagai jembatan, router, hypervisor dan / atau tidak alamat jaringan terjemahan dan penerusan porta.Kesalahpahaman yang umum adalah bahwa karena wadah buruh pelabuhan atau tamu KVM berjalan secara lokal, aturan filter yang berlaku harus dalam rantai INPUT, tetapi biasanya tidak demikian.
6. Modul kernel
Karena filter paket berjalan dalam kernel Linux, ia juga dapat dikompilasi sebagai modul dinamis, beberapa modul sebenarnya. Sebagian besar distribusi menyertakan netfilter sebagai modul dan modul netfilter yang diperlukan akan dimuat ke dalam kernel sesuai kebutuhan, tetapi untuk beberapa modul administrator firewall perlu secara manual memastikan mereka dimuat. Ini terutama menyangkut modul pelacakan koneksi, seperti
nf_conntrack_ftp
yang dapat dimuatinsmod
.Modul yang saat ini dimuat ke kernel yang berjalan dapat ditampilkan dengan
lsmod
.Metode untuk memastikan modul dimuat terus-menerus di seluruh reboot tergantung pada distribusi Linux.
sumber
watch --difference -n 1 iptables -L FORWARD -v -n
. Membiarkan alat secara berkala menjalankan perintah dan menyoroti perubahan membuatnya jauh lebih mudah.iptables-save
output (lebih disukai dengan-c
) setiap kali selamaiptables -L
output yang ditakuti (dengan berbagai argumen) ini.Masalah umum dengan protokol yang berbeda
DNS: DNS menggunakan port 53 UDP secara default, tetapi pesan yang tidak sesuai dengan datagram UDP tunggal akan ditransmisikan menggunakan TCP sebagai gantinya (biasanya transfer zona dan semacamnya) yang membutuhkan port 53 TCP untuk dibuka juga ketika Anda menjalankan server nama .
Email: Banyak ISP pelanggan memblokir lalu lintas SMTP (atau setidaknya port default TCP 25), sehingga tidak mungkin untuk langsung menerima atau mengirim email dan pelanggan mereka terpaksa menggunakan relai SMTP ISP untuk semua email keluar dan kadang-kadang untuk email masuk juga . Berkaitan dengan §1.1.
FTP: FTP adalah protokol aneh dalam hal dua koneksi digunakan. Yang pertama adalah koneksi kontrol, secara default server FTP akan mendengarkan pada port TCP 21 untuk itu. Koneksi kontrol digunakan untuk otentikasi dan mengeluarkan perintah. Transfer file aktual dan hal-hal seperti output dari daftar direktori pergi melalui koneksi TCP kedua, koneksi DATA. Dalam FTP aktif, koneksi DATA akan dimulai dari server FTP dari port TCP 20 dan terhubung ke klien FTP. FTP aktif tidak bekerja dengan baik dengan pengguna di balik firewall dan gateway NAT sehingga sebagian besar tidak digunakan. Sebagian besar server FTP mendukung FTP Pasif. Dengan FTP Pasif, server FTP membuka pendengar untuk koneksi DATA pada port kedua, yang kemudian disambungkan oleh klien FTP. Masalah untuk firewall adalah bahwa port DATA dapat berupa port yang tidak tersedia di antara 1024-65536.
Dalam firewall stateless yang biasanya diselesaikan dengan membatasi jumlah port pasif yang dapat diberikan oleh server FTP dan kemudian secara eksplisit membuka port tersebut. yaitu
Dalam firewall stateful Anda tidak perlu secara eksplisit membuka port DATA, modul netfilter helper akan mengenali port dinamis yang ditugaskan dan secara dinamis membuka port itu untuk klien yang benar dengan menandai koneksi DATA sebagai
RELATED
setelah itu akan cocok dengan aturan umum :Ini mensyaratkan bahwa modul kernel yang benar dimuat, dalam kasus FTP secara manual dengan menjalankan misalnya
insmod nf_conntrack_ftp
, membuat persisten bergantung pada reboot tergantung pada distribusi.Catatan: Modul pelacakan koneksi FTP akan gagal ketika FTP digunakan dengan SSL, karena koneksi kontrol akan dienkripsi dan nf_conntrack_ftp tidak akan dapat membaca lagi jawaban PASV.
NFS dan layanan RPC serupa : Masalah dengan layanan RPC adalah bahwa secara desain mereka tidak menggunakan port tetap tertentu. Mereka dapat memilih port yang tersedia secara acak, yang kemudian akan didaftarkan dengan daemon RPC Portmap. Klien yang mencoba terhubung akan menanyakan daemon Portmap dan kemudian terhubung langsung ke port yang benar. Itu memecahkan masalah kehabisan port yang dipesan ...
Dari perspektif firewall, port TCP / UDP 111 perlu dibuka dan port aktual yang saat ini digunakan layanan RPC. Masalah membuka port acak di firewall biasanya diselesaikan dengan membatasi layanan RPC, seperti server NFS, untuk menggunakan port tetap yang sudah ditentukan sebelumnya.
sumber
"Pengenalan" Iptables / Firewall
Firewall pada dasarnya adalah filter jaringan berbasis kebijakan. Firewall Linux dibangun di sekitar Netfilter; kerangka kerja pemrosesan paket jaringan kernel yang terbuat dari beberapa modul kernel yang melakukan tugas tertentu:
Pengguna mengkonfigurasi kerangka Netfilter agar sesuai dengan kebutuhan firewall mereka menggunakan iptables dari baris perintah. Dengan iptables kami mendefinisikan aturan yang memerintahkan kernel apa yang harus dilakukan dengan paket IP ketika mereka masuk, melewati, atau meninggalkan kotak Linux kami. Setiap proses utama Netfilter diwakili oleh TABEL (FILTER, NAT, MANGLE) pada istilah iptables. Mereka memiliki beberapa titik kait spesifik pada peta aliran paket jaringan di mana mereka dipanggil oleh kernel untuk melakukan tugas mereka. Urutan panggilan TABEL tertentu yang secara khusus ditempatkan secara umum disebut RANTAI internal yang menerima nama-nama PEMASANGAN, INPUT, MAJU, OUTPUT, dan POSTROUTING. Sangat mudah untuk diingat jika kita mengaitkan TABEL dengan "jenis proses" dan RANTAI dengan "lokasi" pada peta aliran paket jaringan di mana instance dari proses tersebut dipanggil.
Karena paket IP diterima pada antarmuka jaringan, atau dibuat oleh proses lokal, sampai akhirnya dikirimkan atau dibuang, mesin Netfilter akan secara berurutan menguji dan menerapkan aturan yang terkandung di sepanjang peta aliran paket jaringan. Di setiap blok yang diidentifikasi oleh pasangan TABLE @ CHAIN, pengguna dapat menambahkan satu atau lebih aturan berturut-turut yang berisi kriteria pencocokan paket IP dan tindakan yang sesuai. Ada tindakan (yaitu MENERIMA, DROP, dll.) Yang dapat dilakukan oleh lebih dari satu TABEL dan tindakan lainnya (yaitu SNAT, DNAT, dll.) Yang spesifik TABEL.
yaitu ketika paket IP tiba dari antarmuka jaringan, paket itu pertama kali diproses oleh rantai PREROUTING yang menerapkan aturan tabel yang didefinisikan pengguna MANGLE jika ada. Jika tidak ada aturan yang cocok dengan paket saat ini, tindakan standar MANGLE @ PREROUTING atau "kebijakan" yang sesuai berlaku. Pada titik ini jika paket tidak dijatuhkan, proses akan berlanjut sekarang dengan menerapkan aturan tabel NAT pada rantai PREROUTING (lihat peta) dan seterusnya. Untuk memfasilitasi tata letak aturan, pengguna juga dapat membuat rantai kustom mereka sendiri dan "melompat" ke dalamnya dari berbagai titik peta sesuai keinginan.
Sementara rantai bawaan dapat memiliki kebijakan yang ditetapkan pengguna baik paket ACCEPT atau DROP, rantai yang ditetapkan pengguna memiliki semua kebijakan RETURN default yang tidak dapat diubah kepada penelepon untuk melanjutkan proses.
Perintah Iptables
Perintah utama iptables mengisi peta aliran paket jaringan dengan aturan pemrosesan yang diperlukan.
Aturan iptables generik dapat ditulis sebagai:
# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>
Itu bisa dibaca seperti:
Perintah bantu iptables melengkapi skenario pengaturan conditoins default, daftar aturan, aturan pembilasan, dll.
Iptables memuat perintah kami ke mesin Netfilter saat runtime, Netfilter secara langsung menegakkan aturan dan pengaturan yang dimuat tetapi tidak tahan. Setelah me-reboot semua aturan dan pengaturan Netfilter yang sebelumnya dimuat akan hilang. Untuk alasan ini ada utilitas iptables yang memungkinkan untuk menyimpan set aturan yang sedang aktif ke file dan memuatnya kembali nanti.
Ringkasan Iptables
Netfilter adalah kerangka kerja yang sangat fleksibel dan kuat tetapi ada harga yang harus dibayar; Iptables itu kompleks. Dari sudut pandang pengguna istilah-istilah tertentu seperti TABLE, CHAIN, TARGET tidak benar-benar cocok dengan konsep yang mereka wakili dan tidak masuk akal pada awalnya. Topiknya panjang, perintah tampaknya memiliki daftar parameter yang tidak ada habisnya. Untuk memperburuk keadaan, tidak ada satu buku pun yang benar-benar menguasai Iptables. Sebagian besar terbagi dalam dua kategori: "buku resep" atau "buku pedoman". Saya pikir pengantar ini memberi Anda snapshot dari lanskap Netfilter / Iptables ditambah dosis yang diperlukan dari hal-hal halaman pra-dicerna. Jika Anda baru di iptables, setelah membaca paragraf ini beberapa kali Anda akan siap untuk membaca contoh iptables. Dengan beberapa latihan, Anda akan segera menemukan aturan sendiri.
Firewall
Firewall terutama dirancang untuk secara dinamis mengizinkan atau menolak lalu lintas jaringan berdasarkan seperangkat aturan. Pada titik ini mudah untuk memahami mengapa kerangka kerja Linux Netfilter / Iptables sangat cocok untuk konstruksi firewall. Melihat peta aliran paket jaringan kami menemukan dua tempat yang sangat menarik pada tabel FILTER di rantai INPUT dan FORWARD; Kita dapat memutuskan di sana berdasarkan alamat sumber IP, protokol IP (UDP / TCP), port tujuan (80, 21, 443, dll), dll, jika kita MENERIMA, MENOLAK, atau hanya MENGHENTIKAN paket IP tertentu. Inilah yang dilakukan firewall 80% dari waktu ketika melindungi server web dari permintaan jaringan yang tidak sah. 20% lainnya saat itu memanipulasi paket jaringan (NAT, MANGLE).
Skenario Firewall
Ada ratusan tata letak firewall yang berbeda menambah kebutuhan yang berbeda tetapi 3 di antaranya dapat dianggap sebagai skenario firewall yang paling khas.
Saya telah menulis ini untuk: http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html
sumber