Translate








​
Tampilkan postingan dengan label Linux Security. Tampilkan semua postingan
Tampilkan postingan dengan label Linux Security. Tampilkan semua postingan

Rabu, 05 Maret 2014

Melindungi ssh dari Brute Force Attacks dengan fail2ban

Ssh merupakan service yang layak untuk memperoleh pengamanan ketat dalam sebuah server. Karena ssh merupakan kunci yang sangat penting untuk masuk kedalam sistem linux, dimana sangat memungkinkan untuk mengexploitasi sistem ketika ada "intruder" yang berhasil masuk melalui ssh tersebut. Disini saya akan menambahkan salah satu layer pengamanan ssh, yakni dengan menggunakan tool fail2ban.

Cara kerja tool ini fokus pada percobaan login user yang dibaca melalui file log. Apabila ada user yang gagal melakukan login selama beberapa kali (intensitas bisa kita tentukan), sistem akan melakukan ban terhadap alamat IP asal dimana user tersebut melakukan login. Dengan mekanisme tersebut, akan berguna untuk meminimalisir Brute Force Attack yang dilakukan oleh intruder.

Tutorial ini akan dibagi kedalam 3 tahap, yakni:
1. Instalasi fail2ban (dari Repositori EPEL)
2. Konfigurasi
3. Pengetesan

Untuk instalasi paket fail2ban sudah dilakukan pada artikel sebelumnya. Sekarang kita fokus pada konfigurasi fail2ban.

Paket yang digunakan yakni versi 0.8.11

[root@SRIWIJAYA ~]# rpm -qa | grep fail2ban
fail2ban-0.8.11-2.el6.noarch


File konfigurasi utama yakni jail.conf yang terdapat pada direktori /etc/fail2ban. Untuk melakukan konfigurasi, kita backup dulu file tersebut untuk berjaga-jaga apabila terjadi kegagalan konfigurasi.

[root@SRIWIJAYA ~]# cd /etc/fail2ban/
[root@SRIWIJAYA fail2ban]# cp jail.conf jail.backup
[root@SRIWIJAYA fail2ban]# ls
action.d  fail2ban.conf  filter.d  jail.backup  jail.conf


Buka file konfigurasi, lalu lakukan editing

[root@SRIWIJAYA ~]# nano /etc/fail2ban/jail.conf


# IP Address yang diabaikan oleh fail2ban (diizinkan login) 
ignoreip = 192.168.78.73/24

# Lama waktu ban (detik)
bantime  = 3600

# Waktu dimana kita harus segera login (detik)
findtime  = 900

# Jumlah percobaan login yang diizinkan
maxretry = 5
 
# Service ssh yang kita proteksi 
[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=root, sender=fail2ban@sriwijaya.com, send$
logpath  = /var/log/secure
maxretry = 5
 

Jalankan service fail2ban :
[root@SRIWIJAYA ~]# service fail2ban start



Pengetesan 



Login dari  IP lain :
Dalam hal ini coba login dari IP 192.168.78.54, dan masukkan password yang salah sebanyak 5 kali. Maka IP tersebut akan ter-Ban secara otomatis.

Berikut Notifikasi Email yang masuk:
[root@SRIWIJAYA ~]# cat /var/spool/mail/root


From fail2ban@sriwijaya.com  Mon Mar  3 19:19:18 2014
Return-Path: 
X-Original-To: root
Delivered-To: root@SRIWIJAYA.localdomain
Received: by SRIWIJAYA.localdomain (Postfix, from userid 0)
        id 95F4F6160F; Mon,  3 Mar 2014 19:19:18 +0700 (WIB)
Subject: [Fail2Ban] SSH: banned 192.168.78.54 from SRIWIJAYA
Date: Mon, 03 Mar 2014 12:19:18 +0000
From: Fail2Ban 
To: root@SRIWIJAYA.localdomain
Message-Id: <20140303121918 data-blogger-escaped-.95f4f6160f="" data-blogger-escaped-localdomain="">

Hi,

The IP 192.168.78.54 has just been banned by Fail2Ban after
5 attempts against SSH.


Here are more information about 192.168.78.54:



Regards,

Fail2Ban


Potongan Log dari /var/log/secure :
[root@SRIWIJAYA ~]# cat /var/log/secure


Mar  3 19:18:29 SRIWIJAYA sshd[2812]: Failed password for root from 192.168.78.54 port 56019 ssh2
Mar  3 19:18:29 SRIWIJAYA sshd[2813]: Connection closed by 192.168.78.54
Mar  3 19:18:29 SRIWIJAYA sshd[2812]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.78.54  user=root
Mar  3 19:19:10 SRIWIJAYA unix_chkpwd[2823]: password check failed for user (root)
Mar  3 19:19:10 SRIWIJAYA sshd[2821]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.78.54  user=root
Mar  3 19:19:13 SRIWIJAYA sshd[2821]: Failed password for root from 192.168.78.54 port 56023 ssh2
Mar  3 19:19:15 SRIWIJAYA unix_chkpwd[2824]: password check failed for user (root)
Mar  3 19:19:18 SRIWIJAYA sshd[2821]: Failed password for root from 192.168.78.54 port 56023 ssh2
You have new mail in /var/spool/mail/root


Dengan percobaan diatas, maka IP Address 192.168.78.54 telah ter-Ban, dan tidak akan bisa melakukan Login. Untuk lebih jauh, silahkan kunjungi Manual Perintah fail2ban yang bisa dicoba.

Notes:
*) Pada file konfigurasi [ssh-iptables], bisa diubah alamat email untuk notifikasi, misalnya email external.
*) File log bisa dipisahkan dengan mengubah direktif "logpath" pada file konfigurasi. Misalnya dengan membuat file log /var/log/fail2ban.log.

