Mesin saya adalah server jadi saya ingin mengabaikan koneksi yang dibuat ke server saya (misalnya ketika seseorang mengunjungi situs web saya). Saya ingin melihat hanya koneksi / permintaan yang dibuat oleh server saya ke tempat lain.
Bagaimana saya hanya melihat koneksi keluar itu?
EDIT: Saya baru mengenal hal-hal semacam ini. Yang saya coba lakukan hanyalah melihat apakah ada sesuatu dari server saya yang dikirim selain data untuk aplikasi web saya. Misalnya, jika seseorang mengunjungi situs web saya, maka jelas server saya akan mengirimkan data ke browser klien. Tapi misalkan ada juga kode di suatu tempat dalam kerangka aplikasi web saya yang mengirimkan data statistik ke tempat lain yang tidak saya sadari. Saya ingin melihat tempat-tempat server saya mengirim data, jika ada. Ini mungkin tidak mungkin, tetapi anggaplah Anda memutuskan untuk menggunakan kerangka php atau nodejs yang tidak Anda tulis: ada kemungkinan kecil itu mungkin mengirim beberapa jenis data di suatu tempat. Jika demikian, itulah yang ingin saya lihat.
sumber
netstat
dalam "mode berkelanjutan" di sana,-c
tidak berfungsi. Anda menggunakan angka sebagai gantinya, inginnetstat -na 1 | find "[Scan_Host_IP_Addr]"
untuk memperbarui setiap1
detik (dalam contoh ini). ( sumber ).strace
pada proses, memfilter untuk pencarian server nama (tidak ada detail, ini bukan jawaban lengkap untuk itu). Atau, Anda dapat menunjukkan DNS terbalik dari IP yang terdaftarnetstat
dengan menghilangkann
opsi yang termasuk dalam jawaban saya.Jika Anda hanya ingin mencatat setiap upaya koneksi, yang termudah mungkin adalah
iptables
LOG
target di Linux (atau fitur firewall logging yang setara pada sistem Anda).Jika Anda memerlukan informasi lebih lanjut seperti durasi koneksi dan jumlah data yang dipertukarkan di kedua arah, maka
conntrackd
(di Linux) mungkin merupakan pilihan terbaik.Namun perhatikan bahwa kedua di atas hanya mencatat lalu lintas yang melewati netfilter, yang umumnya semua lalu lintas tetapi tidak memperhitungkan lalu lintas yang dihasilkan dengan tumpukan IP di ruang pengguna (seperti mesin virtual atau apa pun yang menggunakan soket mentah) atau lalu lintas yang dijembatani.
Untuk solusi yang lebih umum, Anda dapat melihat hal-hal seperti
argus
,bro-ids
,sancp
atauntop
yang log segala macam informasi berdasarkan lalu lintas mereka mengendus pada sebuah antarmuka.sumber
Saya sudah mencoba sekelompok alat, termasuk
iftop
,ntop
,iptraf
, dan tentu saja sangat berguna built-innetstat -tupln
(didukung pilihan yang OS-dependent), tetapi yang paling praktis untuk kasus penggunaan saya ternyatanethogs
- agregat koneksi oleh penyelenggara asal aplikasi , dan paling tidak berisik dari semua.Diinstal melalui:
Jalankan sebagai root:
Jika tujuan Anda adalah melihat semua koneksi TCP yang diprakarsai oleh aplikasi apa pun maka Anda dapat menggunakan:
sumber
Apa yang saya pikir ingin Anda lakukan adalah mendapatkan daftar port mendengarkan dan kemudian menghapusnya dari koneksi TCP lainnya, maka itu akan menjadi semua koneksi keluar. Perintah ss (status soket) menampilkan kolom "Alamat Lokal: Port" dan "Alamat Peer: Port", kita perlu menghapus port mendengarkan dari kolom "Alamat Lokal: Port" dan bukan kolom "Alamat Peer: Port", jika tidak, Anda mungkin kehilangan beberapa koneksi keluar. Jadi untuk mencapai itu saya menggunakan di
\s{2}+
belakang string ": $ port" di grep agar sesuai dengan spasi yang ada di belakang kolom "Alamat Lokal: Port"; kolom itu memiliki dua atau lebih spasi putih di belakangnya, di mana "Peer Address: Port" memiliki satu spasi dan kemudian baris baru (grrr ... seharusnya hanya memiliki baris baru, IMO,\s+
\s{2}+
.) Biasanya saya mungkin mencoba menggunakan fungsi pemfilteran ss, seperti denganss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
. Tapi sepertinya ada batasan berapa lama string itu, itu meledak pada sistem di mana saya punya banyak port mendengarkan. Jadi saya mencoba melakukan hal yang sama dengan grep. Saya percaya yang berikut ini akan berhasil:Catatan ini tergantung pada versi ss yang Anda gunakan, versi yang lebih lama (seperti: ss utility, iproute2-ss111117) memiliki format output yang berbeda, jadi Anda mungkin harus menggunakan $ 3 bukannya $ 4 di awk. Perhatikan juga
ss -tln
danss -tn state listening
memberi Anda output yang berbeda, yang sedikit kontra-intuitif bagi saya. YMMV.Saya menemukan solusi yang sedikit lebih elegan yang tidak perlu mengetahui IP host,
ss -tn state established dst :*
berfungsi dengan baik, saya memodifikasi baris perintah di atas.sumber
ss -tn state listening
pada sebuah host yang menjalankan server FTP, dan secara alami perintah menunjukkan bahwa mesin sedang mendengarkan pada port 21. Jadi tidak berarti bahwaegrep -v
akan menyaring semua host remote yang alamat IPnya termasuk "21" (termasuk "210 "," 211 "," 212 ", ...)? Juga, apakahasort
benar - benar perlu, atau hanya ganti jendela?ss --out
untuk mendapatkan daftar koneksi keluar.tcpdump
memungkinkan Anda untuk melihat semua lalu lintas IP yang mengalir ke / dari antarmuka tertentu dengan kemampuan untuk memfilter berdasarkan kriteria tertentu.tcpdump
biasanya diinstal pada kebanyakan sistem * nix secara default, jika tidak biasanya ada port di suatu tempat untuk mengambilnya untuk distro spesifik Anda.sumber
netstat
adalah pilihan yang baik. Gunakan parameter sesuai kebutuhan. (lihat halaman manualnya) Sebagai contohDi sini ia dapat memonitor semua (a) mendengarkan numerik (n) tcp (t) dan udp (u) proses (p).
Anda juga dapat mencoba
ss
perintahnya. Untuk penggunaan referensi:SS Linux TCP / UDP Network dan Socket Information
sumber
Jika Anda menjalankan Solaris atau turunan, lihat conntrack
sumber