Debugging iptables dan perangkap firewall umum?

18

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 pertanyaan untuk skor tinggi yang sering ada dan dihargai dengan baik Tanya Jawab.

HBruijn
sumber
1
Bagaimana dengan aturan NAT & negara bagian yang dapat ditempatkan lebih awal dalam rantai untuk meningkatkan kinerja dan meningkatkan keamanan?
Matt
1
@Matt: mengoptimalkan aturan firewall adalah Q&A yang lengkap dan dalam Q&A ini saya tidak akan memperluas jawaban yang sebelumnya saya berikan di sini
HBruijn
1
Jika Anda tidak mencapai aturan yang seharusnya ada di IPtables, tambahkan aturan LOG yang sama dan lanjutkan perjalanannya sampai Anda menerima pesan LOG. Kemudian, salah satu aturan di bawah ini adalah aturan yang tidak sesuai dengan paket Anda.
Matthew Ife
1
Oh dan pengaturan net.netfilter.nf_conntrack_log_invalidke 255 akan menangkap paket tidak valid dengan cukup baik yang dapat membantu jika itu adalah bagian dari netfilter yang menghasilkan perilaku buruk.
Matthew Ife

Jawaban:

14

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 sebagai rootatau gunakan alternatif sudountuk menjalankan perintah sebagai root. Saya akan mencoba menandai perintah tersebut dengan opsional [sudo].

Isi:

  1. Urutan masalah atau perbedaan antara -Idan-A
  2. Tampilkan konfigurasi firewall saat ini
  3. Menafsirkan ouput dari iptables -L -v -n
  4. Kenali lingkungan Anda
  5. Rantai INPUT dan FORWARD
  6. Modul kernel

1. Urutan masalah atau perbedaan antara -Idan-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:

