Pendahuluan:
Artikel berikut ini disalin sepenuhnya 1 banding 1 (plagiat penuh!!) dari situs berikut untuk dapat merujuknya ke sini jika artikel tersebut hilang dari akses Internet atau pindah lokasi.
http:// www.linux-magazine.com/Issues/2015/181/Querying-Sockets-with-ss
Majalah Linux. Artikel dari Edisi 181/2015
Penulis:Chris Binnie
ss . yang sederhana utilitas mudah dimengerti dan mudah diketik, tetapi menambahkan beberapa opsi canggih ke perangkat admin Anda.
Nama untuk beberapa utilitas Linux sangat kecil sehingga Anda tiba-tiba meluncurkannya dengan memasukkan kesalahan ketik pada baris perintah. Mengapa repot-repot mengetik kata-kata yang panjang ketika singkatan yang sangat cocok sudah cukup? Satu perintah yang sangat kecil (baik dalam nama dan jejak berukuran saku di hard disk Anda) adalah utilitas kecil yang disebut ss .
Ss pukulan beberapa tingkat di atas kelas terbangnya. Jika Anda terbiasa dengan salah satu alat populer yang digunakan oleh admin sistem untuk memeriksa tautan jaringan, saya yakin Anda akan senang mendengar bahwa fungsinya tidak akan terlalu rumit untuk dipahami.
Untuk yang penasaran di antara kita, “ss ” singkatan tampaknya untuk kata-kata “statistik soket.” Ss dibundel dengan paket iproute2. Jika, karena alasan yang sangat tidak biasa, Anda tidak menemukan ss pada sistem mirip Debian, Anda selalu dapat menginstalnya dengan menjalankan:
sudo apt-get install iproute2
Soket, adalah port dan alamat IP. Anda dapat menganggap soket sebagai mengidentifikasi layanan yang mendengarkan pada nomor port tertentu dari komputer tertentu. Sepasang soket, dalam hal ini, terdiri dari alamat IP klien, nomor port klien, alamat IP server, dan nomor port server. Oleh karena itu, menanyakan informasi melalui soket memungkinkan Anda membidik dengan cepat pada layanan tertentu yang berjalan pada alamat IP tertentu.
Saya akan lalai jika tidak menyebutkan Soket Domain Unix. Soket Domain Unix, yang memfasilitasi komunikasi antar proses yang berjalan pada mesin lokal, melayani sejumlah tujuan yang berguna, seperti mengaktifkan izin yang diperlukan untuk mengakses sumber daya di antara proses yang seharusnya tidak memiliki hak istimewa.
Memulai dengan ss
Dalam kebanyakan skenario, ss akan dijalankan dari akun pengguna biasa. Di sistem saya, ss berada di /usr/sbin/ss direktori. Saya akan memulai dengan beberapa kegunaan dasar untuk ss. Perintah berikut menunjukkan output untuk jaringan IPv4:# ss -4
Output yang disingkat (Listing 1) menunjukkan komunikasi klien dan server. Ingatlah bahwa klien juga bisa menjadi server, dan sebaliknya, tergantung pada arah arus informasi.
Cantuman 1
Output ss DasarState Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.0.2:37564 192.168.0.100:www
ESTAB 0 0 192.168.0.2:47592 192.168.0.156:smtp
ESTAB 0 0 192.168.0.2:ssh 192.168.0.49:64009
Ganti opsi -4 dengan -6 untuk menampilkan informasi tentang koneksi IPv6.
Seperti yang Anda lihat di Daftar 1, 192.168.0.2 adalah alamat IP mesin lokal, dan utilitas /etc/services yang berguna telah mengubah beberapa nomor port menjadi nama (seperti ssh, www, dan smtp).
Ss yang sangat baik juga menawarkan informasi tentang TCP, UDP, Soket Domain Unix lokal, dan soket jarak jauh. Seperti yang akan saya jelaskan nanti, apa yang membuat ss sangat kuat adalah kemampuannya untuk menangani keadaan koneksi.
Saya sering menggunakan ss untuk menanyakan port mana yang dibuka oleh daemon yang diinstal di komputer. Gunakan opsi l untuk memeriksa port mendengarkan (Daftar 2):
Cantuman 2
Melihat Port PendengaranState Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:*
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 128 127.0.0.1:http *:*
# ss -l
Anda mungkin ingin memeriksa port mendengarkan selama rutinitas admin sistem harian Anda untuk memastikan bahwa layanan yang tidak terduga dan berpotensi tidak aman tidak dibiarkan diaktifkan. Atau, Anda mungkin ingin memeriksa rootkit yang kurang canggih yang mungkin tidak menyembunyikan port terbukanya secara efektif.
Salah satu dari perintah lsof -i
netstat -tulpn
akan membantu Anda mengetahui proses (PID) mana yang membuka port Anda, sehingga Anda dapat mematikannya jika perlu.
Cukup menjalankan perintah ss tanpa opsi apa pun menyediakan daftar "koneksi" saat ini ( perhatikan ini sebenarnya adalah "soket"), seperti yang ditunjukkan pada Daftar 3.
Cantuman 3
ss Tanpa hiasan
# ss
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.0.2:37564 192.168.0.49:tcpmux
ESTAB 0 64 192.168.0.2:ssh 192.168.0.143:64009
ESTAB 0 0 192.168.0.2:47609 192.168.0.88:gopher
PID
Jika Anda tidak dapat mengakses lsof, dan Anda tidak menyukai netstat (saya bukan penggemar berat), utilitas super-duper ss juga dapat melaporkan PID yang terkait dengan port terbuka Anda. Untuk melihat proses mana yang menggunakan soket secara langsung, cukup masukkan a -p ke dalam campuran:# ss -p
Satu peringatan adalah saya harus login sebagai root untuk mendapatkan informasi tambahan. Daftar 4 menunjukkan contoh dari apa yang diharapkan.
Cantuman 4 ss -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.10.10.20:ssh 10.10.10.10:52918 users:(("sshd",31195,3),("sshd",31204,3))
Bekerja mundur dari nama aplikasi, yaitu sshd dalam hal ini, Anda dapat melihat PID 31195 dan 31204; 31204 milik pengguna non-hak istimewa (pengguna login saya), dan 31195 tampaknya dihasilkan dari pemisahan hak istimewa pintar yang digunakan oleh sshd.
SSH dirancang untuk meminimalkan kemungkinan bug pemrograman yang menyebabkan masalah sistemik yang sangat serius dengan membatasi akses dan membatasi layanan ke jail chroot untuk proses SSH yang menghadap jaringan. Untuk mencapai tujuan ini, SSH menggunakan dua proses. Proses yang dimiliki root memantau kemajuan proses yang tidak memiliki hak istimewa, yang sebelumnya memiliki UID dan GID yang tidak digunakan.
Mencari Lebih Dalam
Anda dapat menggunakan ss -s untuk mengambil screed statistik yang berkaitan dengan berapa banyak soket yang terbuka dan protokol mana yang mereka gunakan (Daftar 5).
Cantuman 5
ss -s
Total: 201 (kernel 218)
TCP: 6 (estab 2, closed 0,
orphaned 0, synrecv 0,
timewait 0/0), ports 5
Transport Total IP IPv6
* 218 - -
RAW 0 0 0
UDP 5 5 0
TCP 6 6 0
INET 11 1 0
FRAG 0 0 0
Ini bukan perbandingan terbaik, tetapi Anda bisa mendapatkan hasil yang agak mirip menggunakan perintah netstat berikut:# netstat -tan | grep -v "Proto" | grep -v "Active" | awk '{print $6}' | uniq -c
Perlu disebutkan bahwa utilitas super ss memiliki kebiasaan mengungguli alat jaringan lain dalam tes benchmark. Dibandingkan dengan netstat yang banyak digunakan, misalnya, ss memang memberikan hasil yang sangat cepat. Perlu diingat, bagaimanapun, bahwa ss tidak dirancang untuk menjawab setiap pertanyaan yang mungkin, tetapi mencerminkan filosofi Unix bahwa setiap komponen sistem harus "melakukan satu hal dengan baik." Pengguna berpengalaman sering menggabungkan ss dengan alat seperti netstat kemudian memangkas hasilnya menggunakan alat seperti grep, awk, dan sed.
Misalnya, jika Anda ingin melihat aplikasi mana yang mengikat port tertentu, Anda dapat menggunakan ss dengan grep, sebagai berikut:# ss | grep 58620
Menjadi Spesifik
Anda hanya dapat melihat soket TCP dengan:# ss -t
Atau, Anda dapat menuliskan opsi –tcp. Tingkatkan tingkat detail dengan sakelar -a (untuk “semua”):# ss -t -a
Mengubah perintah itu sedikit menghasilkan output untuk menyertakan soket UDP, Raw, dan Unix. Untuk tampilan verbose dari semua soket UDP, masukkan# ss -u -a
dan untuk melihat semua soket Raw, masukkan:# ss -w -a
Jika Anda benar-benar harus memanjakan diri dengan beberapa teks yang membingungkan, Anda dapat memilih untuk melihat semua soket Domain Unix dengan:# ss -x -a
Juga termasuk dalam kotak peralatan yang tampaknya tak berdasar yang disediakan oleh utilitas ss adalah kemampuan untuk waspada terhadap soket DCCP; DCCP adalah protokol jaringan yang kurang umum yang memiliki sifat berorientasi koneksi, pengecekan kesalahan TCP dengan fitur tipe siaran UDP. Protokol DCCP sering digunakan untuk streaming media. Periksa lalu lintas DCCP dengan perintah kecil yang bagus ini:# ss -d -a
Anda juga dapat memantau status koneksi ke komputer Anda dengan memperluas tingkat detail menggunakan opsi -e (Daftar 6).
Cantuman 6 # ss -e
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.0.2:ssh 192.168.0.88:58302 timer:(keepalive,40min,0) ino:2184870 sk:ffff880138d26700
ESTAB 0 0 192.168.0.2:48246 192.1680.56:ntp timer:(keepalive,105min,0) ino:2187726 sk:ffff880138d2748
Listing 6 menunjukkan opsi pengatur waktu yang menawarkan wawasan tentang status terkini dari setiap keepalives pada koneksi. Fitur ini dapat berguna untuk layanan seperti HTTP atau SSH, yang cenderung menggunakan keepalives (lihat kotak berjudul “Keepalive Notes”). Daftar 7 menunjukkan keluaran serupa menggunakan perintah netstat -to.
Catatan Keepalive
Paket keepalive umumnya memiliki TCP ACK yang dikonfigurasi dengan nomor urut yang diatur ke satu kurang dari nomor saat ini yang digunakan pada koneksi. Setiap mesin yang menerima dorongan dari paket semacam itu hanya akan merespons dengan nomor urut yang benar dan, Frankenstein bercanda, mengumumkan bahwa itu memang hidup.
Jenis paket ini terkadang kosong dan umumnya memiliki tiga parameter terkait. Parameter retry akan mendeklarasikan berapa kali harus mengirim paket sebelum sampai pada kesimpulan bahwa ujung koneksi yang lain telah melepaskan ghost. Pengaturan waktu dikonfigurasi sebagai frekuensi pemeriksaan, dan akhirnya interval menentukan lama waktu antara dua paket yang dikirim jika tidak ada respons yang diterima.
Di dalam kernel, Anda dapat mengubah pengaturan ini dengan mengedit nilai-nilai ini di pseudo-filesystem yang dikenal dan disukai sebagai /proc . Satu file, dalam hal ini, adalah /proc/sys/net/ipv4/tcp_keepalive_time , dan Anda dapat mengeditnya sebagai berikut:# echo 75 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 9 > /proc/sys/net/ipv4/tcp_keepalive_probes
Daftar 7 # netstat -to
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 0 host-one:48340 host-four:45358 ESTABLISHED keepalive (6830.00/0/0)
tcp 0 64 host-two:ssh host-three:58302 ESTABLISHED on (0.45/0/0)
Netstat juga memungkinkan Anda menambahkan perintah jam tangan serbaguna dan melihat pembaruan waktu nyata:# watch netstat -to
Ini adalah panggilan yang dekat, tetapi saya harus mengakui bahwa, dalam hal ini, netstat menjaga outputnya tetap bagus dan ringkas dan terlihat sebagus output utilitas ss.
Sumber dan Tujuan
The perintah berikut memungkinkan Anda menemukan informasi tentang soket apa pun dengan tujuan (dst) yang ditujukan ke alamat IP tertentu:# ss dst 192.168.0.1
Sebaliknya, tidak akan mengambil lompatan besar untuk mempertimbangkan bahwa menggunakan opsi src mengungkapkan informasi di sisi sumber soket:# ss src 192.168.0.2
Berguna, ya? Sintaks ini mudah diingat jika Anda sedang terburu-buru, menghemat hari ketika bos yang mudah tersinggung menghembuskan napas ke leher Anda selama pemadaman.
Anda bahkan dapat menggunakan notasi jaringan CIDR di info alamat:
# ss dst 192.168.0.1/24
Tambahkan titik dua di akhir, dan Anda dapat memeriksa port yang sangat spesifik dan rentang alamat IP yang sangat luas secara bersamaan:# 192.168.0.1/24:53
Saya sangat menghargai fungsi ini dalam situasi dengan banyak lalu lintas dan banyak port terbuka. Misalnya, opsi ini memungkinkan Anda memantau semua aktivitas terkait DNS di seluruh subnet /24 dengan satu perintah ss sederhana.
Ekspresi Reguler
Selain nama DNS dan alamat IP, Anda juga dapat menggunakan ekspresi reguler (regex) operator dalam sintaks ss Anda. Lihat nugget kecil ini:# ss dport != :53
Perintah ini mengecualikan dport tujuan pada port DNS 53.
Jika Anda perlu mempertahankan kewarasan dan menghindari hanya melihat angka, Anda juga dapat menerjemahkan port ke dalam format /etc/services:# ss 192.168.0.1:http
Jika Anda siap untuk terkesan, Anda juga dapat memasukkan lebih besar dari, lebih kecil dari, kurang dari atau sama dengan, dan seterusnya:# ss dport > :53
Karakter khusus lainnya juga dimungkinkan, meskipun terkadang karakter khusus perlu melarikan diri. Persamaan abjad, seperti eq (sama), ne (tidak sama), gt (lebih besar dari), dan le (kurang dari) juga berfungsi. Jarak tempuh Anda mungkin berbeda dengan versi utilitas ss yang berbeda.
Status Koneksi
Anda dapat menggunakan –kueri atau -A tambahan kueri untuk membuang tabel soket. Kata ajaib autobound memeriksa port ephemeral tempat soket terpasang. Persiapkan diri Anda untuk screed keluaran, bahkan pada sistem yang tenang. Versi singkat dari output ditampilkan di Listing 8.
Cantuman 8
# ss -a -A all autobound
01 u_str ESTAB 0 0 * 11984 * 0
02 u_str ESTAB 0 0 * 11996 * 0
03 u_str ESTAB 0 0 * 12003 * 0
04 u_str ESTAB 0 0 * 12005 * 0
05 u_str ESTAB 0 0 * 12010 * 0
Anda juga dapat memfilter menurut status TCP; misalnya, perintah berikut memfilter untuk lalu lintas sFTP:# ss state connected dport = :sftp
Apa pun yang diperlakukan sebagai "saat ini" dalam kaitannya dengan port sFTP akan segera ditampilkan.
Anda dapat sedikit memperumit perintah dengan operator boolean:# ss ( sport = :ftp or dport = :http )
Anda bahkan dapat menggunakan ss untuk menemukan koneksi yang berada dalam status TCP tertentu, termasuk yang ditetapkan, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, dengarkan, dan tutup.
Parameter status TCP memungkinkan Anda melakukan kueri yang sangat kuat. Misalnya, memeriksa status FIN–WAIT-1 memungkinkan Anda mengidentifikasi apakah aplikasi Anda telah menutup sisi koneksinya, tetapi host jarak jauh belum menutup sisinya, sehingga mengikat port berharga mesin Anda:
ss -o state fin-wait-1 '( sport = \
:ftp or sport = :http )' \
dst 10.10.3.3/24:22
Jadi Selesai
ss utilitas adalah alat yang ampuh yang akan membantu Anda menanyakan jaringan Anda secara rinci. Ss memiliki performa yang sangat tinggi untuk kueri manual dan otomatis, dan hanya memerlukan sedikit penekanan tombol untuk menjalankan perintah umum.
Alat kecil namun heroik ini membantu melenturkan otot-otot admin sistem mana pun. Jika Anda ingin meningkatkan kemampuan toolkit admin Anda, cobalah berlatih beberapa perintah yang lebih kompleks dalam pekerjaan Anda sehari-hari.