Bagi para System Administrator, sebagai pengganti Telnet penggunaan SSH pasti sudah merupakan makanan sehari-hari yang banyak digunakan untuk mengakses sistem berbasis Linux/Unix. Meskipun password yang dikirim ke server sudah dienkripsi dan tidak berbentuk plaintext lagi, installasi OpenSSH secara default dirasa kurang aman.
Kali ini saya ingin berbagi trik yang sebenarnya sudah umum, untuk sedikit lebih memperketat akses SSH. Yaitu men-disable akses SSH untuk user root
, menggunakan public dan private key, sampai mengubah port default. Selain itu saya juga ingin sedikit berbagi trik agar proses memanage server(s) menjadi lebih mudah dan simple.
Pada diskusi kali ini dibutuhkan (atau saya menggunakan) :
- Client PC : Linux dengan desktop environment KDE
4.8
. - Server SSH (Remote PC) : Linux dengan IP
202.150.169.245
. - Mengerti sedikit dasar Linux CLI seperti
chmod
,ssh
,groupadd
,useradd
. - Mampu menggunakan text editor seperti
vi
/vim
/nano
/pico
, dll. - dan setumpuk kesabaran yang ditumis dengan rasa keingintahuan (yang ini lupakan).
Disable Akses root Melalui SSH
Root
user adalah user yang pasti ada pada sistem Unix/Unix-Like, jika kita tidak mendisable user tersebut, maka akan mempermudah pentester melakukan serangan bruteforce.
Sebelum mendisable akses root
, tentu saja kita perlu membuat 1 user baru yang mempunyai hak untuk menggunakan service SSH dan masuk ke dalam list sudoers
.
- Akses ssh server menggunakan user
root
terlebih dahulu.
1ssh [email protected]
- setelah masuk server SSH, buat user dan group baru. (Silahkan lihat
man useradd
untuk lebih jelas)
1groupadd ditatompel
2useradd -s /bin/bash -d /home/ditatompel -g ditatompel -G root -m ditatompel
- Set password user tersebut dengan perintah
passwd ditatompel
.
- Lalu tambahkan user
ditatompel
ke listsudoers
. Edit file/etc/sudoers
dan tambahkan permission untuk user baru tersebut:
1ditatompel ALL=(ALL) ALL
- Kemudian edit file
/etc/ssh/sshd_config
dan tambah / edit konfigurasi berikut :
1PermitRootLogin no
2AllowUsers ditatompel
- Restart SSH daemon
1service sshd restart #(Untuk CentOS dkk)
2/etc/init.d/ssh restart #(untuk Debian)
3/etc/rc.d/sshd restart #(FreeBSD, Arch, Gentoo, dkk)
Note : Setelah restart, pastikan akses SSH yang sedang berjalan / terkoneksi tidak putus / di close supaya kita masih memiliki akses dan dapat mengedit konfigurasi jika terjadi kesalahan.
- Coba akses SSH server menggunakan user yang tadi baru saja kita buat, yaitu
ditatompel
.
1ssh [email protected]
Ubah Port Default SSH (Optional)
Mengubah port default SSH (22
) dapat menghindari bruteforcer ababail yg cuma ambil script dari internet karena kebanyakan script bruteforce SSH defaultnya melakukan brute ke port 22
.
NOTE : Jika firewall server aktif, kita perlu membuka akses ke port yang baru, misalnya jika kita menggunakan iptables
:
1iptables -A INPUT -p tcp --dport 1337 -j ACCEPT
2iptables save
3service iptables restart
- Ingat, jangan menutup koneksi SSH awal yang sudah terhubung untuk menghindari hal2 yang tidak diinginkan.
Kemudian, untuk mengubah port, edit file /etc/ssh/sshd_config
dan tambah / edit konfigurasi berikut :
1Port 1337
kemudian restart SSH daemon.
Seperti yang kita lihat, SSH daemon melakukan listen di port 1337
. Untuk memastikannya bisa menggunakan perintah netstat
.
1netstat -plnt
Terakhir, selalu test lagi apakah server kita bisa diakses.
Gunakan Public dan Private Key
- Buat dulu keypair untuk SSH client dan SSH server dengan menggunakan
ssh-keygen
.
1ssh-keygen -b 4048 -f serverLama-169-245 -t rsa -C "ditatompel@serverLama-169-245"
Maka ia akan membuat file bernama serverLama-169-245
dan serverLama-169-245.pub
dimana :
serverLama-169-245
adalah private key kita, dan serverLama-169-245.pub
adalah public key yang nantinya diletakan letakkan di server kita.
- Pindahkan ke 2 file tersebut ke folder
~/.ssh
dan ubah file permissionnya menjadi600
.
1mv serverLama-169-245 serverLama-169-245.pub ~/.ssh/
2find ~/.ssh/ -type f -exec chmod 600 {} +
- Pada komputer server dengan user yang baru kita buat tadi (
ditatompel
) buat hidden folder.ssh
pada home dirnya dan ubah folder permissionnya menjadi700
.
1mkdir ~/.ssh; chmod 700 ~/.ssh
- Copy public key yang tadi kita buat ke folder
~/.ssh
pada remote PC (SSH Server) dengan namaauthorized_keys
dan file permission600
(untuk mengcopy file tersebut bisa menggunakan sftp
/ scp
) : Contoh :
1cd ~/.ssh
2sftp -P 1337 [email protected]
1sftp> put serverLama-169-245.pub /home/ditatompel/.ssh/authorized_keys
2sftp> chmod 600 /home/ditatompel/.ssh/authorized_keys
- Setelah itu, edit lagi file
/etc/ssh/sshd_config
dan tambah / edit konfigurasi berikut supaya user tidak dapat mengakses shell meskipun ia mengetahui passwordnya dan wajib menggunakan private key:
1PasswordAuthentication no
- Restart SSH daemon dan coba lagi akses SSH server dengan menggunakan command :
1ssh -i ~/.ssh/serverLama-169-245 -p 1337 [email protected]
Memanage Server Menggunakan FISH Protocol
Ni bagian yang saya suka dan yang sebenernya pingin saya share, mungkin aja ada beberapa yang belum tau.
FISH (Files transferred over Shell protocol) adalah sebuah protokol jaringan yang menggunakan Secure Shell (SSH) atau Remote Shell (RSH) untuk mentransfer file antara komputer kita dan komputer server semudah membuka2 folder / mengedit file di komputer kita. Saya menggunakan Dolphin yang sudah menjadi bawaan KDE. Selain Dolphin, KDE user juga bisa menggunakan Konqueror
untuk menggunakan protokol FISH. (Untuk Gnome - Nautilus saya kurang tahu, mungkin yang lain bisa menambahkan dimari)
Caranya tinggal klik pada breadcrumb navigasi folder dan ketikan {protokol}{user}@{server}:{port}/{folder}
kemudian tekan enter.
misalnya :
1fish://[email protected]:1337/var/www/path/to/folder/you/want/to/access/
setelah itu kita akan dipromot untuk memasukan password SSH kita. Tapi ada permasalahan yang dihadapi, protokol FISH pada Dolphin / Konqueror tidak secara langsung tahu jika kita menggunakan public dan private key untuk mengakses server.
Maka dari itu kita dapat memanfaatkan fitur ssh config (lokasinya ada di ~/.ssh/config
untuk konfigurasi per user, atau /etc/ssh/sshd_config
untuk system wide). Untuk konfigurasi tiap user, biasanya belum terdapat file ~/.ssh/config
, maka dari itu kita perlu buat dulu file tersebut dengan menambahkan konfigurasi IdentityFile
supaya program yang kita gunakan tau bahwa kita harus menggunakan private key SSH kita :
1IdentityFile /home/dit/.ssh/serverlama-169-245
Lalu bagaimana jika kita memiliki banyak server dan banyak private key untuk masing2 server? Yuk mari kita baca lanjutannya.
Trik Konfigurasi ~/.ssh/config
Untuk para system administrator yang ngurusin banyak server yang mengharuskan tiap server memiliki akses login yang berbeda,pasti bakal susah mengingat port, password, user, dll. Belum lagi untuk inget akses aplikasi yang ada pada server2 tersebut. Maka dari itu kita bisa manfaatin fitur ssh config yang memungkinkan kita mengakses shell hanya dengan mengingat IP server dan passpharsenya saja.
Berikut ini contoh konfigurasi SSH untuk identitas multi server :
1Host 202.150.169.245
2Hostname 202.150.169.245
3 User ditatompel
4 Port 1337
5 IdentityFile /home/dit/.ssh/serverlama-169-245
6
7Host xxx.xx.xx.xxx
8HostName xxx.xx.xx.xxx
9 User ditakeren
10 Port 12345
11 IdentityFile /home/dit/.ssh/blahblah1
12
13Host xxx.xxx.xxx.xx
14Hostname xxx.xxx.xxx.xx
15 User ditacakep
16 Port 23213
17 IdentityFile /home/dit/.ssh/blahblah2
18
19# dan seterusnya
Dengan begitu kita dapat menggunakan command SSH hanya dengan :
1ssh 202.150.169.245
atau dengan menambahkannya ke folder network dengan mengakses Network > Add Network Folder kemudian isi informasi remote PC (SSH server) yang dibutuhkan.
Mungkin sekian dulu dari saya, silahkan bagi teman2 yang ingin menambahkan / mengkoreksi, saya akan sangat menghargai.
Referensi: