Hosts.allow - Perintah Linux - Perintah Unix

NAMA

hosts_access - format file kontrol akses host

DESKRIPSI

Halaman panduan ini menjelaskan bahasa kontrol akses sederhana yang didasarkan pada klien (nama host / alamat, nama pengguna), dan pola server (nama proses, nama host / alamat). Contoh diberikan di bagian akhir. Pembaca yang tidak sabar didorong untuk melompat ke bagian EXAMPLES untuk pengenalan cepat. Versi perpanjangan dari bahasa kontrol akses dijelaskan dalam dokumen hosts_options (5). Ekstensi diaktifkan pada waktu pembuatan program dengan membangun dengan -DPROCESS_OPTIONS.

Dalam teks berikut, daemon adalah nama proses dari proses daemon jaringan , dan klien adalah nama dan / atau alamat dari layanan permintaan host. Nama proses daemon jaringan ditentukan dalam file konfigurasi inetd.

FILES PENGENDALIAN AKSES

Perangkat lunak kontrol akses berkonsultasi dua file . Pencarian berhenti pada pertandingan pertama.

Akses akan diberikan ketika pasangan (daemon, klien) cocok dengan entri di file /etc/hosts.allow .

Jika tidak, akses akan ditolak ketika pasangan (daemon, klien) cocok dengan entri di file /etc/hosts.deny .

Jika tidak, akses akan diberikan.

File kontrol akses yang tidak ada diperlakukan seolah-olah file kosong. Dengan demikian, kontrol akses dapat dimatikan dengan tidak menyediakan file kontrol akses.

AKSES KONTROL KONTROL

Setiap file kontrol akses terdiri dari nol atau lebih banyak baris teks. Garis-garis ini diproses sesuai urutan penampilan. Pencarian berhenti ketika kecocokan ditemukan.

Karakter baris baru diabaikan ketika didahului oleh karakter backslash. Ini memungkinkan Anda memecah garis panjang sehingga lebih mudah diedit.

Garis atau garis kosong yang dimulai dengan karakter `# 'diabaikan. Ini memungkinkan Anda untuk memasukkan komentar dan spasi agar tabel lebih mudah dibaca.

Semua jalur lainnya harus memenuhi format berikut, hal-hal antara [] bersifat opsional:

daemon_list: client_list [: shell_command]

daemon_list adalah daftar dari satu atau lebih nama proses daemon (nilai argv [0]) atau wildcard (lihat di bawah).

client_list adalah daftar dari satu atau lebih nama host, alamat host, pola atau wildcard (lihat di bawah) yang akan dicocokkan dengan nama atau alamat host klien.

Bentuk yang lebih kompleks daemon @ host dan pengguna @ host dijelaskan di bagian pada pola titik akhir server dan pada pencarian nama pengguna klien, masing-masing.

Elemen daftar harus dipisahkan oleh kosong dan / atau koma.

Dengan pengecualian pencarian netgroup NIS (YP), semua pemeriksaan kontrol akses tidak peka huruf besar / kecil.

POLA

Bahasa kontrol akses mengimplementasikan pola berikut:

String yang diawali dengan `. ' karakter. Nama host dicocokkan jika komponen terakhir dari namanya sesuai dengan pola yang ditentukan. Misalnya, pola `.tue.nl 'cocok dengan nama host` wzv.win.tue.nl'.

String yang diakhiri dengan `. ' karakter. Alamat host dicocokkan jika bidang angka pertama cocok dengan string yang diberikan. Misalnya, pola `131.155. ' cocok dengan alamat (hampir) setiap host di jaringan Eindhoven University (131.155.xx).

String yang dimulai dengan karakter `@ 'diperlakukan sebagai nama netgroup NIS (sebelumnya YP). Nama host dicocokkan jika itu adalah anggota host dari netgroup tertentu. Pencocokan Netgroup tidak didukung untuk nama proses daemon atau untuk nama pengguna klien.

Ekspresi dari bentuk `nnnn / mmmm 'ditafsirkan sebagai sepasang` net / mask'. Alamat host IPv4 dicocokkan jika `net 'sama dengan bitwise AND dari alamat dan` mask'. Misalnya, pola net / mask `131.155.72.0/255.255.254.0 'cocok dengan setiap alamat dalam rentang` 131.155.72.0' hingga `131.155.73.255 '.

