Rumah > Artikel > Tutorial sistem > Analisis mendalam tentang cara menggunakan iptables di bawah CentOS
1: Kata Pengantar
Firewall, secara terang-terangan, digunakan untuk melaksanakan fungsi kawalan akses di bawah Linux Ia terbahagi kepada dua jenis: tembok api perkakasan atau perisian. Tidak kira rangkaian mana anda berada, tempat di mana tembok api berfungsi mestilah di pinggir rangkaian. Tugas kami adalah untuk mentakrifkan cara tembok api berfungsi Ini adalah dasar dan peraturan tembok api, supaya ia boleh mengesan IP dan data masuk dan keluar dari rangkaian.
Pada masa ini, tembok api yang lebih biasa di pasaran termasuk dinding api lapisan 3 dan lapisan 4, yang dipanggil tembok api lapisan rangkaian dan tembok api lapisan 7, yang sebenarnya merupakan pintu masuk pada lapisan proksi.
Untuk model tujuh lapisan TCP/IP, kita tahu bahawa lapisan ketiga ialah lapisan rangkaian, dan tembok api tiga lapisan akan mengesan alamat sumber dan alamat destinasi pada lapisan ini. Tetapi untuk tembok api tujuh lapisan, tidak kira apa port sumber atau port destinasi anda, alamat sumber atau alamat destinasi, semua perkara anda akan diperiksa. Oleh itu, dari segi prinsip reka bentuk, tembok api tujuh lapisan adalah lebih selamat, tetapi ini menghasilkan kecekapan yang lebih rendah. Oleh itu, penyelesaian tembok api biasa di pasaran adalah gabungan kedua-duanya. Dan oleh kerana kita semua perlu mengakses melalui port yang dikawal oleh firewall, kecekapan firewall telah menjadi kawalan yang paling penting tentang berapa banyak data yang boleh diakses oleh pengguna Konfigurasi yang lemah malah boleh menjadi halangan untuk trafik.
2: Sejarah dan prinsip kerja iptables
1. Pembangunan iptables:
Pendahulu iptables dipanggil ipfirewall (era kernel 1.x Ini adalah alat kawalan akses mudah yang pengarang dipindahkan dari freeBSD dan boleh berfungsi dalam kernel untuk mengesan paket data. Walau bagaimanapun, fungsi kerja ipfirewall adalah sangat terhad (ia perlu memasukkan semua peraturan ke dalam kernel supaya peraturan boleh dijalankan, dan meletakkannya ke dalam kernel secara amnya amat sukar). Apabila kernel dibangunkan kepada 2. fungsi kawalan akses.
Ia adalah alat yang berfungsi dalam ruang pengguna dan menentukan peraturan, dan bukan tembok api itu sendiri. Peraturan yang mereka tentukan boleh dibaca oleh netfilter dalam ruang kernel dan membenarkan tembok api berfungsi. Tempat di mana ia dimasukkan ke dalam kernel mestilah lokasi tertentu, di mana timbunan protokol tcp/ip berlalu. Tempat di mana timbunan protokol tcp/ip ini mesti lulus dan di mana peraturan bacaan boleh dilaksanakan dipanggil netfilter (Penapis rangkaian)
Penulis memilih sejumlah 5 lokasi dalam ruang kernel,
1. Dalam ruang kernel: masuk dari satu antara muka rangkaian dan pergi ke antara muka rangkaian yang lain
2. Paket data mengalir dari kernel ke ruang pengguna
3. Paket data mengalir keluar dari ruang pengguna
4. Masuk/keluar antara muka rangkaian luaran mesin ini
5. Masuk/keluar dari antara muka rangkaian tempatan
2. Mekanisme kerja iptables
Daripada perkembangan di atas, kita tahu bahawa penulis telah memilih 5 lokasi sebagai tempat kawalan, tetapi adakah anda perasan bahawa sebenarnya, tiga lokasi pertama pada dasarnya boleh menyekat laluan sepenuhnya, tetapi mengapa ia ditetapkan di pintu masuk dan keluar? Bagaimana jika saya masih terperangkap di dalam selepas melepasi tahap? Memandangkan keputusan penghalaan belum lagi dibuat untuk paket data dan belum diketahui ke mana perginya data, tiada cara untuk melaksanakan penapisan data semasa import dan eksport. Oleh itu, adalah perlu untuk menetapkan tahap pemajuan dalam ruang kernel, tahap untuk memasuki ruang pengguna, dan tahap untuk keluar dari ruang pengguna. Jadi, jika ia tidak berguna, mengapa kita meletakkannya? Kerana apabila kita melakukan NAT dan DNAT, terjemahan alamat sasaran mesti diterjemahkan sebelum penghalaan. Oleh itu, kita mesti menetapkan pusat pemeriksaan di antara muka rangkaian luaran dan kemudian rangkaian dalaman.
Lima kedudukan ini juga dipanggil lima fungsi cangkuk, juga dipanggil lima rantai peraturan.
1.PREROUTING (sebelum routing)
2.INPUT (kemasukan aliran paket)
3.FORWARD (kad pengurusan hadapan)
4.OUTPUT (eksport paket data)
5.POSTROUTING (selepas routing)
Ini adalah lima rantai peraturan yang ditentukan oleh NetFilter Mana-mana paket data yang melalui mesin ini pasti akan melalui salah satu daripada lima rantai ini.
3. Strategi firewall
Dasar tembok api secara amnya dibahagikan kepada dua jenis, satu dipanggil dasar "lulus", dan satu lagi dipanggil dasar "menyekat" Dalam polisi pas, pintu ditutup secara lalai, dan anda perlu menentukan siapa yang boleh masuk. Strategi menyekat ialah pintu terbuka, tetapi anda mesti mempunyai pengesahan identiti, jika tidak, anda tidak boleh masuk. Jadi kita kena takrifkan, biar yang masuk masuk, dan yang keluar keluar, jadi buka bermakna membenarkan semua, dan menyekat adalah memilih. Apabila kami mentakrifkan dasar, kami perlu mentakrifkan berbilang fungsi masing-masing, termasuk: mentakrifkan dasar yang dibenarkan atau tidak dibenarkan dalam paket data, fungsi penapis dan pilihan nat yang mentakrifkan fungsi terjemahan alamat. Untuk membolehkan fungsi ini berfungsi secara berselang-seli, kami merumuskan takrifan "jadual" untuk mentakrif dan membezakan pelbagai fungsi kerja dan kaedah pemprosesan.
Kami pada masa ini menggunakan tiga fungsi:
1.penapis menentukan apa yang dibenarkan atau tidak dibenarkan
2.nat mentakrifkan terjemahan alamat
3.fungsi mangle: ubah suai data asal mesej
Kami mengubah suai data asal mesej untuk mengubah suai TTL. Adalah mungkin untuk membuka metadata paket data dan menandai/mengubah suai kandungan di dalamnya. Teg firewall sebenarnya dilaksanakan oleh mangle.
Sambungan kecil:
Untuk penapis, secara amnya ia hanya boleh dilakukan pada 3 rantai: INPUT, FORWARD, OUTPUT
Untuk NAT, ia secara amnya hanya boleh dilakukan pada 3 rantai: PREROUTING, OUTPUT, POSTROUTING
Mangle boleh melakukan kesemua 5 rantai: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
iptables/netfilter (perisian ini) berfungsi dalam ruang pengguna Ia boleh menjadikan peraturan itu berkuat kuasa Ia bukan perkhidmatan itu sendiri, dan peraturan itu berkuat kuasa serta-merta. Dan iptables kami kini dijadikan perkhidmatan, yang boleh dimulakan dan dihentikan. Jika dimulakan, peraturan akan berkuat kuasa secara langsung jika dihentikan, peraturan akan dibatalkan.
iptables juga menyokong penentuan rantai anda sendiri. Tetapi rantai yang anda tentukan mesti dikaitkan dengan rantai tertentu. Dalam tetapan tahap, nyatakan bahawa apabila terdapat data, pergi ke rantaian tertentu untuk diproses, dan kemudian kembali selepas rantai itu diproses. Kemudian teruskan menyemak dalam rantaian tertentu.
Nota: Susunan peraturan adalah sangat kritikal, peraturan yang lebih ketat, lebih tinggi ia harus diletakkan semasa menyemak peraturan, ia diperiksa dari atas ke bawah.
Tiga. Cara menulis peraturan:
Cara iptables mentakrifkan peraturan adalah lebih rumit:
Format: iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t jadual: 3 penapis nat mangle
PERINTAH: Tentukan cara mengurus peraturan
rantai: Tentukan rantaian mana peraturan anda yang seterusnya akan beroperasi. Perkara ini boleh diabaikan semasa menentukan strategi
CRETIRIA:Nyatakan kriteria yang sepadan
-j TINDAKAN: Nyatakan cara memproses
Contohnya: 172.16.0.0/24 tidak dibenarkan untuk mengakses.
iptables -t penapis -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
Mestilah kalau nak tolak dengan lebih teliti:
iptables -t penapis -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j TOLAK
iptables -L -n -v #Lihat maklumat terperinci peraturan yang ditetapkan
Empat: Penerangan terperinci PERINTAH:
1.Arahan pengurusan rantaian (ini berkuat kuasa serta-merta)
-P: Tetapkan dasar lalai (tetapkan sama ada pintu lalai ditutup atau terbuka)
Secara amnya hanya terdapat dua strategi lalai
iptables -P INPUT (DROP|ACCEPT) Lalai dimatikan/ lalai dihidupkan
Contohnya:
iptables -P INPUT DROP Ini menolak peraturan lalai. Dan tiada tindakan ditentukan, jadi semua peraturan tentang sambungan luaran, termasuk sambungan Xshell dan sambungan jauh ditolak.
-F: FLASH, kosongkan rantaian peraturan (perhatikan hak pengurusan setiap rantai)
iptables -t nat -F PREROUTING
iptables -t nat -F membersihkan semua rantai dalam jadual nat
-N:NEW menyokong pengguna untuk mencipta rangkaian baharu
iptables -N inbound_tcp_web menunjukkan bahawa ia dilampirkan pada jadual tcp untuk menyemak web.
-X: Digunakan untuk memadam pautan kosong yang ditentukan pengguna
Kaedah penggunaan adalah sama seperti -N, tetapi pautan di dalamnya mesti dikosongkan sebelum dipadamkan
-E: Digunakan untuk menamakan semula rantai, terutamanya digunakan untuk menamakan semula rantai yang ditentukan pengguna
-E nama lama nama baharu
-Z: Kosongkan rantai dan pembilang daripada peraturan lalai dalam rantai (terdapat dua pembilang, berapa banyak paket dan bait yang dipadankan)
iptables -Z : Jelas
2. Arahan pengurusan peraturan
-J: Tambah, tambah peraturan di penghujung rantai semasa
-I num: Masukkan, masukkan peraturan semasa ke dalam nombor mana.
-I 3: Masukkan sebagai item ketiga
-R num: Memainkan semula peraturan yang hendak diganti/ubah suai
Format: iptables -R 3…………
-D num: padam, nyatakan dengan jelas peraturan yang hendak dipadamkan
3 Lihat arahan pengurusan "-L"
Tambah subperintah
-n: Paparkan ip dalam bentuk berangka Ia akan memaparkan ip secara langsung Jika -n tidak ditambah, ip akan diselesaikan secara terbalik ke dalam nama hos.
-v: Tunjukkan maklumat terperinci
-vv
-vvv: Lebih banyak, lebih terperinci
-x: Paparkan nilai tepat pada kaunter tanpa penukaran unit
--nombor-baris: Paparkan nombor baris peraturan
-t nat: Paparkan maklumat tentang semua peringkat
Lima: Penjelasan terperinci tentang kriteria yang sepadan
1. Padanan universal: padanan alamat sumber dan alamat sasaran
-s: Tentukan sebagai alamat sumber untuk dipadankan, nama hos tidak boleh dinyatakan di sini, ia mestilah IP
IP |. 0.0.0.0/0.0.0.0
Dan alamat boleh diterbalikkan, tambahkan "!" untuk menunjukkan kecuali IP yang mana
-d: menunjukkan alamat sasaran yang sepadan
-p: digunakan untuk memadankan protokol (biasanya terdapat 3 protokol di sini, TCP/UDP/ICMP)
-i eth0: Data mengalir masuk dari kad rangkaian ini
Aliran masuk biasanya digunakan untuk INPUT dan PREROUTING
-o eth0: Data mengalir keluar daripada kad rangkaian ini
Aliran keluar biasanya pada OUTPUT dan POSTROUTING
2. Padanan lanjutan
2.1 Sambungan tersirat: sambungan kepada protokol
-p tcp: Lanjutan daripada protokol TCP. Secara amnya terdapat tiga jenis sambungan
--dport XX-XX: Tentukan port sasaran Berbilang port bukan berturut-turut tidak boleh ditentukan Hanya satu port boleh ditentukan, seperti
--dport 21 atau --dport 21-23 (ini bermakna 21,22,23)
--sukan: Nyatakan port sumber
--tcp-fiags: Bendera TCP (SYN, ACK, FIN, PSH, RST, URG)
Untuk itu, ia secara amnya perlu diikuti oleh dua parameter:
1. Tandakan bendera
2. Bendera bit yang mesti 1
--tcpflags syn,ack,fin,rst syn = --syn
bermaksud menyemak 4 bit ini, syn mestilah 1 antara 4 bit ini, dan yang lain mestilah 0. Jadi ini bermakna ia digunakan untuk mengesan paket pertama jabat tangan tiga hala. Untuk paket jenis ini yang secara khusus sepadan dengan paket pertama yang SYNnya ialah 1, terdapat juga singkatan yang dipanggil --syn
-p udp: lanjutan protokol UDP
-dport-
-Sukan--p icmp: sambungan mesej data icmp
--icmp-type:
echo-request (request echo), biasanya diwakili oleh 8
Jadi --icmp-type 8 padanan meminta paket gema
echo-reply (paket data tindak balas) biasanya diwakili oleh 0
2.2 Pengembangan eksplisit (-m)
Meluaskan pelbagai modul
-m multiport: Menunjukkan mendayakan pengembangan berbilang port
Selepas itu kita boleh mendayakan contohnya --dports 21,23,80
Enam: Penerangan terperinci-j TINDAKAN Tindakan yang biasa digunakan:
JATUHKAN: Buang secara senyap
Secara amnya kami menggunakan DROP untuk menyembunyikan identiti kami dan menyembunyikan senarai terpaut kami
REJECT: nyatakan penolakan
TERIMA: Terima
custom_chain: bertukar kepada rantai tersuai
DNAT
SNAT
MASQUERADE: alamat sumber menyamar
REDIRECT: Ubah hala: Terutamanya digunakan untuk melaksanakan pengalihan port
MARK: Tanda firewall
PULANGAN:Pulang
Gunakan pulangan selepas rantaian tersuai dilaksanakan untuk kembali ke rantai peraturan asal.
Latihan soalan 1:
Selagi ia datang dari segmen rangkaian 172.16.0.0/16, ia dibenarkan untuk mengakses perkhidmatan SSHD 172.16.100.1 tempatan saya
Analisis: Pertama sekali, ia mesti ditakrifkan dalam jadual membenarkan. Kerana tidak perlu melakukan terjemahan alamat NAT dan seumpamanya, maka semak perkhidmatan SSHD kami Pada port 22, mekanisme pemprosesan adalah penerimaan Untuk jadual ini, perlu ada dua peraturan, satu ke belakang, sama ada kita membenarkannya atau menolaknya , untuk mengakses perkhidmatan tempatan, kami lebih baik menentukannya pada rantaian INPUT, dan kemudian menentukan OUTPUT. (Tamat awal sesi ditakrifkan dahulu), jadi peraturan tambahan ialah:
Definisi masuk: iptables -t penapis -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j TERIMA
Ditakrifkan: iptables -t penapis -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j TERIMA
Tukar dasar lalai kepada DROP:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P HADAPAN DROP
Tujuh: Pengesanan status: Ia adalah sambungan eksplisit yang digunakan untuk mengesan perhubungan sambungan antara sesi Dengan pengesanan, kami dapat merealisasikan pengembangan fungsi antara sesi
Apakah pengesanan status? Untuk keseluruhan protokol TCP, ia adalah protokol sambungan Dalam jabat tangan tiga hala, jabat tangan pertama dipanggil sambungan BARU Dari jabat tangan kedua dan seterusnya, ack ialah 1, iaitu penghantaran data biasa , dan yang kedua jabat tangan ketiga tcp dipanggil sambungan yang telah ditetapkan (TERBUAT) Terdapat juga keadaan yang agak pelik, seperti: SYN=1 ACK=1 RST=1 tidak diiktiraf. Terdapat juga jenis keempat, ciri kuno FTP Setiap port adalah bebas dan kembali.
Jadi kami mempunyai empat negeri secara keseluruhan:
BARU
DITUBUHKAN
BERKAITAN
TIDAK SAH
Jadi kami boleh menambah pengesanan status pada soalan latihan tadi. Sebagai contoh, hanya mereka yang berstatus BARU dan ESTABLISH dibenarkan masuk, dan hanya status ESTABLISHED dibenarkan keluar. Ini boleh menyediakan mekanisme kawalan yang baik untuk Trojan pantulan yang lebih biasa.
Sambungan untuk soalan latihan:
Yang masuk menolak kebenaran untuk keluar, yang masuk hanya membenarkan ESTABLISHed untuk masuk, dan yang keluar hanya membenarkan ESTABLISHED untuk keluar. Peraturan lalai semuanya menggunakan deny
iptables -L -n --line-nombor: Lihat baris di mana peraturan sebelumnya terletak
Tulis semula INPUT
iptables -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j TERIMA
iptables -R OUTPUT 1 -m keadaan --state ESTABLISHED -j TERIMA
Jika anda ingin mengeluarkan port 80 lagi pada masa ini, bagaimana anda boleh melepaskannya?
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW, ESTABLISHED -j TERIMA
iptables -R INPUT 1 -d 172.16.100.1 -p udp --dport 53 -j TERIMA
Latihan soalan 2:
Bagaimana jika kita membiarkan diri kita ping orang lain, tetapi orang lain tidak boleh ping kita?
Analisis: Untuk protokol ping, apa yang masuk ialah 8 (ping) dan apa yang keluar ialah 0 (respons) Untuk mencapai matlamat kita, kita perlu 8 untuk keluar dan membenarkan 0 masuk
Pada port keluar: iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
Pada port masuk: iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
Sambungan kecil: 127.0.0.1 adalah istimewa, kita perlu mentakrifkannya dengan jelas
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j TERIMA
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j TERIMA
Lapan: Pelaksanaan SNAT dan DNAT
Memandangkan alamat IP kami kini kekurangan bekalan dan telah diperuntukkan, kami mesti melakukan terjemahan alamat untuk menyimpan sumber IP kami yang tinggal. Jadi bagaimana untuk melaksanakan terjemahan alamat NAT melalui iptables?
1. Penukaran SNAT berdasarkan alamat asal
Penukaran berdasarkan alamat asal biasanya digunakan apabila ramai pengguna rangkaian dalaman kami mengakses Internet melalui port rangkaian luaran Pada masa ini, kami menukar alamat rangkaian dalaman kami kepada IP rangkaian luaran, dan kami boleh menyambung ke rangkaian luaran yang lain fungsi IP.
Jadi kita perlu menentukan cara menukar dalam iptables:
Gaya yang ditentukan:
Sebagai contoh, kita kini perlu menukar semua alamat IP dalam segmen rangkaian 192.168.10.0 kepada alamat rangkaian luaran yang diandaikan 172.16.100.1 apabila melalui:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1
Dengan cara ini, sesiapa sahaja daripada rangkaian tempatan yang cuba mengakses rangkaian melalui kad rangkaian akan ditukar kepada IP 172.16.100.1.
Jadi, bagaimana jika 172.16.100.1 tidak tetap?
Kita semua tahu bahawa apabila kita menggunakan China Unicom atau China Telecom untuk mengakses Internet, ia biasanya akan menjana alamat IP luaran secara rawak setiap kali anda menghidupkan komputer, yang bermaksud alamat rangkaian luaran ditukar secara dinamik. Pada masa ini, kita perlu menukar alamat rangkaian luaran kepada MASQUERADE (penyamaran dinamik): ia secara automatik boleh mencari alamat rangkaian luaran dan menukarnya secara automatik kepada alamat rangkaian luaran yang betul. Jadi, kita perlu menyediakannya seperti ini:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
Nota di sini: Penyamaran alamat tidak terpakai untuk semua tempat.
2.Penukaran alamat sasaran DNA
Untuk terjemahan alamat sasaran, arah aliran data adalah dari luar ke dalam IP , tetapi perkhidmatan kami diletakkan pada pelayan yang berbeza dalam pelayan intranet.
Bagaimana untuk melakukan penukaran alamat sasaran? :
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --todestination 172.16.100.2
Penukaran alamat sasaran perlu dilakukan sebelum mencapai kad rangkaian, jadi ia perlu dilakukan dalam kedudukan PREROUTING
9: Kawal penyimpanan dan pembukaan peraturan
Nota: Semua kandungan yang anda tentukan akan menjadi tidak sah apabila anda memulakan semula Jika kami mahu ia berkuat kuasa, kami perlu menggunakan arahan untuk menyimpannya
1.servis iptables save command
Ia akan disimpan dalam fail /etc/sysconfig/iptables
2.iptables-simpan arahan
iptables-save > /etc/sysconfig/iptables
3.iptables-memulihkan arahan
Apabila boot, ia akan memuatkan /etc/sysconfig/iptabels secara automatik
Jika ia tidak boleh dimuatkan atau tidak dimuatkan semasa but, dan anda mahu fail konfigurasi yang ditulis sendiri (diandaikan sebagai iptables.2) berkuat kuasa secara manual:
iptables-restore /etc/sysconfig/iptables.2
Kemudian anda telah menyelesaikan secara manual melaksanakan peraturan yang ditakrifkan dalam iptables
Sepuluh: Ringkasan
Iptables ialah alat yang sangat penting Ia adalah tetapan yang hampir diperlukan pada setiap tembok api. Ia juga sesuatu yang kita mesti sediakan untuk banyak sebab apabila kita membina rangkaian yang besar. Mempelajari Iptables dengan baik boleh memberi kita pemahaman yang lebih mendalam tentang struktur keseluruhan rangkaian Pada masa yang sama, kita juga boleh mempunyai pemahaman yang menyeluruh tentang arah data dalam ruang kernel dan keselamatan Linux. Semasa kami belajar, kami cuba menggabungkan pelbagai projek dan eksperimen untuk menyelesaikannya. Ini akan sangat membantu anda untuk mendalami konfigurasi iptables dan pelbagai teknik.
Atas ialah kandungan terperinci Analisis mendalam tentang cara menggunakan iptables di bawah CentOS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!