Ubuntu Server Hardening
Environment
1 | Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-43-generic x86_64) |
Untuk servernya saya mengunakan Ubuntu 18
Terbaru. Meskipun security defaultnya sudah cukup baik, mari kita lebih optimasi!
Secure SSH
SSH adalah fitur yang paling rawan menjadi sasaran Attacker untuk hack
server kita. Berikut langkah langkah basic securenya.
List Secure SSH
- Ganti Port Default SSH
- Gunakan Private key untuk login
- Jangan ijinkan user
root
untuk login
Ganti Port Default SSH
Cara mengantinya adalah. Kita perlu mengedit file /etc/ssh/sshd_config
dan Mencari kata # Port 22
. Kita bisa mengunakan vim
atau nano
untuk mengedit.
1 | $ sudo nano /etc/ssh/sshd_config |
Selamat port SSH kalian sudah terganti. Untuk login sekarang mengunakan option
ssh user@ip -p port
Private Key untuk Login
Pertama Kita generate key nya di machine local kita dengan perintah ssh-keygen
Lalu enter terus sampai terlihat seperti dibawah ini.
1 | $ ssh-keygen |
Kedua kita copy file id_rsa.pub
ke server kita
1 | $ cat /home/nep/.ssh/id_rsa.pub |
Ketiga kita buat sebuah file authorized_keys
1 | $ sudo touch authorized_keys |
Isi dengan hasil dari cat id_rsa.pub
Keempat kita tinggal login dengan file id_rsa
1 | $ cp id_rsa /home/nep/ssh.txt #copy filenya ke dir sembarang |
-i
Untuk identitas private keyssh.txt
Untuk file private key-p
Untuk port2121
Isi portnya
Jangan ijinkan root user untuk login ssh
Root user adalah user tertinggi di unix, Tidak baik jika harus digunakan sehari hari dan meminimalisir hal hal yang tidak diinginkan, Maka dari itu kita juga harus membatasi user root ini dari login ssh dengan cara.
1 | $ sudo nano /etc/ssh/sshd_config |
Kita ubah value dari #PermitRootLogin prohibit-password
menjadi PermitRootLogin no
1 | $ service ssh restart |
Dengan begini user root sudah bisa untuk login ssh.
Secure Web Server
List Secure Web Server
- Tidak membuka port database ke public
- Mengubah dir
phpmyadmin
ke akses uri yang lain - Tidak memberikan akses shell untuk user
www-data
- Disable fungsi shell pada php.ini jika tidak diperlukan
- Pasang login admin palsu
Menutup port database public
Secara default port database akan tertutup bagi public, tapi ada beberapa mungkin miss configurasi yang membuat port 3306 (port database) terbuka untuk public. Salah satunya port ini terbuka biasanya untuk akses mysql remote. Kalian juga bisa menganti port 3306 dengan cara.
1 | $ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Mengubah akses uri phpmyadmin
Secara default setelah istalasi adalah akses uri untuk phpmyadmin adalah http://domain/phpmyadmin
namun kita juga dapat menganti akses uri ini dengan cara.
Jika kalian tidak melakukan symlink
1
2
3
4
5$ sudo nano /etc/phpmyadmin/apache.conf
Alias /phpmyadmin /usr/share/phpmyadmin
#tinggal ubah /phpmyadmin menjadi terserah mungkin /pythonmyadminJika kalian melakukan symlink langsung
1
2
3
4
5
6$ sudo ln -s /usr/share/phpmyadmin /var/www/html
#jika kalian melakukan perintah itu saat instalasi maka tinggal mengubah nama di dir /var/www/html#
$ cd /var/www/html
$ mv /phpmyadmin /pythonmyadmin #Ganti dengan sesuka kalian
Disable shell untuk www-data
www-data adalah user untuk web server ubuntu, User ini sebaikan tidak dikasih akses shell.
1 | $ cat /etc/passwd |
Biasanya user www-data memiliki akses shell sh. Jika iya tingga diubah ke
/usr/sbin/nologin atau /bin/false
1 | $ sudo nano /etc/passwd |
Disable fungsi php yang berbahaya pada php.ini
Beberapa fungsi php juga harus kita disable pada php.ini
fungsi2 ini biasanya berhubungan dengan shell, read file, write file. Sebaiknya fungsi2 itu dimatikan jika tidak dipakai juga.
Pertama untuk mencari php.ini
kita bisa melihat dari phpinfo()
berikut tata caranya:
- Buat file nama info.php pada /var/www/html atau dir web kalian
- Isi dengan kode
<?php phpinfo();
Lihat pada baris
Loaded Configuration File
-> /etc/php/7.2/apache2/php.ini
Oke jadi dir php.ini
ada di /etc/php/7.2/apache2/php.ini
Kita tingga edit file tersebut jika kalian mengunakan nano tinggal CTRL+W
dan ketikan disable_functions
Maka anda akan langsung diarahkan ke baris yang kita edit.
1 | $ sudo nano /etc/php/7.2/apache2/php.ini |
Dan tambahkan blacklist berikut ini.
1 | disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source |
Lalu ada tambahan lagi yaitu allow_url_include meski defaultnya sekarang sudah off. Lebih baik dipastikan lagi. CTRL+W
dan ketikan allow_url_
1 | allow_url_fopen=Off |
Selesai dan restart web servernya.
1 | $ sudo system apache2 restart |
Fake login
Membuat login palsu cukup membantu membuat bingung orang2 yang akan berniat jail pada web kita. Secara simple tingga mendownload template login dan membuat banyak dir dir seperti /admin /administrator dll. Dan jangan lupa secure login admin dengan nama acak!