Bisakah saya menonaktifkan akses shell interaktif saat tunneling traffic web melalui SSH?

12

Saya melihat penerapan SSH tunneling sebagai solusi VPN murah bagi pengguna luar untuk mengakses aplikasi web yang menghadap Intranet saja.

Saat ini saya menggunakan Ubuntu Server 10.04.1 64 bit dengan OpenSSH diinstal.

Saya menggunakan kotak Putty pada Windows untuk membuat terowongan pada port lokal ke server ssh saya.

start putty -D 9999 mysshserver.com -N

Saya kemudian menggunakan kirim Firefox untuk menggunakan proxy SOCKS di localhost: 9999.

Bendera -N akan menonaktifkan shell interaktif dari sisi klien. Apakah ada cara untuk melakukan ini di sisi server?

Selain menonaktifkan akses root, menggunakan otentikasi kunci rsa, dan mengubah port default; Adakah praktik keamanan jelas lain yang harus saya ikuti untuk tujuan ini? Tujuan saya adalah untuk hanya dapat mengarahkan lalu lintas web.

CT.
sumber

Jawaban:

15

Setelah empat tahun, jawaban ini layak diperbarui. Meskipun awalnya saya menggunakan authorized_keyssendiri dan mungkin akan menggunakannya masih dalam beberapa kasus tertentu, Anda juga dapat menggunakan sshd_configfile konfigurasi server pusat .

sshd_config

Anda dapat menetapkan (untuk kasus penggunaan khusus Anda) grup, seperti proxy-onlyatau Matchpengguna individu. Dalam sshd_config. Ini dilakukan setelah pengaturan global dan mencabut, mengulangi atau memperbaiki beberapa pengaturan yang diberikan dalam pengaturan global.

Catatan: beberapa sintaks / arahan yang digunakan dalam sshd_config(5)didokumentasikan manuntuk halaman ssh_config(5). Khususnya pastikan untuk membaca bagian POLA dari ssh_config(5).

Untuk grup ini berarti Matchblok Anda akan mulai seperti ini:

Match group proxy-only

Anda bisa Matchkriteria sebagai berikut: User, Group, Host, LocalAddress, LocalPortdan Address. Untuk mencocokkan beberapa kriteria cukup koma-pisahkan pasangan kriteria-pola (di group proxy-onlyatas).

Di dalam blok seperti itu, yang secara tradisional diindentasi sesuai untuk singkatnya (tetapi tidak perlu), Anda kemudian dapat mendeklarasikan pengaturan yang ingin Anda terapkan untuk grup pengguna tanpa harus mengedit setiap authorized_keysfile tunggal untuk anggota grup itu.

The no-ptypengaturan dari authorized_keysakan dicerminkan oleh PermitTTY nopengaturan dan command="/sbin/nologin"akan menjadi ForceCommand /sbin/nologin.

Selain itu Anda juga dapat mengatur lebih banyak pengaturan untuk memuaskan paranoia admin, seperti chroot-menggunakan pengguna ke dalam folder rumahnya dan berakhir dengan sesuatu seperti ini:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

(periksa sendiri apakah Anda perlu atau ingin komentar keluar dan batalkan komentar yang diperlukan)

Ini %hadalah token yang diganti oleh direktori home pengguna ( %uakan menghasilkan nama pengguna dan %%tanda persen). Saya telah menemukan ChrootDirectorysangat berguna untuk membatasi sftp-onlypengguna saya :

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

Harap diingat bahwa hanya arahan tertentu yang dapat digunakan dalam satu Matchblok. Konsultasikan manhalaman sshd_config(5)untuk detail (mencari Match).

kunci yang diizinkan

NB: bagian di bawah komentar ini adalah jawaban asli saya. Sementara itu - tetapi itu juga tergantung pada fitur-fitur dari sshdversi persis Anda - saya akan menggunakan metode yang dijelaskan di atas dalam banyak kasus.

Ya, Anda bisa, sehebat yang Anda bisa berikan kunci publik. Selain nologin seperti yang direkomendasikan oleh ajdecon, saya akan menyarankan pengaturan berikut di depan entri kunci di authorized_keys:

no-pty ssh-rsa ...

No pty memberitahu sisi server bahwa tidak ada pseudo-terminal yang harus dialokasikan untuk kunci itu.

Anda juga bisa memaksakan eksekusi sesuatu seperti nologin untuk kunci tertentu dengan menambahkan ini:

command="/sbin/nologin",no-pty ssh-rsa ...
0xC0000022L
sumber
Harap dicatat bahwa no-ptysendirian tidak akan mencegah pengguna kunci dari menjalankan perintah. Lihat superuser.com/q/1230979/195460 .
Tad Lispy
3

Untuk setiap pengguna tunneling saja, ubah shell login mereka ke / sbin / nologin. Dengan cara itu pengguna Anda tidak akan dapat mengakses shell di server, tetapi masih dapat menjalankan pengaturan ssh tunnel dari klien mereka.

ajdecon
sumber
0

Saya tahu ini mungkin bukan jawaban yang Anda cari, tetapi apakah Anda sudah mempertimbangkan untuk menggunakan OpenVPN sebagai alternatif?

Matt Beckman
sumber
0

Jika Anda siap untuk menyerahkan otentikasi pengguna / pass dan menggunakan kunci untuk masuk, Anda dapat menentukan parameter s untuk setiap kunci publik.

Parameter penting adalah:

command = "command"

Menentukan bahwa perintah dijalankan kapan pun kunci ini digunakan untuk otentikasi. Perintah yang diberikan oleh pengguna (jika ada) diabaikan.

dan

membatasi

Aktifkan semua pembatasan, yaitu nonaktifkan port, agen dan penerusan X11, serta nonaktifkan alokasi PTY dan eksekusi ~ / .ssh / rc.

dan akhirnya

port-forwarding Mengaktifkan port forwarding yang sebelumnya dinonaktifkan oleh opsi pembatasan.

Dengan ini, Anda dapat membatasi pengguna pasangan kunci tertentu apa yang dapat dilakukannya dengan sesi SSH.

Akan terlihat seperti ini:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>
asdmin
sumber
Saya melihat jawaban saya agak berlebihan untuk serverfault.com/a/242411/13364 , tapi saya meninggalkannya karena parameter 'membatasi' dan 'port-forwarding', yang menurut saya lebih baik daripada 'no-pty'.
asdmin
-1

Saya sarankan mencoba Tunnelier . Ini sih jauh lebih mudah untuk mengkonfigurasi / mengelola.

Bael
sumber