Bagaimana saya bisa membatasi penerusan port ssh * remote *?

22

Saya perlu membatasi port mana saja yang dapat ' ssh -R' diteruskan oleh pengguna dari jarak jauh .

Saya tahu tentang permitopenopsi pada berwenang_kunci, tetapi seperti yang tertulis di halaman manual, itu hanya membatasi ssh -Lpenerusan port lokal

Seperti yang dibahas di sini, pengguna akan mendapatkan yang sama netcatatau serupa, tetapi dalam hal ini pengguna tidak memiliki akses shell

Saya juga menemukan utas ini yang berbicara tentang menggunakan selinux atau LD_PRELOAD, tapi saya tidak pernah mengkonfigurasi selinux sebelumnya dan tidak dapat menemukan info tentang cara melakukannya dengan LD_PRELOAD.

mungkin seseorang telah membuat patch untuk openssh untuk mengimplementasikannya?

EDIT: Saya sudah menemukan laporan bug ini jadi saya kira itu belum diterapkan

Llu
sumber
Sudahkah Anda menemukan solusi untuk ini?
alex88
Saya tidak, saya kira itu tidak dapat dilakukan sampai bug di atas ditutup atau seseorang menulis tambalan untuk mengimplementasikan ini
Llu's

Jawaban:

3

Ini telah diimplementasikan dalam OpenSSH 7.8p1, yang dirilis pada 2018-08-24. Kutipan dari catatan rilis:

tambahkan direktif PermitListen ke sshd_config (5) dan opsi permitlisten = berwenang_kunci yang mengontrol yang mendengarkan alamat dan nomor port yang dapat digunakan dengan penerusan jarak jauh (ssh -R ...).

jujur
sumber
4

Ada opsi no-port-forwardingyang dapat Anda gunakan, yang mencegah semua penerusan porta. Hadir setidaknya pada OpenSSH 4.3p2 (CentOS 5.3 - mesin tertua yang dapat saya akses). Letakkan di tempat yang sama dengan yang Anda taruh permitopen.

utopiabound
sumber
13
Menonaktifkan port forwarding sepenuhnya tampaknya berlebihan dan tidak cocok untuk pertanyaan itu. Saya berasumsi OP ingin membatasinya , namun mengizinkan beberapa penerusan porta jarak jauh tertentu.
gertvdijk
2
Ya, saya perlu mengizinkan beberapa port penerusan
Llu's
0

Tidak mungkin membatasi penggunaan ssh. Mungkin selinux atau iptables dapat digunakan untuk tujuan itu. Namun, ada strategi alternatif yang mungkin atau tidak sesuai dengan kebutuhan Anda. Gunakan penjilidan ke soket UNIX. Ini harus tersedia mulai dari openssh versi 6.8.

Saat menggunakan soket, Anda memiliki sistem file ACL (meskipun soket itu tergantung pada * nix) yang Anda inginkan dan Anda dapat menggunakannya untuk mencegah satu pengguna mengikat ke soket yang lain. Namun, itu tidak mencegah pengikatan ke port dengan cara apa pun, jadi tergantung pada kasus penggunaan Anda mungkin tidak membantu, tetapi mungkin port tidak masalah jika Anda dapat secara konsisten hanya menggunakan soket.

Dengan soket UNIX yang menangani file soket yang menggantung mungkin bermasalah karena penerbit terbalik mencoba menyambung kembali. Saya punya pertanyaan lain (dan jawaban) untuk masalah itu. Singkatnya, Anda mungkin juga ingin menggunakan StreamLocalBindUnlink yes:

Bagaimana cara membersihkan SSH reverse tunnel socket setelah koneksi ditutup?

Timo
sumber
-1

Gandakan: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

Sepertinya Anda dapat menggunakan yang berikut ini?

Di file konfigurasi server ada opsi PermitOpen . Opsi ini dapat digunakan untuk menentukan host dan port yang ke depannya dapat dibuat. Opsi ini dapat digunakan di dalam blok Match, sehingga dapat dibatasi oleh pengguna, grup, atau nama host atau pola alamat IP.

Sunting: Jadi di Server konfigurasi tambahkan yang berikut

Host PermitOpen: port

PermitOpen IPv4_addr: port

PermitOpen [IPv6_addr]: port

PHoBwz
sumber
1
Hanya di U&L yang dapat ditandai sebagai duplikat.
GAD3R
1
Seperti yang dinyatakan dalam pertanyaan, itu untuk -L dan itu sudah dikenal sebagai solusi non
alex88
1
Apakah akan ada solusi untuk ini (selain iptables)?
davesave