{ Read More }


Kamis, 20 Februari 2014

SFTP dengan CHROOT pada Linux CentOS

Pada Tutorial sebelumnya kita sudah mencoba membangun server FTP sederhana dengan vsftpd.Sekarang saya akan mencoba membangun Sistem serupa dengan menggunakan SFTP (Secure FTP), dengan CHROOT agar user hanya bisa mengakses Direktori yang kita tentukan saja. Perbedaan dari FTP konvensional adalah dari sisi keamanan, dengan SFTP relatif lebih aman dikarenakan ada enkripsi data, perbedaan lainnya yakni dari port default yang digunakan yaitu port 22 sama seperti port SSH, walaupun sebenarnya port ini bisa kita tentukan sendiri.


Untuk membangun SFTP dengan CHROOT, berikut tahapannya:
  1. Instalasi paket Openssh yang dibutuhkan.
  2. Membuat Direktori baru untuk user/client. Direktori ini sebaiknya dipisahkan dari direktori home default. Misalnya kita akan buat seperti ini: /home/ftp/ucox. Direktori "ucox" inilah yang kita sediakan untuk Client.
  3. Membuat User baru untuk Client, misalnya saja user baru tersebut adalah Ucox.
  4. Batasi User Client agar tidak bisa mengakses SHELL.
  5. Lakukan perubahan Hak Akses dan kepemilikan direktori
  6. Konfigurasi pada /etc/ssh/sshd_config
  7. Pengetesan Akses dengan sftp client (WinScp)

1. Instalasi paket openssh yang dibutuhkan


Disini, saya menggunakan Linux CentOS 5.6 32bit. Untuk paket openssh default nya yakni versi 4.3p2xx tidak akan kita gunakan karena tidak support untuk parameter "Match" didalam file konfigurasi ssh. Disini saya menggunakan paket openssh sebagai berikut:

  • openssh-server-6.1p1-5.el5.1.i386.rpm
  • openssh-6.1p1-5.el5.1.i386.rpm
  • openssh-clients-6.1p1-5.el5.1.i386.rpm
  • openssh-askpass-6.1p1-5.el5.1.i386.rpm
  • libedit-20090923-3.0_1.el5.rf.i386.rpm
Paket-paket tersebut sudah saya kumpulkan dan bisa anda download disini, dan paket-paket ini cocok digunakan di CentOS 5.6. Didalam nya sudah saya sertakan untuk CentOS 64 bit juga.


Tahapan instalasi :
[root@MAJAPAHIT openssh]# rpm -ivh openssh-server-6.1p1-5.el5.1.i386.rpm openssh-6.1p1-5.el5.1.i386.rpm openssh-askpass-6.1p1-5.el5.1.i386.rpm libedit-20090923-3.0_1.el5.rf.i386.rpm openssh-clients-6.1p1-5.el5.1.i386.rpm


Jika paket openssh versi bawaan CentOS default sudah terinstall, silahkan uninstall terlebih dahulu karena bisa menyebabkan conflict.

2. Menyiapkan Direktori baru untuk Client

