Configure a Secured SSH

Kali ni aku nak share kaedah yang aku belajar utk setup SSH agar lebih selamat. Aku dapat ilmu ni dari Kursus Keselamatan ICT di INTANBK.

Bagi pengguna tegar Linux pasti biasa dengan linux ssh dan putty untuk buat kerja maintenance ke server linux masing-masing. Ada juga sesetengahnya terlalu open benarkan ssh akses by public ke server tersebut. Ini tindakan bahaya dan makan diri sebenarnya.


Lokasi Fail Konfigurasi SSH

  • /etc/ssh/sshd_config – Fail Konfigurasi OpenSSH server
  • /etc/ssh/ssh_config – Fail Konfigurasi OpenSSH client
  • ~/.ssh/ - Direktori Konfigurasi Pengguna SSH
  • ~/.ssh/authorized_keys atau ~/.ssh/authorized_keys – Senarai Public Keys (RSA or DSA) yang boleh digunakan untuk login
  • /etc/nologin – Sekiranya fail ini ada, OpenSSH server menghalang sebarang login kepada server selain pengguna root sahaja
  • /etc/hosts.allow dan /etc/hosts.deny - Access controls lists yang dijanakan oleh tcp-wrappers ditetapkan disini.
  • SSH port asal : TCP 22


Konfigurasi OpenSSH Server Yang Selamat

  1. Sekiranya server tidak menggunakan komunikasi menerusi OpenSSH, buangkan ia dari server
    # chkconfig sshd off
    # yum erase openssh-server

  2. Buka fail sshd_config
    # nano /etc/ssh/sshd_config

  3. Gunakan hanya SSH Protocol Versi 2 sahaja. Protocol versi 1 terdedah kepada serangan Man-In-Middle Attack. Laksana konfigurasi berikut :
    Protocol 2
  4. Benarkan capaian menerusi SSH hanya kepada pengguna tertentu yang dilantik sahaja.
    AllowUsers root muzzo haris
    Anda boleh halang capaian menerusi SSH kepada pengguna tertentu.
    DenyUsers  amran asiah
  5. Pengguna dibenarkan akses menerusi SSH dan ditetapkan selang masa idle yang dibenarkan untuk mengelakkan session ssh yang tak sah.
    ClientAliveInterval 300
    ClientAliveCountMax 0
    Anda menetapkan masa idle dalam saat (300 saat = 5 minit). Selepas masa ini, pengguna yang idle dan secara automatik keluar dari sistem.
  1. Jangan benarkan SSH membaca fail user's ~/.rhosts dan ~/.shosts. Ini kerana SSH boleh menyebabkan command rsh terganggu dan terdedah kepada bahaya. Akses melalui RSH amat berbahaya.
    IgnoreRhosts yes

  2. Seterusnya halang login menggunakan host.
    HostbasedAuthentication no

  3. Tindakan untuk terus login menggunakan root melalui ssh menerusi rangkaian adalah amat berbahaya. Ini kerana pengguna biasa boleh mendapat akses sebagai root dengan menggunakan su atau sudo. Dengan cara ini, kita akan dapat maklumat terperinci tentang siapa yang telah menjalankan command khas tertentu pada sistem tersebut melalui sudo.
    PermitRootLogin no

  4. Tetapkan banner amaran :
    Banner /etc/issue
    Ubah fail Banner Standard /etc/issue kepada berikut :
Anda telah mencapai Sistem Komunikasi Server Linux Application yang dikhususkan untuk Pegawai Teknikal yang berdaftar sahaja. Dengan menggunakan capaian ini, anda tertakluk kepada perkara berikut :

+ Anda tertakluk dibawah Dasar Keselamatan ICT Negeri Pahang

+ Capaian dan aktiviti anda pada server ini dipantau sepanjang masa

+ Capaian kepada server ini adalah menggunakan kawalan keselamatan yang ketat bagi menjamin keselamatan server serta data di dalamnya

+ Sebarang kerosakan disebabkan oleh komunikasi menggunakan Sistem Komunikasi di server ini tidak akan dipertanggungjawabkan kepada admin server ini

