Pantau Lalu Lintas TCP pada port tertentu

49

Saya telah mencari ini secara luas, tetapi tampaknya tidak dapat menghasilkan contoh yang berfungsi.

Tujuan saya adalah untuk memonitor lalu lintas TCP pada port tertentu untuk melihat koneksi yang masuk dan menulisnya ke file teks. Tangkapannya adalah saya juga perlu cap waktu di setiap baris untuk menunjukkan dengan tepat ketika klien terhubung ke yang kedua.

Saya sudah kehabisan netstat, nmap, dan tcptrack, tetapi tidak ada timestamp yang mendukung.

Saya berpikir skrip shell linux mungkin berfungsi jika saya memonitor port lokal tertentu dan menulis teks ke file ketika koneksi dibuat kemudian baru saja menyatukan tanggal pada setiap baris.

Saya bermain dengan ini:

netstat -ano|grep 443|grep ESTABLISHED

dan juga ini:

tcptrack -i eth0 port 443

tetapi tidak sesuai dengan kebutuhan saya karena saya membutuhkan waktu koneksi masuk

Jika Anda memiliki saran atau dapat mengarahkan saya ke arah yang benar, itu akan sangat dihargai.

Terima kasih. :)


sumber
Haha bermigrasi dari stackoverflow tetapi perlu bermigrasi ke unix / linux
Kolob Canyon

Jawaban:

71

sunting : Saya masih menerima upvotes untuk tahun ini kemudian. Tolong jangan pergi untuk jawaban ini, jawaban yang digunakan diiptables sini jauh lebih unggul menurut saya.


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

atau hanya tcp-syn, atau hanya tcp-ack(tebakan saya akan menjadi yang itu), tergantung pada apa yang Anda butuhkan.