Berikutnya, kita siapkan Direktori baru untuk Home Direktori client. Disini saya akan menyiapkan direktori /ftp didalam /home dengan format: /home/ftp/ucox. Direktori yang perlu dibuat adalah /sftp dan /ucox (bisa langsung dibuat dengan parameter "-d").

[root@MAJAPAHIT ~]# mkdir /home/ftp
[root@MAJAPAHIT ~]# mkdir /home/ftp/ucox



3. Membuat user baru untuk Client


[root@MAJAPAHIT ~]# useradd -d /home/ftp/ucox/ ucox
[root@MAJAPAHIT ~]# passwd ucox



4. Membatasi akses user Client agar tidak bisa mengakses shell,kita ketikkan perintah:


[root@MAJAPAHIT ~]# usermod -s /sbin/nologin ucox


atau kita bisa merubahnya secara manual pada file /etc/passwd.

5. Merubah Hak Akses dan Kepemilikan Direktori.


Berdasarkan hirarki Direktori dibawah ini, kita ubah hak akses untuk direktori /ftp


[root@MAJAPAHIT ~]# chown root:root /home/ftp/



Ubah kepemilikan direktori untuk Client Ucox

[root@MAJAPAHIT ~]# chown ucox:ucox -R /home/ftp/ucox/



6. Konfigurasi file sshd_config


Buka File sshd_config, lalu tambahkan beberapa baris konfigurasi seperti dibawah:

# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

Match User ucox
    ChrootDirectory /home/ftp/
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no


7. Lakukan Test Login dengan WinSCP



Dengan cara-cara diatas, SFTP server kita sudah berjalan, dan user/cliet dengan nama ucox hanya bisa melakukan transfer file dari dan ke direktori nya saja, tidak bisa membuka direktori lain.
{ Read More }


Sabtu, 21 Desember 2013

Menonaktifkan Fitur SELinux pada Centos 6

SELinux (Security Enhanced Linux) merupakan salaha satu fitur yang dimiliki oleh Linux Centos. Secara garis besar, SELinux berfungsi sebagai salah satu lapisan keamanan. SELinux biasanya disertakan secara default pada saat kita melakukan instalasi awal. Terlepas dari fungsinya sebagai pengaman pada Sistem, kadang sifatnya terlalu restrict, sehingga dapat menjadi penghalang pada saat kita hendak menginstall paket tertentu. Dengan kondisi seperti ini, maka kita bisa menonaktifkan terlebih dahulu fitur SELinux ini dan mengaktifkannya kembali bila perlu.

Untu menonaktifkan SELinux, berikut langkah-langkah yang bisa dilakukan:

1. Periksa status SELinux saat ini
[root@PAJAJARAN ~]# getenforce
Enforcing


Dari status diatas terlihat bahwa SELinux berada dalam status aktif. Untuk itu kita harus merubahnya menjadi disable.

2. Buka file konfigurasi SELinux yang terdapat pada /etc/selinux
[root@PAJAJARAN ~]# nano /etc/selinux/config


Isi File config :

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


3. Lakukan perubahan pada file konfigurasi dengan mengubah ke parameter disable

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted



4. Simpan perubahan dan keluar dari editor, lalu restart server

[root@PAJAJARAN ~]# reboot


Setelah proses reboot, kita periksa kembali status SELinux setelah dinonaktifkan.

[root@PAJAJARAN ~]# getenforce
Disabled

{ Read More }


Minggu, 15 Desember 2013

Mengamankan Akses Remote Login ssh dengan Authentication-Keys

Login secara remote dengan ssh merupakan suatu aktivitas yang paling sering dilakukan oleh seorang Sistem Administrator dalam mengoperasikan server yang telah dibangun. Intensitas remote login dengan ssh ini sangat tinggi sekali, sehingga perlu dibuat kebijakan mengenai kontrol akses terhadap service (sshd) tersebut. Salah satu yang patut diterapkan yakni dengan penggunaan Authentication Keys pada saat login secara remote. Dengan mekanisme seperti ini, login dengan password tidak akan berlaku lagi. Untuk bisa login, diperlukan KUNCI dan hanya pemegang KUNCI lah yang bisa "membuka pintu masuk", dan login secara remote terhadap server. 

Dalam tutorial ini, saya akan mencoba menggunakan tool puttygen untuk membuat rsa key yang terdiri dari Public key dan Private Key. Untuk Public Key akan kita sisipkan pada file konfigurasi di server yang akan diremote. Sedangkan Private Key akan kita gunakan dari sisi client, dimana kita akan menggunakannya pada saat remote menggunakan putty. 