Ekspresi dari bentuk `[n: n: n: n: n: n: n: n] / m 'ditafsirkan sebagai pasangan` [net] / prefixlen'. Alamat host IPv6 dicocokkan jika `prefixlen 'bit` net' sama dengan bit `prefixlen 'dari alamat. Misalnya, pola [net] / prefixlen `[3ffe: 505: 2: 1 ::] / 64 'cocok dengan setiap alamat dalam rentang` 3ffe: 505: 2: 1 ::' through `3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.

String yang dimulai dengan karakter `/ 'dianggap sebagai nama file . Nama atau alamat host dicocokkan jika cocok dengan nama host atau pola alamat yang tercantum dalam file bernama. Format file adalah nol atau lebih banyak garis dengan nol atau lebih nama host atau pola alamat yang dipisahkan oleh spasi. Pola nama file dapat digunakan di mana saja nama host atau pola alamat dapat digunakan.

Wildcard `* 'dan`?' dapat digunakan untuk mencocokkan nama host atau alamat IP . Metode pencocokan ini tidak dapat digunakan bersama dengan pencocokan `net / mask ', pencocokan nama host yang diawali dengan`.' atau alamat IP yang cocok diakhiri dengan `. '.

WILDCARDS

Bahasa kontrol akses mendukung wildcard eksplisit:

SEMUA

Wildcard universal, selalu cocok.

LOKAL

Cocok dengan host mana pun yang namanya tidak mengandung karakter titik.

TIDAK DIKETAHUI

Mencocokkan setiap pengguna yang namanya tidak dikenal, dan mencocokkan host mana pun yang nama atau alamatnya tidak diketahui. Pola ini harus digunakan dengan hati-hati: nama host mungkin tidak tersedia karena masalah server nama sementara. Alamat jaringan tidak akan tersedia ketika perangkat lunak tidak dapat mengetahui jenis jaringan apa yang sedang dibicarakan.

DIKETAHUI

Mencocokkan setiap pengguna yang namanya diketahui, dan mencocokkan host mana pun yang nama dan alamatnya diketahui. Pola ini harus digunakan dengan hati-hati: nama host mungkin tidak tersedia karena masalah server nama sementara. Alamat jaringan tidak akan tersedia ketika perangkat lunak tidak dapat mengetahui jenis jaringan apa yang sedang dibicarakan.

PARANOID

Cocok dengan host mana pun yang namanya tidak sesuai dengan alamatnya. Ketika tcpd dibangun dengan -DPARANOID (mode default), ia menjatuhkan permintaan dari klien tersebut bahkan sebelum melihat tabel kontrol akses. Bangun tanpa -DPARANOID ketika Anda ingin lebih banyak kontrol atas permintaan tersebut.

OPERATOR

KECUALI

Penggunaan yang dimaksud adalah bentuk: `list_1 EXCEPT list_2 '; konstruk ini cocok dengan apa pun yang cocok dengan list_1 kecuali itu cocok dengan list_2 . Operator KECUALI dapat digunakan di daemon_lists dan di client_lists. Operator EXCEPT dapat diulang: jika bahasa kontrol akan mengizinkan penggunaan tanda kurung, `a EXCEPT b EXCEPT c 'akan mem-parsing sebagai` (sebuah EXCEPT (b EXCEPT c))'.

SHELL COMMANDS

Jika aturan kontrol akses pertama-cocok berisi perintah shell, perintah itu dikenakan% substitusi (lihat bagian berikutnya). Hasilnya dijalankan oleh proses anak / bin / sh dengan input standar, output dan kesalahan yang terhubung ke / dev / null . Tentukan `& 'di akhir perintah jika Anda tidak ingin menunggu sampai selesai.

Perintah shell seharusnya tidak bergantung pada pengaturan PATH dari inetd. Sebaliknya, mereka harus menggunakan nama path absolut, atau mereka harus mulai dengan PATH eksplisit = pernyataan apa pun.

Dokumen hosts_options (5) mendeskripsikan bahasa alternatif yang menggunakan bidang perintah shell dengan cara yang berbeda dan tidak kompatibel.

% EKSPAN

Ekspansi berikut tersedia dalam perintah shell:

%A A)

Alamat host klien (server).

% c

Informasi klien: pengguna @ host, alamat @ pengguna, nama host, atau hanya alamat, tergantung pada seberapa banyak informasi yang tersedia.

% d

Nama proses daemon (nilai argv [0]).

% h (% H)

Nama atau alamat host klien (server), jika nama host tidak tersedia.

% n (% N)

Nama host klien (server) (atau "tidak dikenal" atau "paranoid").

% p

ID proses daemon.

% s

Informasi server: daemon @ host, daemon @ address, atau hanya nama daemon, tergantung pada seberapa banyak informasi yang tersedia.

% u

Nama pengguna klien (atau "tidak diketahui").

%%

Memperluas ke karakter `% 'tunggal.