Terkutuk
sumber
Alih-alih menunjukkan nama host untuk setiap koneksi, apakah ada cara untuk menimpanya dengan IP?
Yap, tambahkan -nsetelah tcpdump (man tcpdump: -n Jangan mengonversi alamat (mis., Alamat host, nomor port, dll. )
Ke
5
Saya berpendapat bahwa mengirim log kernel tidak benar-benar unggul. ;)
Daniel B
1
Ah, tapi saya akan, memberikan satu mengkonfigurasi dengan benar ke mana log harus pergi tentu saja: P Tapi hei, jawaban ini masih ada di sini jika itu adalah deal breaker :)
Wrikken
2
@ Membuat masalah dengan menggunakan log kernel untuk ini adalah bahwa, menggunakan solusi Anda ketika Anda ctrl + c dari tcpdump semuanya tetap seperti sebelumnya. Solusi iptables berarti meninggalkan "kejutan" jika Anda tidak menghapus aturan secara manual. Kejutan ini dapat diterjemahkan dengan memiliki disk root penuh dalam waktu singkat. Maaf, tapi saya tidak mendukung ini (:
John Blackberry
31

Anda dapat menggunakan dukungan iptables di kernel Linux untuk ini. Sisi baiknya adalah tidak memerlukan perangkat lunak tambahan apa pun untuk cukup bermanfaat. Kelemahannya adalah bahwa ia membutuhkan hak akses root untuk mengatur (tetapi mengingat bahwa Anda berbicara tentang port 443, yang merupakan port istimewa, Anda mungkin perlu hak akses root dengan sebagian besar solusi).

Tambahkan aturan iptables dengan sesuatu seperti:

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(Sesuaikan -I INPUTbagian yang sesuai dengan selera Anda.)

Ketika aturan dipicu, entri syslog akan dipancarkan oleh kernel. Misalnya, dengan aturan input, entri log mungkin terlihat seperti:

5 Des 09:10:56 kernel hostname: [1023963.185332] HTTPS SYN: IN = ifX OUT = MAC = 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 08: 00 SRC = ABCD DST = WXYZ LEN = 52 TOS = 0x00 PREC = 0x20 TTL = 119 ID = 11901 DF PROTO = TCP SPT = 37287 DPT = 443 WINDOW = 8192 RES = 0x00 SYN URGP = 0

Anda kemudian dapat menggunakan alat pemantauan log run-of-the-mill untuk melakukan sesuatu yang berguna dengan informasi ini. Jika implementasi syslog Anda mendukungnya, Anda bahkan dapat mengarahkan ini ke file log yang terpisah, secara efektif memenuhi persyaratan Anda untuk menulis data koneksi ke file yang dicocokkan waktu dengan yang kedua tanpa perangkat lunak tambahan.

Perhatikan bahwa LOGtarget tersebut adalah target non-terminating, yang berarti bahwa setiap aturan yang mengikutinya masih akan dievaluasi, dan paket tidak akan ditolak atau diterima oleh aturan LOG itu sendiri. Ini membuat LOGtarget berguna juga untuk debugging aturan firewall.

Untuk menghindari membanjiri log Anda, pertimbangkan untuk menggunakan limitmodul bersamaan dengan ini. Lihat halaman manual iptables (8) untuk detailnya.

sebuah CVn
sumber
apakah mungkin untuk menjalankan skrip python yang memicu ini?
Karl Zillner
Jangan lupa untuk menghapus aturan tabel IP ini setelah Anda selesai, jika tidak mereka akan meng-spam log cukup tergantung pada aturan. digitalocean.com/community/tutorials/…
Mo Beigi
26

Resolusi Mikro-Kedua

Secara default, utilitas tcpdump akan melaporkan waktu dengan resolusi mikro-detik. Sebagai contoh:

$ sudo tcpdump -i any port 443

akan menampilkan output yang mirip dengan yang berikut:

12: 08: 14.028945 IP localhost.33255> localhost.https: Flags [S], seq 1828376761, win 43690, options [mss 65495, sackOK, TS val 108010971 ecr 0, nop, wscale 7], panjang 0
12:08: 14.028959 IP localhost.https> localhost.33255: Bendera [R.], seq 0, ack 1828376762, win 0, panjang 0

Lihat tcpdump (8) untuk daftar lengkap opsi tcpdump, dan pcap-filter (7) untuk sintaksis lengkap dari filter yang dapat Anda gunakan.

CodeGnome
sumber
5

443 adalah lalu lintas terenkripsi - bagaimanapun sulitnya untuk membuat head atau tail of traffic pada port ini:

Anda dapat melakukan

yum instal ngrep atau apt-get install ngrep

lalu lari

ngrep -W byline -d any port 443 -q
Halcyon terbukti
sumber
2

Anda mungkin memerlukan ini juga untuk memonitor paket yang masuk dan keluar dari mesin lain.

tcpflow -i eth0 -c port 7891

(opsi -iuntuk menyebutkan jaringan, opsi -cuntuk mencetak paket di konsol)

mulai lagi vijay
sumber
Ini benar-benar komentar dan bukan jawaban untuk pertanyaan awal. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka - Anda selalu dapat mengomentari posting Anda sendiri, dan setelah Anda memiliki reputasi yang cukup Anda akan dapat mengomentari posting apa pun . Harap baca Mengapa saya perlu 50 reputasi untuk berkomentar? Apa yang bisa saya lakukan?
DavidPostill
1

Anda dapat menggunakan tcpdump atau Wireshark.

sigjuice
sumber
0

Jika Anda membutuhkan solusi permanen yang akan selalu memonitor lalu lintas di pelabuhan yang diminati, saya sarankan untuk menggunakan QoS (perintah tc di linux). tc agak samar dan tidak berdokumen, jadi saya menggunakan FireQoS untuk mengatur QoS dan netdata untuk memonitornya secara waktu nyata.

Periksa ini untuk informasi lebih lanjut: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers

Costa Tsaousis
sumber
Saya akan mengatakan ini sedikit lebih dari sekadar membunuh untuk koneksi logging, di mana iPTables + --log akan bekerja.
djsmiley2k - KK
Anda benar, itu berlebihan jika Anda perlu mencatat koneksi. Saya menggunakan solusi ini bukan untuk memantau klien mana yang terhubung, tetapi berapa banyak bandwidth yang digunakan layanan.
Costa Tsaousis