Bagaimana cara menonaktifkan penerusan port lokal SSH?

20

Saya memiliki server yang menjalankan Ubuntu dan daemon OpenSSH. Sebut saja S1.

Saya menggunakan server ini dari mesin klien (sebut saja salah satunya C1) untuk melakukan reverse tunnel SSH dengan menggunakan penerusan port jarak jauh, misalnya:

ssh -R 1234:localhost:23 login@S1

Pada S1, saya menggunakan file sshd_config default. Dari apa yang saya lihat, siapa pun yang memiliki kredensial yang tepat {login, pwd} pada S1 dapat login ke S1 dan melakukan penerusan port jarak jauh dan penerusan port lokal. Kredensial semacam itu bisa menjadi sertifikat di masa depan, jadi menurut saya, siapa pun yang meraih sertifikat dapat masuk ke S1 dari tempat lain (tidak harus C1) dan karenanya membuat penerusan pelabuhan lokal.

Bagi saya, mengizinkan penerusan porta lokal terlalu berbahaya, karena memungkinkan untuk membuat semacam proxy publik. Saya mencari cara untuk menonaktifkan hanya penerusan -L.

Saya mencoba yang berikut ini, tetapi ini menonaktifkan penerusan lokal dan jarak jauh:

AllowTcpForwarding No

Saya juga mencoba yang berikut ini, ini hanya akan memungkinkan -L ke SX: 1. Ini lebih baik daripada tidak sama sekali, tetapi tetap bukan yang saya butuhkan, yang merupakan opsi "tidak ada".

PermitOpen SX:1

Jadi saya bertanya-tanya apakah ada cara, sehingga saya bisa melarang semua port lokal ke depan untuk menulis sesuatu seperti:

PermitOpen none:none

Apakah mengikuti ide yang bagus?

PermitOpen localhost:1
SCO
sumber
jadi, seperti biasa, mari kita uraikan ini: apa masalah Anda yang sebenarnya , mengapa Anda ingin mengatur sesuatu seperti ini untuk perangkat seluler / tertanam, apa yang ingin Anda selesaikan?
akira
Masalah yang harus dipecahkan di sini adalah untuk dapat membuka sesi Telnet, di mana saja dari Internet, ke perangkat seluler / tertanam yang terhubung ke Internet, dengan mempertimbangkan bahwa perangkat tersebut mungkin NATed, atau firewall, maka tidak dapat dijangkau dari internet.
SCO
telnet .. untuk apa? untuk meninju lubang ke firewall google untuk 'setrum'
akira

Jawaban:

16

siapa pun dengan kredensial masuk dapat memunculkan instance sshd mereka sendiri, berjalan pada port acak dan mengizinkan apa pun yang mereka inginkan, termasuk -L penerusan lokal:

% /usr/sbin/sshd -d -f mysshd.config -p 12345

jika Anda tidak mempercayai pengguna untuk melakukan sesuatu dengan mesin Anda, maka Anda seharusnya tidak mengizinkan mereka untuk masuk terlebih dahulu.

(Btw, flag -D juga "proxy-problematic")

akira
sumber
Yah saya kira saya dapat mengatur akun yang sangat membatasi untuk tujuan ini (mis. Tetap pengguna ke rumahnya, tidak ada daftar, tidak ada browsing sistem file), sehingga tidak dapat memulai dan sshd (atau menginstal dan memulai biner sshd). Intinya adalah bahwa klien seharusnya merupakan perangkat yang disematkan. Tetapi karena mereka mungkin akan menyematkan sertifikat dan flash memoery mereka dapat dibuang, kemungkinan sertifikat akan bocor, sehingga memungkinkan siapa saja untuk masuk ke S1.
SCO
Menggunakan ChrootDirectory untuk pengguna tertentu akan melakukan trik, akan coba itu!
SCO
1
Di otor_keys, setel command="/sbin/nologin". Ini seharusnya mencegah mereka menjalankan perintah apa pun di server.
justis
Pernyataan "siapa pun yang memiliki kredensial masuk dapat memunculkan <apa pun> sendiri" salah. sshdapat digunakan untuk terhubung ke akun yang memiliki shell login yang sangat terbatas yang tidak mengizinkan ini. Port forwarding adalah lubang keamanan dalam cangkang yang dibatasi. Selain menjalankan perintah yang diizinkan, pengguna dapat membuat terowongan.
Kaz
3
Kutipan dari sshd_confighalaman manual: Perhatikan bahwa menonaktifkan penerusan TCP tidak meningkatkan keamanan kecuali jika pengguna juga tidak diberi akses shell , karena mereka selalu dapat menginstal penerusan mereka sendiri. (Penekanan milikku).
Kaz
17

Solusi lain adalah dengan hanya mengizinkan penerusan port ke pengguna tertentu:

Dari SSH: Panduan definitif