TAHAP PERTAMA : Mempersiapan Kebutuhan Sistem

Download puttygen disini, lalu jalankan aplikasi tersebut. 


Tekan tombol Generate, lalu akan muncul Progress Bar di bagian atas, dan agar Progress Bar nya berjalan lebih cepat, maka kita harus menggerakkan Mouse kearah area kosong seperti yang ditunjukkan pada gambar dibawah



Setelah Progress Bar penuh, akan muncul key yang telah digenerate seperti tampak pada gambar dibawah ini.


Kita isi untuk Key Comment, Key passphrase dan Confirm Passphrase (optional). Apabila tidak diisi, maka Passphrase ini tidak akan ditanyakan pada saat kita Login kedalam server nanti. Disini saya akan coba isi sesuai gambar dibawah, isi Phasprase Key terserah anda :


Pada tahap ini, Public Key dan Private Key sudah dibuat, dan kita bisa menyimpan file tersebut untuk kita gunakan sebagai KUNCI pada saat mengakses server. Simpan Public Key dengan nama bebas.


Lalu Simpan Private Key. Untuk File ini biasanya memiliki ekstensi .ppk



Setelah Public Key dan Private Key tersimpan dalam Komputer kita, tahap selanjutnya yakni memasukkan Public Key yang sama (yang telah di generate) kedalam server Linux yang akan kita remote. Disini saya asumsikan bahwa Server linux masih bisa kita remote dan kita sedang berada di dalam server.


Pada server Linux, kita masuk ke Direktori .ssh (hidden file), dan buat file baru untuk menyimpan rsa-key.
[root@PAJAJARAN ~]# cd .ssh/
[root@PAJAJARAN .ssh]# nano authorized_keys


Kita PASTE rsa key yang telah kita copy dari aplikasi puttygen diatas, menjadi satu baris seperti gambar dibawah.

 

Simpan Perubahan dan keluar dari Editor. Tahap selanjutnya, Buka file konfigurasi ssh yang terdapat di /etc/ssh/sshd_config

[root@PAJAJARAN ~]# nano /etc/ssh/sshd_config


Temukan baris Parameter berikut :

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes


Ubah Password Authentication dengan no, sehingga menjadi seperti dibawah ini:

PasswordAuthentication no


Simpan perubahan, dan keluar dari editor. Lalu Restart service ssh dengan perintah :

[root@PAJAJARAN ~]# /etc/rc.d/init.d/sshd restart



TAHAP KEDUA : Memulai melakukan Remote ssh dengan Private Key

 Buka Aplikasi putty, lalu Masuk ke Menu Connection, isi parameter Auto-login Username dengan "root". Ini bisa disesuaikan dengan Akun user dimana kita akan Login


Masuk ke Menu SSH, lalu Pilih Sub menu Auth, dan Buka Private Key yang sudah kita buat sebelumnya. (ekstensi .ppk)



Setelah Private Key dibuka, berikutnya kita masuk ke Menu Session, lalu masukkan Alamat IP dari Server Linux yang akan diremote. (Server yang sudah kita buat rsa-key pada Tahap pertama)



Berikutnya, kita sudah bisa berhasil masuk dengan user root, namun harus memasukkan Passphrase yang sebelumnya dibuat.


Apabila Passphrase yang dimasukkan benar, maka kita telah berhasil login secara sempurna.


Dari Tutorial diatas, kita sudah belajar untuk membuat pengaturan Login secara remote dengan memanfaatkan service ssh. Namun, mekanisme nya tidak dengan Akun user dan password yang terdapat dalam sistem Linux, melainkan dengan menggunakan Key sebagai Kunci masuk. Untuk pengamanan lebih, disertakan juga Passphrase Key sebagai layer kemanan lainnya.
{ Read More }


Selasa, 10 Desember 2013

Membatasi Akses user pada Server Linux Centos dengan visudo

Sebagai "Best-Practice" untuk pengamanan tingkat dasar pada server linux, kita bisa membatasi akses kedalam server hanya untuk user tertentu. Dan tentunya user tersebut kita berikan akses untuk menjalankan berbagai perintah layaknya user root. Terlebih dahulu, user akan didaftarkan oleh admin (root user) sehingga user-user yang berhak mengakses server akan terkontrol.

Paket yang akan digunakan adalah paket "sudoers". Secara default, setelah kita menginstall linux centos untuk pertama kali, biasanya paket "sudoers" sudah terinstall. Untuk menunjukkan efek dari "best-practice" ini, kita coba login dari user biasa untuk menjalankan perintah yang bersifat administratif, misalnya melakukan konfigurasi ip address.

