Note : Tulisan ini merupakan lanjutan dari 3 tulisan sebelumnya, yaitu
- Secure Shell (SSH)
- Instalasi SSH Server – Ubuntu 20
- Hardening SSH Server – Ubuntu 20
- SSH Public Key Authentication (SSH Keys) – Ubuntu 20
Seperti yang kita ketahui bersama, terdapat 2 metode autentikasi yang bisa digunakan untuk melakukan remote login ke SSH server. Autentikasi menggunakan password, serta autentikasi menggunakan public keys. Walaupun 2 metode autentikasi tersebut sudah cukup powerful dan bisa menjamin keamanan server, tetapi hal tersebut belum cukup. Bisa saja kan password strong yang sudah kita buat diketahui oleh orang lain dikarenakan kecerobohan kita, atau bisa saja kan komputer personal yang sudah dilengkapi public key digunakan oleh orang lain untuk menyusupi SSH server kita.
Maka dari itu, perlu adanya layer tambahan di sisi autentikasi remote login SSH. Layer tambahan tersebut adalah one-time password (OTP). Seperti namanya, OTP merupakan kode yang hanya bisa dipakai sekali, sehingga kode-kode yang di generate dari waktu ke waktu pun akan berbeda-beda. Jadi, nantinya remote login SSH akan menggunakan metode 2 factor authentication, dimana remote login hanya bisa dilakukan apabila password & OTP yang dimasukkan benar. Jika password yang dimasukkan benar, tetapi kode OTP yang dimasukkan salah maka remote login akan gagal.
Kode OTP untuk SSH ini digenerate menggunakan aplikasi khusus di android dalam periodik waktu tertentu, misalnya kode digenerate ulang 1 menit sekali (Tergantung jangka waktu yang ditentukan). Jadi selama kita tidak memberitahukan kode OTP yang ada di android kita, maka remote login tidak akan bisa dilakukan oleh orang lain.
Note : Dengan konfigurasi 2 factor authentication yang akan dilakukan, maka public key tidak akan berfungsi sebagaimana mestinya. Password tetap perlu dimasukkan walaupun SSH key client sudah ada di server.
Berikut adalah tahapan-tahapan yang perlu dilakukan untuk mengaktifkan SSH 2 factor authentication.
Instalasi Google Authenticator (Server)
Untuk mengaktifkan 2 factor authentication, SSH server membutuhkan modul yang bernama libpam-google-authenticator.
- Remote login ke SSH server
- Lakukan instalasi modul google authenticator dengan perintah berikut
# sudo apt-get update # sudo apt-get install libpam-google-authenticator -y
- Edit file konfigurasi authentication module /etc/pam.d/sshd dengan perintah “sudo nano /etc/pam.d/sshd” atau “sudo vi /etc/pam.d/sshd” lalu tambahkan baris berikut
auth required pam_google_authenticator.so
- Edit file konfigurasi SSH dengan perintah “sudo nano /etc/ssh/sshd_config” atau “sudo vi /etc/ssh/sshd_config” lalu cari tambahkan baris berikut
ChallengeResponseAuthentication no
Ubah bagian “no” menjadi “yes”
ChallengeResponseAuthentication yes
- Restart service SSH dengan perintah berikut
# sudo systemctl restart ssh
Instalasi Aplikasi Authenticator (Android)
Sebelum melanjutkan ke tahapan berikutnya, ada baiknya kita mempersiapkan terlebih dahulu aplikasi authenticator di android yang akan menjadi generator kode OTP untuk remote login. Ada beberapa pilihan authenticator yang bisa dipilih, beberapa contohnya adalah “Google Authenticator”, “Microsoft Authenticator” dan “Authy”. Saya pribadi biasanya menggunakan aplikasi Google Authenticator.
- Download & install aplikasi authenticator dari play store atau app store, bisa menggunakan “Google Authenticator”, “Microsoft Authenticator”, “Authy” atau aplikasi lainnya
- Open aplikasi authenticator
- Isi informasi atau data-data yang diperlukan, misalnya email atau nomor handphone. Informasi tersebut digunakan untuk backup, incase mobile phone yang digunakan mengalami problem.
Aktivasi 2 Factor Authentication User
Untuk mengaktifkan 2 factor authentication, perlu adanya aktivasi dari sisi user yang digunakan untuk remote login, dalam hal ini user yang saya gunakan untuk remote login adalah user “remote“. Dengan demikian, maka saya hanya akan melakukan aktivasi 2 factor authentication ini di sisi user remote. Tetapi jika rekan-rekan menggunakan beberapa user yang berbeda untuk remote login, maka langkah-langkah aktivasi ini perlu dilakukan di sisi semua user yang digunakan untuk remote login.
- Remote login ke SSH server
- Jalankan perintah “google-authenticator” untuk melakukan aktivasi
Saat aktivasi, kita akan diberikan beberapa pertanyaan terkait dengan konfigurasi yang akan dipilih. Berikut adalah rekomendasi jawaban untuk pertanyaan-pertanyaan yang muncul saat aktivasi :
– Make tokens “time-base””: yes
– Update the .google_authenticator file: yes
– Disallow multiple uses: yes
– Increase the original generation time limit: no
– Enable rate-limiting: yes
# google-authenticator Do you want authentication tokens to be time-based (y/n) y Warning: pasting the following URL into your browser exposes the OTP secret to Google: https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/remote@server%3Fsecret%3DZMACAWK6MW5ICPAHBY6Z2KL4RU%26issuer%3Dserver {barcode} Your new secret key is: ZMACAWK6MW5ICPAHBY6Z2KL4RU Your verification code is 952290 Your emergency scratch codes are: 99060135 79902640 36073296 87454165 77595074 Do you want me to update your "/home/remote/.google_authenticator" file? (y/n) y Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y By default, a new token is generated every 30 seconds by the mobile app. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) n If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting? (y/n) y
- Open aplikasi authenticator yang ada di android (Disini saya menggunakan aplikasi google-authenticator, tetapi rekan-rekan tidak perlu khawatir karena secara garis besar langkah-langkah penambahan OTP akun di setiap aplikasi tidak berbeda jauh)
- Klik logo + untuk menambahkan OTP SSH server, lalu pilih “Scan a QR Code“
- Arahkan kamera android ke barcode hasil dari aktivasi 2 FA user remote login. Berikut contoh barcode yang muncul di SSH server saya
- Atau jika barcode tidak bisa discan karena terpotong di terminal yang ukurannnya terlalu kecil, maka bisa menggunakan cara memasukkan secret key. Klik logo + untuk menambahkan OTP SSH server, lalu pilih “Enter a setup key“
- Masukkan nama sebagai identitas OTP, Secret key pada kolom Your key, lalu klik Add
Remote Login SSH dengan 2 Factor Authentication
- Lakukan remote login ke SSH server
- Masukkan password & kode OTP yang ada pada aplikasi authenticator android
# ssh remote@192.168.80.199 -p 2020 Password: (Masukan password user) Verification code: (Masukkan kode OTP - terdiri dari 6 digit)
2 Factor Authentication + Public Key
Supaya lebih aman lagi, kita juga bisa menambahkan metode autentikasi public key (3 Factor Authentication). Konfigurasi ini mirip seperti disable password authentication, remote login harus dilakukan menggunakan public key, hanya saja setelah menggunakan public key password & kode OTP tetap harus dimasukkan.
Tetapi seperti yang sudah saya sampaikan pada tulisan sebelumnya (https://colamen.id/ssh-public-key-authentication-ssh-keys/), konfigurasi ini tidak saya rekomendasikan karena tanpa public key remote login tidak bisa dilakukan walaupun rekan-rekan mengetahui password & kode OTPnya.
Berikut adalah langkah-langkah untuk mengaktifkan konfigurasi ini.
- Remote login ke SSH server
- Edit file konfigurasi SSH lalu tambahkan baris berikut
AuthenticationMethods publickey,keyboard-interactive
- Restart service SSH dengan perintah berikut
# sudo systemctl restart ssh
- Lakukan remote login kembali menggunakan public key dan juga tanpa public key
# Public key# ssh remote@192.168.80.199 -p 2020 -i /home/raihan/.ssh/server-test Password: (Masukan password user) Verification code: (Masukkan kode OTP)
# Tanpa public key
# ssh remote@192.168.80.199 -p 2020 remote@192.168.80.199: Permission denied (publickey).