[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

dan kemudian menemukan bahwa itu tidak akan berpengaruh.

Alasan untuk itu adalah bahwa -Aopsi 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, menghasilkan

...
7    2515K  327M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
8        0  0    ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080

Atau setara dengan iptables-save:

...
iptables -A INPUT  -j REJECT
iptables -A INPUT  -p tcp --dport 8080 -j ACCEPT

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 -Ibaru 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 -nadalah teman Anda (walaupun beberapa orang iptables-savelebih suka ). Seringkali ketika membahas konfigurasi, berguna untuk menggunakan --line-numbersopsi juga untuk nomor baris. Merujuk ke aturan #X membuat mendiskusikannya agak lebih mudah.
Catatan: Aturan NAT termasuk dalam iptables-saveoutput tetapi harus terdaftar secara terpisah dengan menambahkan -t natopsi 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.

[root@host ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     784K   65M fail2ban-SSH  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
2    2789K  866M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3       15  1384 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4    44295 2346K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    40120 2370K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
6    16409  688K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
7    2515K  327M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain fail2ban-SSH (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       117.239.37.150       0.0.0.0/0           reject-with icmp-port-unreachable
2        4   412 REJECT     all  --  *      *       117.253.208.237      0.0.0.0/0           reject-with icmp-port-unreachable

Atau output dari iptables-savememberikan skrip yang dapat membuat ulang konfigurasi firewall di atas:

[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT

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 INPUTrantai 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-SSHatau 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-SSHrantai 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).

 -A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
 -A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-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 loantarmuka 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:

4    44295 2346K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
5    40120 2370K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
6    16409  688K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0

atau

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

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 iptablesdaftar 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:

  • Konfirmasikan bahwa suatu layanan mendengarkan (pada antarmuka jaringan / ip-address yang benar) dan menggunakan nomor port yang Anda harapkan [sudo] netstat -plnutatau gunakan secara alternatif ss -tnlp.
  • Jika layanan Anda belum berjalan, ikuti pendengar sederhana dengan misalnya netcat: [sudo] nc -l -p 123atau openssl s_server -accept 1234 [options] jika Anda memerlukan pendengar TLS / SSL (centang man s_serveropsi).
  • Verifikasi bahwa Anda dapat terhubung dari server itu sendiri yaitu telnet <IP of Server> 123atau echo "Hello" | nc <IP of Server> 123atau saat menguji layanan aman TLS / SSL openssl 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:

  • apakah TCP atau UDP digunakan atau keduanya (seperti halnya dengan DNS)?
  • apakah layanan menggunakan port default tetap (misalnya sesuatu seperti port TCP 80 untuk server web)?
  • alternatifnya adalah nomor port dinamis yang dipilih dapat bervariasi (yaitu layanan RPC seperti NFS klasik yang mendaftar dengan Portmap)?
  • FTP yang terkenal bahkan menggunakan dua port , baik nomor port tetap dan dinamis ketika dikonfigurasikan untuk menggunakan mode pasif ...
  • deskripsi layanan, port dan protokol /etc/servicestidak harus sesuai dengan layanan aktual menggunakan port.

4.4. Filter paket kernel bukan satu-satunya hal yang dapat membatasi konektivitas jaringan:

  • SELinux mungkin juga membatasi layanan jaringan. getenforceakan mengkonfirmasi jika SELinux sedang berjalan.
  • Meskipun menjadi Pembungkus TCP sedikit tidak jelas masih merupakan alat yang kuat untuk menegakkan keamanan jaringan. Periksa dengan ldd /path/to/service |grep libwrapdan /hosts.[allow|deny]file kontrol.

5. INPUTatau FORWARDRantai

Konsep rantai dijelaskan secara lebih menyeluruh di sini, tetapi singkatnya adalah:

The INPUTchain adalah di mana Anda membuka dan / atau port jaringan dekat untuk layanan yang berjalan secara lokal, pada host mana Anda mengeluarkan perintah iptables.

The FORWARDchain 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_ftpyang dapat dimuat insmod.

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.

HBruijn
sumber
1
Saat mencari penghitung paket / byte tambahan. Alat yang berguna adalah menggunakan arloji, dalam mode yang berbeda. Jadi sesuatu seperti ini: watch --difference -n 1 iptables -L FORWARD -v -n. Membiarkan alat secara berkala menjalankan perintah dan menyoroti perubahan membuatnya jauh lebih mudah.
Zoredache
1
Saya baru saja melihat komentar malas Anda. Ini jawaban yang bagus, tidak yakin saya bisa menambahkan banyak. Anda mungkin ingin memasukkan penyebutan menggunakan fitur TRACE .
Zoredache
Saya akan mengambil iptables-saveoutput (lebih disukai dengan -c) setiap kali selama iptables -Loutput yang ditakuti (dengan berbagai argumen) ini.
0xC0000022L
7

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

iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT

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 RELATEDsetelah itu akan cocok dengan aturan umum :

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

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.

HBruijn
sumber
7

"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:

  1. Modul FILTER (selalu dimuat secara default) terutama memungkinkan kita untuk MENERIMA atau MENGURANGI paket IP berdasarkan kriteria pencocokan tertentu.
  2. Set modul NAT memungkinkan kita untuk melakukan Terjemahan Alamat Jaringan (SNAT, DNAT, MASQUERADE).
  3. Modul MANGLE memungkinkan kita untuk mengubah bidang paket IP tertentu (KL, TTL).

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.

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

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:

Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed

<table>
  -t filter       (the filter table is assumed when omitted)
  -t nat
  -t mangle 

<Add/Insert/Delete>
  -A              (append rule at the end of the chain list)
  -I              (insert rule at the begining of the chain list)
  -D              (Delete rule)

<CHAIN>
  PREROUTING
  INPUT
  FORWARD
  OUTPUT
  POSTROUTING
  USER_DEFINED_CHAIN

<PKT_MATCHING_CRITERIA>
ISO Level-2 matching:
  -i [!] <if_name>    or --in-interface [!] <if_name>
          (OUTPUT and POSTROUTING chains cannot match on input  interfaces)
  -o [!] <if_name>    or --out-interface [!] <if_name>
          (INPUT  and PREROUTING  chains cannot match on output interfaces) 
    -mac-source [!] <xx-xx-xx-xx-xx-xx>
            (OUTPUT and POSTROUTING chains cannot match on input  interfaces)

ISO Level-3 matching:
  -s [!] <src_ip>     or --src [!] <src_ip>   or --source [!] <src_ip>
  -d [!] <dst_ip>     or --src [!] <dst_ip>   or --destination [!] <dst_ip>

ISO Level-4 matching:
  -p [!] <prot_name>    or --protocol [!] <prot_name>  (udp|tcp|icmp)

  Also available when ICMP protocol is defined
  --icmp-type [!] <icmp_type>

  Also available when UDP protocol is defined
  --source-port [!] <udp_src_port>      or --sport [!] <udp_src_port>
  --destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port>

  Also available when TCP protocol is defined
  --source-port [!] <tcp_src_port>      or --sport [!] <tcp_src_port>
  --destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port>
  --tcp-flags [!] <tcp_flags>   (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE)
    --syn
  --tcp-option [!] <tcp_option#>

  --state [!] <state>
  -m <match> [options]

    note: [!] = negation operator

<ACTION>                (also called TARGET)
  -j ACCEPT             (process continues with rules of the next table in map)
  -j DROP               (discard current packet)
  -j REJECT             (discard current packet with ICMP notification)
      option:
      --reject-with <reject_type>
  -j USER_DEFINED_CHAIN   (start traversing USER_DEFINED_CHAIN rules)
  -j RETURN               (return from USER_DEFINED_CHAIN)
  -j LOG                  (log to syslog, then process next rule in table)
      options:
      --log-level <level>
      --log-prefix <prefix>
      --log-tcp-sequence
      --log-tcp-options
      --log-ip-options
      --log-uid

nat table specific
  -j SNAT             (rewrite the source IP address of the packet)
      option:
      --to <ip_address>
  -j SAME             (idem SNAT; used when more than one source address)
      options:
      --nodst 
      --to <a1-a2>
  -j MASQUERADE       (idem SNAT; used when the replace IP is dynamic)
  -j DNAT             (rewrite the destination IP address of the packet)
      option:
      --to <ip_address>
  -j REDIRECT         (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only)
      option:
      –-to-port <port#>

mangle table specific
  -j ROUTE            (explicitly route packets, valid at PREROUTING)
      options:
      --iface <iface_name>
      --ifindex <iface_idx>
  -j MARK             (set Netfilter mark values)
      options:
      --set-mark <value>
      --and-mark <value>
      --or-mark <value> 
  -j TOS              (set the IP header Type of Service field) 
      option:
      --set-tos <value>
  -j DSCP             (set the IP header Differentiated Services Field)
      options:
      --set-dscp <value>
      --set-dscp-class <class>
  -j TTL              (set the IP header Time To Live field)
      options:
      --ttl-set <value>
      --ttl-dec <value>
      --ttl-inc <value>

Perintah bantu iptables melengkapi skenario pengaturan conditoins default, daftar aturan, aturan pembilasan, dll.

#iptables -t <table> -L             
       (Lists the <table> rules in all chains)
#iptables -t <table> -L <CHAIN>     
       (Lists the <table> rules in <CHAIN>)

#iptables -t <table> -N <CHAIN>     
       (Creates a user-defined <CHAIN> for holding <table> rules)
#iptables -t <table> -E <CHAIN> <NEWCHAIN>  
       (Renames <CHAIN> that holds <table> rules to <NEWCHAIN>)

#iptables -t <table> -X   
       (Deletes all user-defined chains created for holding <table> rules)
#iptables -t <table> -X <CHAIN>
       (Deletes user-defined <CHAIN> created for holding <table> rules)

#iptables -t <table> -P <CHAIN> <ACTION>     where <ACTION> = ACCEPT|DROP
       (Sets the default policy of <table> rules at <CHAIN> to <ACTION>)

#iptables -t <table> -F             
       (Flushes (deletes) all <table> rules in all chains)
#iptables -t <table> -F <CHAIN>
       (Flushes (deletes) all <table> rules in <CHAIN>)

#iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE>
       (Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE>

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.

#iptables-save > fileName
      (Save the currently active Netfilter ruleset to fileName)

#iptables-restore < fileName
      (Restore Netfilter ruleset to the one saved in fileName)

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.

  1. Server web sederhana dengan satu atau lebih antarmuka terhubung ke Internet. Kebijakan mencakup aturan dasar untuk mengizinkan akses masuk terbatas, akses keluar tidak terbatas, dan aturan anti-spoofing. Penerusan IP tidak aktif.
  2. Firewall ini terhubung ke Internet dan ke area internal yang dilindungi. Kebijakan mencakup aturan dasar untuk mengizinkan akses masuk terbatas, akses keluar tidak terbatas, dan aturan anti-spoofing. Karena kawasan lindung menggunakan sumber alamat IP pribadi, NAT diperlukan. Penerusan IP aktif.
  3. Firewall ini terhubung ke Internet, area yang dilindungi dan demiliterisasi internal. Kebijakan termasuk aturan dasar untuk mengizinkan akses masuk terbatas, akses keluar tidak terbatas dan aturan anti-spoofing. Karena wilayah yang dilindungi dan DMZ menggunakan alamat IP pribadi, mereka membutuhkan sumber dan tujuan NAT. Penerusan IP aktif. masukkan deskripsi gambar di sini

Saya telah menulis ini untuk: http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html

Menepuk
sumber