Port forwarding dapat diaktifkan atau dinonaktifkan secara global di sshd. Ini dilakukan dengan kata kunci konfigurasi seluruh server AllowTcpForwarding di / etc / sshd_config. Kata kunci tersebut mungkin memiliki nilai ya (default, memungkinkan penerusan) atau tidak (menonaktifkan penerusan):

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

Selain itu, SSH2 memiliki opsi berikut:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

Sintaksnya sama dengan opsi AllowUsers dan AllowGroups. [Bagian 5.5.2.1, "Kontrol akses akun"] Mereka menentukan daftar pengguna atau grup yang diizinkan menggunakan penerusan porta; server menolak untuk menghormati permintaan penerusan port untuk orang lain. Perhatikan bahwa ini merujuk ke akun target sesi SSH, bukan nama pengguna klien (yang sering tidak diketahui).

...

Penting untuk menyadari bahwa arahan dalam bagian ini tidak benar-benar mencegah penerusan port, kecuali jika Anda juga menonaktifkan login interaktif dan membatasi program apa yang mungkin dijalankan di sisi jarak jauh. Jika tidak, pengguna yang berpengetahuan hanya dapat menjalankan aplikasi penerusan porta sendiri selama sesi SSH. Pengaturan ini saja mungkin merupakan pencegah yang cukup dalam komunitas nonteknis, tetapi mereka tidak akan menghentikan seseorang yang tahu apa yang dia lakukan.

Kristen
sumber
1
Pada dasarnya saya hanya akan memiliki satu pengguna disediakan untuk S1. AFAIU, dalam kasus khusus ini, menggunakan AllowTcpForwardingForUsers / AllowTcpForwardingForGroups tidak akan melakukan trik, kan? Melarang login interaktif adalah ide yang bagus karena akan membuat pengguna tidak dapat memulai binari. Tetapi setiap klien masih akan diizinkan untuk menggunakan sintaks -L kan? Jadi untuk saat ini, opsi terbaik adalah: 1 / Nonaktifkan login interaktif, 2 / PermitOpen dengan nama host palsu: port. Apakah saya melewatkan sesuatu?
SCO
Cara terbaik untuk memverifikasi ini, adalah dengan mencoba pengaturan.
Christian
Saya tidak dapat melihat opsi ini di perangkat lunak OpenSSH gratis. Google for AllowTcpForwardingForUsersmengungkapkan bahwa itu dikonfigurasikan dalam sshd2_config, yang digunakan dalam beberapa program komersial. Lihat salah satu jawaban untuk: superuser.com/questions/384643/…
Kaz
^ OpenSSH memiliki Matchblok dalam konfigurasi. Anda dapat Matchpada pengguna dan grup, dan melampirkan bagian AllowTcpForwardingdalamnya.
Kaz
2

Sekarang ada opsi untuk hanya memungkinkan penerusan lokal / jarak jauh.

AllowTcpForwarding Menentukan apakah penerusan TCP diizinkan. Opsi yang tersedia adalah "ya" atau "semua" untuk memungkinkan penerusan TCP, "tidak" untuk mencegah semua penerusan TCP, "lokal" untuk mengizinkan penerusan lokal (dari perspektif ssh (1)) saja atau "jarak jauh" untuk memungkinkan jarak jauh hanya meneruskan . Standarnya adalah "ya". Perhatikan bahwa menonaktifkan penerusan TCP tidak meningkatkan keamanan kecuali jika pengguna juga tidak diberi akses shell, karena mereka selalu dapat menginstal penerusan mereka sendiri.

Jadi, seperti yang sudah disebutkan, Anda harus mengatur shell ke nologin juga.

Markus Rathgeb
sumber
0

Solusi saya untuk masalah ini adalah menambahkan: PermitOpen fo.local: 80 di bagian utama sshd_config.

Ini hanya menolak permintaan penerusan lokal selain fo.local: 80.

MrMisu
sumber
0

Saya mencari cara untuk menonaktifkan hanya penerusan -L

Jika saya mengerti Anda dengan benar, pengguna Anda memiliki akses shell penuh, tetapi Anda tidak ingin mereka dapat membuka koneksi ke internet.

"Port forwarding lokal" yang diizinkan oleh SSH hanyalah salah satu cara yang mungkin untuk melakukan itu. Lainnya termasuk meluncurkan sebuah instance dari socat, netcat, atau nomor lain dari alat.

Cara terbaik untuk mengontrol koneksi keluar dan masuk di Linux adalah Netfilter, alias IPTables.

Ini memiliki modul khusus yang disebut pemilik ( ipt_owner) yang memungkinkan Anda untuk mencocokkan berbagai karakteristik pembuat paket, untuk paket yang dihasilkan secara lokal. Ini berlaku di OUTPUTdan POSTROUTINGrantai.

Anda dapat menggunakannya untuk menolak paket keluar yang dihasilkan oleh kelompok pengguna tertentu, sehingga melarang segala jenis penerusan porta, bukan hanya -Lopsi SSH.

Tobia
sumber