Kami memiliki server benteng B. Kita perlu SSH dari A hingga B ke C, menggunakan kunci pribadi.
Apa pilihan yang lebih baik:
Letakkan kunci SSH pribadi di server B. Kita membaca bahwa itu ide yang buruk untuk melakukannya di lingkungan produksi.
Dari sini :
Jangan pernah tempatkan kunci pribadi SSH Anda pada instance benteng. Sebagai gantinya, gunakan penerusan agen SSH untuk terhubung pertama kali ke bastion dan dari sana ke instance lain dalam subnet pribadi. Ini memungkinkan Anda menyimpan kunci pribadi SSH hanya di komputer Anda.
Gunakan penerusan agen SSH . Untuk mengatur penerusan agen, saya perlu mengizinkan TCP Forwarding. Saat mengatur penerusan agen, file soket dibuat pada host penerusan, yang merupakan mekanisme dimana kunci dapat diteruskan ke tujuan. Dalam pengaturan Bastion di AWS:
Penerusan TCP: Mengatur nilai ini ke true akan mengaktifkan penerusan TCP (penerowongan SSH). Ini bisa sangat berguna tetapi juga merupakan risiko keamanan, jadi kami sarankan Anda menjaga pengaturan default (dinonaktifkan) kecuali diminta
Juga dari sini :
Penerusan Agen SSH dianggap berbahaya
Apa yang lebih baik Bagaimana dengan alternatif dari tautan kedua: ProxyCommand , saya memahaminya membantu dengan masalah file socket, tapi tetap saya pikir saya harus mengaktifkan penerusan TCP, jadi apakah cukup aman?
ssh hostb
perintah, sehingga dapat mencari hostb di konfigurasi lokal dan tahu bahwa itu perlu terhubung melalui hosta. Tidak bisa melakukan itu jika Anda meletakkan konfigurasi pada hosta ...Jawaban:
Gunakan ProxyCommand atau ProxyJump
Saya akan merekomendasikan untuk menggunakan
ProxyCommand
(atau bahkan lebih baikProxyJump
karena sintaks lebih mudah tetapi memerlukan openssh 7.3+ saya pikir di sisi klien), dan Anda tidak perlu menggunakan kunci pribadi di Bastion, semuanya tetap lokal.Contoh dengan ProxyJump
Di komputer klien Anda, Anda menulis file di bawah
~/.ssh/config
dengan konten yang mirip dengan di bawah ini:Kemudian lakukan
ssh srvC
akan menghubungkan Anda ke C melalui B (bastion) tanpa Agen Forwarding atau menggunakan kunci pribadi ke bastion.Dalam contoh di atas, "bastion" adalah alias untuk host Bastion Anda dan srvC adalah alias untuk server Anda C. Di dalam
HostName
Anda perlu memasukkan IP atau nama domain yang benar-benar berkualifikasi untuk host Anda. Untuk pengguna, Anda perlu memperbaruiUser
untuk nama login yang benar di Bastion dan server C. AkhirnyaIdentityFile
adalah opsional jika Anda menggunakan agen lokal (mis. KeeAgent atau ssh-agent), tetapi jika tidak berjalan maka itu juga akan bekerja dan minta Anda untuk setiap frasa sandi utama.Menyebarkan kunci publik
Tentu saja Anda perlu menggunakan kunci publik untuk kedua bastion dan srvC. Anda dapat menggunakan (tanda $ hanya untuk menggambarkan prompt, jangan mengetiknya):
Catatan: di atas hanya akan berfungsi jika otentikasi kata sandi masih diizinkan. Setelah penyebaran di atas dan memverifikasi bahwa semuanya berfungsi sebagaimana mestinya, Anda harus melarang otentikasi kata sandi pada 2 server.
Contoh dengan ProxyCommand bukan ProxyJump
Jika Anda memiliki versi OpenSSH yang lebih lama yang tidak mendukung
ProxyJump
(di sisi klien), maka ganti:oleh
Sejauh yang saya mengerti, ini mirip.
sumber
Saya melihat jawaban tentang ProxyJump. Mari kita bicara tentang ProxyCommand .
Tapi tunggu, tunggu! Saya dapat menulis kepada Anda cara meretas server yang menggunakan penerusan Agen, yang akan jauh lebih mudah untuk memahami perbedaannya!
Ayo kembali!
Untuk langkah-langkah dasar: Anda dapat membaca posting saya di sini
Langkah-langkah dasar adalah sebagai berikut:
Cara menggunakan AgentForwarding
-Buat konfigurasi di ~ / .ssh / config
-Tambahkan kunci otentikasi Anda ke ssh-agent
-Sambungkan ke rumah benteng
-Hubungkan server aplikasi dari benteng
Peretasan!
Anda mungkin, mengajukan pertanyaan kepada saya:
Apakah server saya aman? Dan jawabannya cukup sederhana:
Mengapa?
Dan di mana masalahnya?
Mengapa?
Bagaimana cara meretas server jika Anda mengompromikan bastion host?
Lacak Target
Dalam direktori / tmp Anda mungkin melihat sesuatu seperti itu:
Mari kita buka file sementara
Mari kita lihat koneksi ke id proses ini.
hasil:
dan siapa yang terhubung?
hasil:
Kita juga dapat melihat file socket:
hasil:
Dan apa yang terjadi ketika klien akan terhubung ke server jauh? Ayo lihat:
Kita bahkan dapat melihat apakah file socket digunakan menggunakan netstat:
Mencuri info Socket dan alamat IP
Sekarang kita perlu mencuri informasi soket saat sesi bastion host terbuka . Oh, kita juga perlu IP server tujuan , jadi gunakan saja netstat:
Langkah terakhir untuk menggunakan file socket yang diteruskan
Periksa apakah kunci sudah dimuat .
Hasilnya harus seperti itu :
Server diretas, bagaimana cara memperbaiki masalah keamanan?
Perintah proxy
Untuk operasi dasar: cara mentransfer file melalui server (dari klien ke server, server ke klien), Anda dapat membaca posting saya di sini
Kesimpulan
Informasi lebih lanjut, lihat blog saya . Selain itu saya punya beberapa screeenshots, jadi mungkin bermanfaat untuk Anda.
sumber
channel 0: open failed: administratively prohibited: open failed. stdio forwarding failed.
. Apakah Anda punya ide mengapa? Di log yang aman saya melihat:refused local port forward: originator 127.0.0.1 port 65535, target *app-ip* port 22
Cukup gunakan penerusan agen SSH seperti kebanyakan orang lain lakukan.
Keuntungan: tidak ada kunci yang disimpan di benteng yang dapat disalahgunakan.
Semoga itu bisa membantu :)
sumber