Disini, user yang digunakan adalah "gajah". Kita bisa menggunakan user lain atau menambahkan user baru dalam server kita.

[gajah@majapahit ~]$ nano /etc/sysconfig/network-scripts/ifcfg-eth0


Lalu coba kita ubah ip address, dan kita simpan perubahan. Maka akan muncul pesan error seperti berikut ini, dimana si "gajah" tidak bisa melakukan penyimpanan konfigurasi dikarenakan dia tidak
memiliki hak akses.

[ Error writing /etc/sysconfig/network-scripts/ifcfg-eth0: Permission denied ]


Agar user "gajah" bisa melakukan konfigurasi ip, dan menjalankan perintah layaknya sebagai root, kita terlebih dahulu harus memasukkannya kedalam sudoers. Selain itu hal ini bisa bermanfaat untuk System Logging. Dimana kita bisa mencari tahu siapa user yang login pada saat sebelum menjalankan perintah root tertentu.

[root@majapahit ~]# visudo


lalu tambahkan pada baris terakhir :

gajah ALL=(ALL) ALL


Simpan perubahan.

Login kembali dengan user "gajah", lalu login sebagai root dengan akun (password) milik user sendiri / user "gajah".

[gajah@majapahit ~]$ sudo su
[sudo] password for gajah:
[root@majapahit gajah]#


Sampai disini, user "gajah" sudah bisa menjalankan perintah layaknya user root. Silahkan coba kembali untuk melakukan perubahan ip address seperti sebelumnya. Dan harusnya saat ini user "gajah" sudah mempunyai akses dan bisa melakukan perubahan.

Apabila user "gajah" belum didaftarkan pada sudoers, maka dia tidak bisa login sebagai root dengan perintah sudo, ditandai dengan pesan error:

[gajah@majapahit ~]$ sudo su

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for gajah:
gajah is not in the sudoers file.  This incident will be reported.


Dari pesan error diatas terlihat bahwa user "gajah" tidak termasuk dalam sudoers. Selain menggunakan perintah visudo, bisa juga kita gunakan editor nano dengan membuka file konfigurasi sudoers yang terdapat dalam direktori /etc. Perintah yang kita gunakan: 

[gajah@majapahit ~]$ nano /etc/sudoers


{ Read More }


Sabtu, 07 Desember 2013

Menonaktifkan login ssh user root di Linux Centos

User root adalah seseorang yang memiliki Hak Akses tertinggi dalam sistem Linux pada umumnya. Dengan login sebagai root, kita bisa melakukan apa saja pada mesin Linux Centos kita. Untuk server tertentu, misalnya server Development, dimana ada banyak user yang mengakses server secara bersamaan dalam waktu tertentu, kita tentunya harus lebih waspada jangan sampai user-user tersebut melakukan hal-hal yang tidak diinginkan pada sistem yang kita bangun. Salah satu pencegahannya yakni dengan menonaktifkan login sebagai root, dan membatasi user tertentu untuk melakukan tindakan administratif dengan sudo. Untuk menonaktifkan login root, berikut tahapannya:


[root@PAJAJARAN ~]# nano /etc/ssh/sshd_config


Lalu akan muncul File sshd_config, cari parameter berikut :

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10


Hilangkan tanda '#' di depan PermitRootLogin dan ubah menjadi "no" menjadi :

PermitRootLogin no


Untuk yang lainnya tidak perlu diubah, cukup satu baris diatas saja. Simpan perubahan dan keluar dari editor. Lalu restart service sshd untuk menerapkan perubahan yang sudah kita lakukan.



[root@PAJAJARAN ~]# /etc/init.d/sshd restart


atau 

[root@PAJAJARAN ~]# service sshd restart


Untuk mencoba apakah konfigurasi sudah berjalan dengan baik atau tidak, kita harus Logout terlebih dahulu, lalu coba untuk login kembali sebagai root. Apabila konfigurasi berhasil, maka seharusnya kita tidak bisa login.

login as: root
root@192.168.1.100's password:
Access denied
root@192.168.1.100's password:


Perlu diingat, bahwa Login root yang kita nonaktifkan hanyalah ketika login secara Remote (ssh). Dan Apabila kita mengakses server secara langsung, tentu saja kita masih bisa login sebagai root.
{ Read More }


IconIconIconFollow Me on Pinterest

Blogger news

Blogroll

What's Hot