RSS

Check Current State Connection to Our Server Part 1

Pada tulisan ini saya akan membahas mengenai State connection. Saya punya pengalaman saat teman saya tanya mengenai jumlah user yang dapat mengakses ke server kita. Sebenarnya ada banyak yang mempengaruhi hal tersebut. Salah satunya jumlah open connection yang telah di buka.

State Connection
Sebelum kita bahas lebih lanjut alangkah lebih baiknya perlu untuk mengetahui apa saja state connection yang diketahui oleh Linux dan bagaimana prosesnya
Pada sisi Server ada 5 phase yaitu LISTEN, SYN_RECD, ESTABLISHED, CLOSE_WAIT dan LAST_ACK. Listen berarti service kita telah menyala dan sedang Listen untuk menunggu request masuk. Kemudian Jika ada request masuk pertama-tama adalah menerima SYN paket dari client. Jika server dapat menerima maka server akan meresponse SYN+ACK. Pada kondisi ini server akan mencoba mengirimkan paket berulan-ulang jika Server tidak mendapatkan ACK dari client karena statusnya masih half open connection hal ini dikarenakan feature dari jaringan protocol TCP/IP untuk melakukan retransmission jika sapa tau terjadi kegagalan. Cara mengechek berapa jumlah system kita melakukan re-transmission adalah
cat /proc/sys/net/ipv4/tcp_synack_retries
Defaultnya adalah selama 5 kali dan akan diabaikan dan tidak dilanjutkan jika sudah 5 minutes tidak ada response. Apabila kondisinya Server mendapatkan pesan ACK maka pada phase ini dinamakan SYN_RECD. Kemudian proses komunikasi bisa dilakukan dengan ditandai ESTABLISHED. Secara default ESTABLISHED akan berakhir jika client memutuskan untuk menyelesaikan dengan mengirimkan paket FIN. Akan tetapi jika hal tersebut tidak terjadi maka kita harus menunggu selama 432000 seconds (selama 5 hari). Nilai itu adalah default dari linux, apabila masih tidak ada aktifitas maka firewall kita akan memutuskanya. Untuk melihatnya ada di
cat /proc/sys/net/netfilter/nf_contrack_tcp_timeout_established
Kemudian adalah phase CLOSE_WAIT. Pada phase ini server akan menunggu selama 60 seconds default dari linuxnya
cat /proc/sys/net/netfilter/ip_conntrack_tcp_timeout_time_wait
Jika kita sudah tau ternyata dalam proses komunikasi ada masa tunggunya maka anda bisa bayangkan jika didalam server kita sudah penuh dan tidak dapat membuat connection lagi. Maka server tersebut akan tidak dapat melayani layanan selama dari waktu tunggu tersebut. Mending kalo hanya suruh nunggu 2 menit untuk menuggu waktu time wait. Jika ternyata menunggu untuk waktu yang established. Maka bisa dibayangkan server kita akan available selama 5 hari.