Karakter dalam% ekspansi yang dapat membingungkan shell diganti dengan garis bawah.

POLA ENTEROINT SERVER

Untuk membedakan klien dengan alamat jaringan yang terhubung, gunakan pola formulir:

process_name @ host_pattern: client_list ...

Pola seperti ini dapat digunakan ketika mesin memiliki alamat internet yang berbeda dengan nama host internet yang berbeda. Penyedia layanan dapat menggunakan fasilitas ini untuk menawarkan arsip FTP, GOPHER, atau WWW dengan nama internet yang mungkin juga dimiliki oleh organisasi yang berbeda. Lihat juga opsi `putar 'di dokumen hosts_options (5). Beberapa sistem (Solaris, FreeBSD) dapat memiliki lebih dari satu alamat internet pada satu antarmuka fisik; dengan sistem lain Anda mungkin harus menggunakan antarmuka pseudo SLIP atau PPP yang hidup di ruang alamat jaringan khusus.

Host_pattern mematuhi aturan sintaks yang sama dengan nama dan alamat host dalam konteks client_list. Biasanya, informasi titik akhir server hanya tersedia dengan layanan berorientasi koneksi.

KLIEN USERNAME LOOKUP

Ketika host klien mendukung protokol RFC 931 atau salah satu keturunannya (TAP, IDENT, RFC 1413) program wrapper dapat mengambil informasi tambahan tentang pemilik koneksi. Informasi nama pengguna klien, jika tersedia, dicatat bersama dengan nama host klien, dan dapat digunakan untuk mencocokkan pola seperti:

daemon_list: ... user_pattern @ host_pattern ...

Pembungkus daemon dapat dikonfigurasi pada waktu kompilasi untuk melakukan pencarian nama pengguna berdasarkan aturan (default) atau untuk selalu menginterogasi host klien. Dalam kasus pencarian nama pengguna berdasarkan aturan, aturan di atas akan menyebabkan pencarian nama pengguna hanya ketika kedua daemon_list dan pertandingan host_pattern .

Pola pengguna memiliki sintaks yang sama sebagai pola proses daemon, jadi wildcard yang sama berlaku (keanggotaan netgroup tidak didukung). Orang tidak boleh terbawa dengan pencarian nama pengguna, meskipun.

Informasi nama pengguna klien tidak dapat dipercaya ketika paling dibutuhkan, yaitu ketika sistem klien telah dikompromikan. Secara umum, ALL dan (UN) KNOWN adalah satu-satunya pola nama pengguna yang masuk akal.

Pencarian nama pengguna hanya mungkin dengan layanan berbasis TCP, dan hanya ketika host klien menjalankan daemon yang sesuai; dalam semua kasus lainnya hasilnya "tidak diketahui".

Bug kernel UNIX yang terkenal dapat menyebabkan hilangnya layanan ketika pencarian nama pengguna diblokir oleh firewall. Dokumen README pembungkus menggambarkan prosedur untuk mengetahui apakah kernel Anda memiliki bug ini.

Pencarian nama pengguna dapat menyebabkan penundaan yang nyata untuk pengguna non-UNIX. Batas waktu default untuk pencarian nama pengguna adalah 10 detik: terlalu pendek untuk mengatasi jaringan yang lambat, tetapi cukup lama untuk mengganggu pengguna PC.

Pencarian nama pengguna selektif dapat meringankan masalah terakhir. Misalnya, aturan seperti:


daemon_list: @pcnetgroup ALL @ ALL

akan cocok dengan anggota netgroup pc tanpa melakukan pencarian nama pengguna, tetapi akan melakukan pencarian nama pengguna dengan semua sistem lainnya.

MENDETEKSI SERANGAN ALAMAT SPOOFING

Cacat pada generator nomor urut dari banyak implementasi TCP / IP memungkinkan penyusup untuk dengan mudah meniru identitas host dan menerobos masuk, misalnya, layanan shell jarak jauh. Layanan IDENT (RFC931 dll.) Dapat digunakan untuk mendeteksi serangan spoofing alamat host dan lainnya.

Sebelum menerima permintaan klien, pembungkus dapat menggunakan layanan IDENT untuk mengetahui bahwa klien tidak mengirim permintaan sama sekali. Ketika host klien menyediakan layanan IDENT, hasil pencarian IDENT negatif (klien cocok dengan `UNKNOWN @ host ') adalah bukti kuat dari serangan spoofing host.