Anda dengan ini bersetuju untuk menggunakan Sistem Komunkasi ini dan mematuhi peraturan yang telah ditetapkan.
  1. Anda perlu tetapkan had akses kepada port # 22 di firewall server. Gunakan Shorewall sebagai firewall server dan tetapkan Firewall Rules berikut :
    ACCEPT net:10.254.31.0/24 $FW tcp 22 //wajib ada
    ACCEPT net:10.253.31.0/24 $FW tcp 22 //wajib ada
    ACCEPT net:10.30.31.0/24 $FW tcp 22 //wajib ada
    ACCEPT net:10.254.yy.0/24 $FW tcp 22 //pilihan mengikut lokasi
    ACCEPT net:10.xx.yy.0/24 $FW tcp 22 //pilihan mengikut lokasi
    xx = subnet jabatan, yy = subnet daerah

  2. Tetapkan kata laluan pengguna SSH yang kukuh dan mengandungi gabungan alphanumeric.

  3. Jangan benarkan remote login daripada akaun pengguna yang tiada kata laluan :
    PermitEmptyPasswords no
  1. Gunakan DenyHosts untuk menetapakan konfigurasi kawalan akses SSH yang lebih spesifik. Untuk instalasi DenyHosts :
    # rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
    # yum -y install denyhosts
    # nano /etc/hosts.allow → Masukkan baris berikut : 'sshd: 192.168.2.0/255.255.255.0  192.168.1.1'
    *Masukkan senarai IP Individu/Network IP yang dibenarkan akses menerusi SSH ke server tersebut sahaja.
    # nano /etc/denyhosts.conf

    ############ THESE SETTINGS ARE REQUIRED ############
    SECURE_LOG = /var/log/secure
    HOSTS_DENY = /etc/hosts.deny
    PURGE_DENY = 7d
    BLOCK_SERVICE = sshd
    DENY_THRESHOLD_INVALID = 5
    DENY_THRESHOLD_VALID = 10
    DENY_THRESHOLD_ROOT = 1
    DENY_THRESHOLD_RESTRICTED = 1
    WORK_DIR = /usr/share/denyhosts/data
    SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
    HOSTNAME_LOOKUP=YES
    LOCK_FILE = /var/lock/subsys/denyhosts
    ############ THESE SETTINGS ARE OPTIONAL ############
    ADMIN_EMAIL = adminsvr@pahang.gov.my
    SMTP_HOST = localhost
    SMTP_PORT = 25
    SMTP_FROM = DenyHosts
    SMTP_SUBJECT = DenyHosts Report
    AGE_RESET_VALID=5d
    AGE_RESET_ROOT=30d
    AGE_RESET_RESTRICTED=30d
    AGE_RESET_INVALID=10d
    ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ##########
    DAEMON_LOG = /var/log/denyhosts
    DAEMON_SLEEP = 30s
    DAEMON_PURGE = 1h
    ######### THESE SETTINGS ARE SPECIFIC TO ##########
    ######### DAEMON SYNCHRONIZATION ##########

    Konfigurasi denyhosts daemon run apabila server start
      # chkconfig denyhosts on
    Start daemon denyhosts
      # service denyhosts start
    Pantau fail log denyhosts
      # tail -f /var/log/denyhosts
      # tail -f /var/log/secure
  2. Pastikan LogLevel ditetapkan kepada INFO atau DEBUG
    LogLevel INFO
  1. Tetapkan pecahan privilege
    UsePrivilegeSeparation yes

  2. Halang sebarang cubaan menggunakan kebenaran akses kepada home directory dan fail kunci
    StrictModes yes

  3. Tetapkan semakan ReverseMapping
    VerifyReverseMapping yes

  4. Tetapkan TCP Forwarding
    AllowTcpForwarding no
    X11Forwarding no

  5. Pastikan OpenSSH sentiasa dikemaskini dengan versi terkini
    # yum update openssh-server

  6. Menetapkan masa idle akses menerusi ssh dilimitkan. Ini bertujuan bagi mengelakkan kemungkinan orang sekeliling yang membuat sesuatu menggunakan pengguna yg akses menerusi ssh apabila pengguna sebenar tiada di meja.
    LoginGraceTime 2m

  7. Menetapkan polisi jumlah cubaan yang dibenarkan sebelum di halang akses menerusi ssh pada server. Ini bagi mengelakkan sebarang cubaan brute force menerusi ssh.
    MaxAuthTries 5

* Tukar port default ssh dari 22 kepada port lain yang tidak digunakan servis lain dan mudah nak ingat.Ini bertujuan memastikan port biasa digunakan sukar diketahui hackerz untuk menyerang menggunakan port ssh tersebut.
Tukar :
#Port 22
Kepada :
Port 775 (contoh)

Semoga berjaya

~ Be a Creator Not a User ~

Ulasan