Kenapa membuat connection dibatasi, siapa sih yang membatasi
Secara default setiap kali kita membuat connection kita butuh yang namanya file handle. Artinya kita akan membuat yang namanya file. Sekarang didalam linux ada batasan dalam pembuatan file.
[tri@localhost ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15446
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Bisa dilihat total open files hanyalah 1024. Dari sini sudah jelas kita hanya mempunyai kapasitas tidak lebih dari 1024 connection yang dapat mengakses Server kita dengan user tri. Kenapa saya bilang tidak lebih, saya ulangi kembali karena setiap kita membuat state baru seperti SYN_RECD, ESTABLISHED atau CLOSE_WAIT kita sedang melakukan open file. Oleh karena itu kita perlu memonitornya, Apalagi jika ada state connection yang sudah waktunya closed tapi dia masih hang in on disana. Contohnya adalah koneksi ke Database dan kita tidak melakukan close connection di programnya. Itu akan mempengaruhi jumlah user yang dapat mengakses ke server kita. Karena state connection nya dipakai percuma untuk koneksi ke database yang mana sudah tidak dibutuhkan lagi.

Login SSH from linux/unix to linux/unix Using Shared Key

Tulisan ini melanjutkan dari postingan saya sebelumnya. Jika sebelumnya kita mencoba login dari windows ke linux sekarang antara linux ke linux. Secara konsepnya sama, akan tetapi di sisi client nya saja berbeda.

Linux Client

1.Kita perlu generate key kita
[tri@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tri/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tri/.ssh/id_rsa.
Your public key has been saved in /home/tri/.ssh/id_rsa.pub.
The key fingerprint is:
52:12:7a:b5:c7:bf:0a:aa:e3:90:e8:1a:96:65:62:ef tri@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|      . .        |
|     . o o       |
|    . o o o      |
|     . o . .     |
| o o  . S   .    |
|..*.   .     .   |
|ooo.    .   .    |
|o....  . . .     |
|o. Eoo.   .      |
+-----------------+
Kita bisa lihat private key(identification) dan public key sudah tergenerate automatis dan peletekan file nya. Jika ingin login tanpa password atau passphrase maka tinggal dikosongkan saja passhprhase nya. Dengan demikian server hanya akan melihat apakah user memiliki private key nya. Jika tidak sama maka akan di tolak, permission denied.
2.Kirimkan file id_rsa.pub ke server
scp id_rsa.pub usernameServer@hostnameServer:.
Dengan menjalankan command tersebut berarti kita mengirimkan file id_rsa.pub ke dalam home dari usernameServer.

Dari sini maka settingan untuk client sudah selesai. Untuk bagian server jangan lupa kita tambahkan di authorized_keys sesuai dengan artikel sebelumnya

Login SSH to linux use Putty Windows with Shared Key

Pada tulisan saya kali ini saya ingin berbagi sekaligus menjadi catatan saya sendiri. Mungkin kita sering mendapatkan masalah saat ingin melakukan login ke server linux menggunakan Putty dari Windows. Sebenarnya konsepnya hampir sama seperti saat kita ingin login dari linux ke linux menggunakan Shared Key. Perlu diingat, Shared key yang kita gunakan disini adalah public key yang akan kita generate menggunakan rsa.
Perlu dijelaskan lagi, apasih keunggulan dari login menggunakan metode ini. Keunggulanya adalah kita dapat melakukan login tanpa menggunakan password dari account yang bersangkutan cukup dengan menggunakan secret passphrase. Selain itu hanya orang yang mempunya secret key ini saja yang bisa login. Jadi ada 2 pengamanan disini. Selain harus tau passphrase nya pengguna juga harus punya secret key nya.
Langsung saja saya akan break down apa saja yang akan kita siapkan. Pertama adalah SSH Server di linux (Bisa Bebas di OS mana konsepnya hampir sama). Kemudian yang kedua adalah Client.

Bagian Client


1. Download putty.exe ,putty-keygen dan winscp
putty.exe adalah applikasi ssh client. Sedangkan putty-keygen merupakan program untuk menggenerate private key dan public key nya.
2. Open putty-keygen nya
Kemudian kita pilih pada option menggunakan rsa2 dan jumlah bit 1024. Setelah itu kita click tombol generate. Disitu kita disuruh untuk menggerakan mouse kita pada box yang tersedia. Hal itu dilakukan untuk menggenerate acak dari key kita. Kemudia kita masukan passphrase yang ingin kita masukan. Langkah terakhir kita save private key dan publik key-nya.
3. Edit Publik Key sebelum kita kirim ke server tujuan
Buka file dengan editor kesukaan anda. Kalo saya notepad ++ saja. tambahkan ssh-rsa pada bagian awal public key dan pastikan kode file tersebut dalam satu baris

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhK8zzE2lr43YlU/R3bVPsBLt2IVoRzdMQLdMjOUyjwnqVVQpq6WyVenR2+azzUM5nVaggcncGVa41F1L5LaOkn0fcQShcd2eqmBjQ8cQs0axud65wntLwO/2pfXu5mvUxyw29z0jBi/Koux8BikSOodPc7E4psbd4IvSIjrHEPbT6m0MFuITBnUOB5o1jm3OSSQuhCf+ozcpVexlsNbrqy/mm06fJ5j+Kiu8NXsXtE/gPk1UDthkyQdSA6hLM6KKpGpLrMEmziUEW9J3xZU6gPdN70HwR5np5VBiGax3DOvZ+KpRsT/hj5MixxYeB6s+yZBZ1xCcP0NziMdSufk+uQ== SVCFTP@hotname


3. Send over publik key ke server tujuan menggunakan winscp

4. Setting applikasi putty client agar login beserta private key

Click session masukan hostname or IP server tujuan. Open dengan menggunakan ssh port 22(default, Jika adaperubahan sesuaikan). Kemudian click data masukan username dari username server yang menyimpan publik key kita. Setelah itu klik pada ssh - auth dan masukan file private key kita. Itu saja konfigurasinya kemudian kita save.

Bagian Server



1. Check settingan pada /etc/ssh/sshd_config

PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Kita harus mengaktifkan RSAAuthentication dan Public Key Authentication karena itulah yang akan kita gunakan. Sedangkan AuthorizedKeysFile merupakan letak dari public key file yang akan di read oleh ssh server

2. Jika ada perubahan di sshd_config. Jangan lupa untuk dilakukan reload
/etc/init.d/sshd reload

Jika hanya perubahan konfigurasi alangkah lebih baiknya hanya kita reload aja. Sehingga tanpa mengganggu koneksi yang sedang aktif.

3. Sekarang waktunya kita membuat folder untuk meletakan key di dalam file authorized_keys

cd
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

Maksud cd diatas untuk masuk kedalam home folder si user. Kemudian perlu diingat akan permission nya. Jika tidak anda akan kebingungan apa yang salah. Saya sendiri juga pernah mengalami masalah tersebut. Tapi tenang saja kita bisa troubleshoot nya pada log /var/log/secure.

4. Masukan public key yang dikirimkan dari client ke Server kedalam authorized_keys

cd
cat publik_key >> .ssh/authorized_keys


Setelah semuanya sudah siap saat nya untuk mencobanya. Pada putty yang sudah kita setting tadi kita load dan open connection. Apabila erronya adalah our key refused berarti publik key yang kita kirimkan mengalami masalah.

Make Swagger with JavaConfig on Spring 3 MVC

Pada Postingan ini, saya ingin berbagi pengalaman build swagger di spring 3. Swagger merupakan view yang cantik dan rapi untuk diberikan untuk developer yang ingin memanfaatkan Applikasi kita. Karena setelah mencoba muter-muter searching google tidak ada yang simple dan tidak sesuai dengan applikasi saya. Maka saya akan membagikan pada anda dan sekaligus catatan untuk saya. Akan tetapi contoh yang saya berikan menggunakan cara dengan metode java config bukan by xml. Berikut postinganya semoga bermanfaat.

1. Edit pom.xml. Make sure depedency ini ada

    
org.springframework
spring-core
3.2.2.RELEASE


commons-logging
commons-logging




org.springframework
spring-web
3.2.2.RELEASE


org.springframework
spring-webmvc
3.2.2.RELEASE


com.mangofactory
swagger-springmvc
0.8.8
jar


2. Edit pada dispatcher servletnya. Kalo ditempat saya namanya mvc-dispatcher-servlet.xml file ini diconfig didalam web.xml. Didalam bean dispatchernya tambahkan

        


com.package.configuration merupakan kumpulan paket untuk konfigurasi applikasi kita. Selain untuk applikasi REST nya juga untuk konfigurasi pada swagger. Jadi bahasa panjangnya dari konfigurasi diatas. Disaat applikasi ini run dan ada request masuk dan termaping pada dispatcher ini maka akan dilakukan component scan untuk mendeteksi semua notasi untuk konfigurasi applikasi. Component Scan yang akan di scan tersebut berada di dalam package com.package.configuration.



3. Buat file java untuk configurasi di swaggernya. Ditempat saya namanya SwaggerConfig.java



@Configuration
@EnableSwagger
@EnableWebMvc
public class SwaggerConfig {

private SpringSwaggerConfig springSwaggerConfig;

@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}

@Bean
public SwaggerSpringMvcPlugin customImplementation(){

return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo());
}

private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo(
"Name REST API",
"Description Rest API",
"API TOS",
"username@youremail.com",
"API License",
"Url API License"
);
return apiInfo;
}
}