Hasil pencarian IDENT positif (klien cocok dengan `KNOWN @ host ') kurang dapat dipercaya. Adalah mungkin bagi penyusup untuk menipu koneksi klien dan pencarian IDENT, meskipun melakukannya jauh lebih sulit daripada hanya spoofing koneksi klien. Mungkin juga server IDENT klien berbohong.

Catatan: IDENT lookup tidak berfungsi dengan layanan UDP.

CONTOH

Bahasa cukup fleksibel sehingga berbagai jenis kebijakan kontrol akses dapat diekspresikan dengan minimal rewel. Meskipun bahasa menggunakan dua tabel kontrol akses, kebijakan yang paling umum dapat diimplementasikan dengan salah satu tabel menjadi sepele atau bahkan kosong.

Ketika membaca contoh di bawah ini, penting untuk menyadari bahwa tabel yang diizinkan dipindai sebelum tabel penolakan, bahwa pencarian berakhir ketika kecocokan ditemukan, dan akses itu diberikan ketika tidak ada kecocokan sama sekali.

Contoh-contoh menggunakan host dan nama domain. Mereka dapat ditingkatkan dengan memasukkan alamat dan / atau informasi jaringan / netmask, untuk mengurangi dampak dari kegagalan pencarian server nama sementara.

MOSTLY CLOSED

Dalam hal ini, akses ditolak secara default. Hanya host yang diotorisasi secara sah yang diizinkan mengakses.

Kebijakan default (tidak ada akses) diimplementasikan dengan file penolakan sepele:

/etc/hosts.deny: ALL: ALL

Ini menolak semua layanan untuk semua host, kecuali mereka diizinkan akses oleh entri dalam file izin.

Host yang diotorisasi secara eksplisit tercantum dalam file izin. Sebagai contoh:

/etc/hosts.allow: ALL: LOCAL @some_netgroup
SEMUA: .foobar.edu KECUALI terminalserver.foobar.edu

Aturan pertama memungkinkan akses dari host di domain lokal (tidak ada `. 'Dalam nama host) dan dari anggota netgroup some_netgroup . Aturan kedua memungkinkan akses dari semua host di domain foobar.edu (perhatikan titik utama), dengan pengecualian terminalserver.foobar.edu .

MOSTLY OPEN

Di sini, akses diberikan secara default; hanya host yang ditentukan secara eksplisit yang ditolak layanannya.

Kebijakan default (akses yang diberikan) membuat file yang diizinkan menjadi berlebihan sehingga dapat dihilangkan. Host yang secara eksplisit tidak resmi tercantum dalam file penolakan. Sebagai contoh:

/etc/hosts.deny: ALL: some.host.name, .some.domain
SEMUA KECUALI in.fingerd: other.host.name, .other.domain

Aturan pertama menyangkal beberapa host dan domain semua layanan; aturan kedua masih mengizinkan permintaan jari dari host dan domain lain.

BOOBY TRAPS

Contoh berikut memungkinkan permintaan tftp dari host di domain lokal (perhatikan titik utama). Permintaan dari host lain ditolak. Alih-alih file yang diminta, probe jari dikirim ke host yang menyinggung. Hasilnya dikirimkan ke superuser.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain /etc/hosts.deny: in.tftpd: ALL: spawn (/ some / where / safe_finger -l @% h | \ / usr / ucb / mail -s% d-% h root) &

Perintah safe_finger dilengkapi dengan tcpd wrapper dan harus dipasang di tempat yang sesuai. Ini membatasi kemungkinan kerusakan dari data yang dikirim oleh server jari jauh. Ini memberikan perlindungan yang lebih baik daripada perintah jari standar.

Perluasan urutan% h (host klien) dan% d (nama layanan) dijelaskan di bagian pada perintah shell.

Peringatan: jangan jebakan-jebakan daemon jari Anda, kecuali Anda siap untuk putaran jari tanpa batas.

Pada sistem firewall jaringan trik ini dapat dilakukan lebih jauh. Firewall jaringan yang khas hanya menyediakan satu set layanan terbatas ke dunia luar. Semua layanan lain dapat "disadap" seperti contoh tftp di atas. Hasilnya adalah sistem peringatan dini yang sangat baik.

LIHAT JUGA

tcpd (8) program tcp / ip daemon wrapper. tcpdchk (8), tcpdmatch (8), program uji.

Penting: Gunakan perintah man ( % man ) untuk melihat bagaimana perintah digunakan pada komputer khusus Anda.