Apa yang ditulis diatas untuk melakukan configurasi swagger info nya. 4. Konfig untuk Main Applikasinya. Ditempat saya namanya AppConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.package.controller")
public class AppConfig extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/swagger/**").addResourceLocations("/WEB-INF/swagger/");
}
}


Maksud dari code diatas melakukan ComponentScan lanjutan jika di dalam bahasa xml . Untuk Configurasi ini diberlakukan untuk semua yang ada di dalam package com.package.controller. Sedangkan addResourceHandlers untuk memapping resource yang static. Kita masukan resource static untuk template dari swagger nya. Bisa didownload disini Disini



4. Tahapan yang terakhir di sisi Main REST nya(com.package.controller). Ditempat saya namanya AppController.java



@Controller
@Api(value="test",description = "Api Mail")
@RequestMapping("/test")
public class AppController {
@ApiOperation(value = "Send a Email",notes = "This is to send email")
@RequestMapping(value="/send",method=RequestMethod.GET)
public @ResponseBody ResponseEntity sendEmail(){
//code anda
}
}

Yang perlu dicermati hanyalah @Api untuk mendeskripsikan di link rest group contoh diatas adalah /test . Jadi mungkin nanti ada banyak menjadi /test/send , /test/get. Kemudia adalah @ApiOperation juga untuk mendeskripsikan di sub link nya Jadi cukup itu saja cara mengkonfigurasikan Swagger di Spring 3. Kalo ada pertanyaan silahkan Comment


Clean shortcut ^M File di linux

    Buat temen2 yang suka koding. Pasti biasanya mengalami masalah dalam menhilangkan ^M pada kodinganya. Hal tersebut biasanya terjadi saat menggunakan file codingan dari Windows ke Linux/Unix. Untuk menghilangkab symbol tersebut ada tiga cara jika berdasarkan pendapat penulis:

1. Edit di file script kodinganya. Bisa menggunakan notepad++. Untuk melihat symbolnyq dapat kita tampilkan dengan mensetting di view->show all symbol. Kita dapat melihat bahwa ada tulisan cr lf. Yang benar untuk linux cuman lf saja. Cara menhilangkanya di file->eof->linux/unix.
2. Dengan menggunakan vi editor. Tekan :%s/^M//g. Untuk mengetikan ^M tekan ctrl+v ctrl+m
3. Yang terakhir kita gunakan dos2linux nama_file

Find command

Find command adlh command untuk mencari file,direktori berdasrakan berapa option.
Option:
1. Nama file (-name)
2.path name (-path)
3. Type pencarian (-type f untuk file -type d untuk direktory)
4.modifikasi file(-mtime)
5.ukuran file(-size)
 
Cara dasar penggunaan command ini adalah
Find path_name option kata_pencarian
find . -name \*.jpg
Pada command diatas maka hasil pencarian adalah semua path atau file yang bercontain ??.jpg
 
Find . -name \*foto\* -type d
Maka akan muncul semua file or directory tp hanya directory yg mengandung kata foto

Pada command ini juga dapat ditambahkan operator seperti or and dan not
Operator OR
Find . -name \*picture\* -or -name \*foto\*
Operator AND
Find -path document -type f -size +100M
Maksudnya mencari path yg ada nama document dan yg bertype fike dan bersize lebih dari 100M
Operator not
Find . -path document -not -type d
Maka yg muncul hanyalah file didalam path document saja

Pada command find juga ada beberapa extra command yaitu -print -delete -exec

A Lot of file in /var/spool/clientmqueue

    Pernah saya mendapati problem bahwa didalam /var/spool/clientmqueue terdapat banyak sekali file. Kemudia saya cek didalam /var/log/maillog, ternyata file tersebut membengkak. setelah cek didalam /var/log/maillog isinya hanya berupa "stat=Deferred: Connection refused by [127.0.0.1]".
    Setelah saya coba cek service pada sendmail ternyata service sendmail server tidak menyala. setelah saya aktifkan sendmail daemon servernya log pada /var/log/maillog menggenerate lagi akan tetapi message dia berubah menjadi connection successfull dan dapat mengirimkan mail ke user di dalam system.
    Untuk mengatasi agar maillog tidak membengkak. Kita perlu clear queue log tersebut. untuk mengecek berapa banyak queue log-nya dengan cara mailq. maka anda akan diberi summary berupa statistic mail yang akan anda terima dari system. Kemudia cara gampang untuk menghapus queue mail. cukup dengan masuk ke /var/spool/mqueue kemudian rm file yang ada didalamnya. Jika sudah coba anda masuk ke dalam /var/spool/clientmqueue maka hanya akan ada 1 file saja, yaitu pid file dari sendmail client.
Please copy and share it, if it helps you
 
Copyright 2009 My Note All rights reserved.
Free Blogger Templates by DeluxeTemplates.net
Wordpress Theme by EZwpthemes
Blogger Templates