Belirli bir portta TCP Trafiğini izleyin


49

Bunun için oldukça yoğun bir şekilde arama yaptım, ancak çalışan bir örnek bulamadım.

Amacım, gelen bağlantıları görmek ve bunları bir metin dosyasına yazmak için belirli bir bağlantı noktasında TCP trafiğini izlemektir. Alıcı, tam olarak istemcinin ikinciye bağlandığını göstermek için her satırda bir zaman damgasına ihtiyacım var.

Netstat, nmap ve tcptrack'i çoktan bitirdim, ancak hiçbiri zaman damgasını desteklemiyor.

Belirli bir yerel bağlantı noktasını izlersem ve bir bağlantı yapıldığında bir dosyaya metin yazarsam, ardından her satırdaki tarihi bir araya getirirsek, linux kabuk betiğinin çalışabileceğini düşünüyordum.

Bununla oynuyordum:

netstat -ano|grep 443|grep ESTABLISHED

bunun kadar iyi:

tcptrack -i eth0 port 443

fakat hiçbiri bağlantımın geldiği zamana ihtiyacım olduğu gibi ihtiyaçlarıma uymuyor.

Herhangi bir öneriniz varsa veya beni doğru yöne işaret edebilirseniz çok memnun oluruz.

Teşekkürler. :)

linux  bash 

Haha yığın akışından göç etti ama unix /
linux'a

Yanıtlar:


70

düzenleme : Hala bu yıllar sonra için oylar alıyorum. Lütfen bu cevap için gitmeyin, burada kullanarak cevapiptables bence çok üstün.


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

ya da sadece tcp-syn, ya da sadece tcp-ack(tahminim bu olurdu), neye ihtiyacınız olduğuna bağlı olarak.


Her bağlantı için ana bilgisayar adını göstermek yerine, IP ile geçersiz kılmanın bir yolu var mı?

Evet, -ntcpdump'tan sonra ekleyin (man tcpdump: -n Adresleri (yani, ana bilgisayar adreslerini, bağlantı noktası numaralarını, vb. )
İsimlere dönüştürmeyin

5
Çekirdek kütüğünün spam edilmesinin gerçekten üstün olmadığını iddia ediyorum. ;)
Daniel B,


1
@ Çekirdek günlüğünü bununla kullanırken problemi azaltın, çünkü çözümün her şeyden önce olduğu gibi kalsın. İptables çözümü, kuralı manuel olarak kaldırmazsanız geride bir "sürpriz" bırakmak anlamına gelir. Bu sürpriz hiçbir zaman tam bir kök diske sahip olma anlamına gelebilir. Üzgünüm, ama bunu telafi ediyorum (:
John Blackberry,

31

Bunun için Linux çekirdeğindeki iptables desteğini kullanabilirsiniz. Başta, orta derecede kullanışlı olması için herhangi bir ekstra yazılım gerektirmediği yönündedir. Dezavantajı, kurulması için kök ayrıcalıkları gerektirmesidir (ancak ayrıcalıklı bir liman olan 443 numaralı bağlantı noktasından bahsettiğinizden, muhtemelen çoğu çözümde kök ayrıcalıklarına ihtiyacınız vardır).

Şunun gibi bir iptables kuralı ekleyin:

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

(Parçayı -I INPUTzevkinize uyacak şekilde ayarlayın .)

Kural tetiklendiğinde, çekirdek tarafından bir syslog girişi yayınlanır. Örneğin, bir giriş kuralında, günlük girişi aşağıdaki gibi görünebilir:

Dec 5 09:10:56 ana bilgisayar adı çekirdeği: [1023963.185332] HTTPS SYN: IN = ifX ÇIKIŞI = MAC = 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 Kimlik = 11901 DF PROTO = TCP SPT = 37287 DPT = 443 PENCERE = 8192 RES = 0x00 SYN URGP = 0

Ardından, bu bilgilerle faydalı bir şey yapmak için değirmenden herhangi bir günlüğünü izleme aracı kullanabilirsiniz. Sistem günlüğü uygulamanız destekliyorsa, bunları ayrı bir günlük dosyasına yönlendirebilir, bağlantı verilerini ikinci bir zaman damgası olan bir dosyaya ek bir yazılıma gerek duymadan etkin bir şekilde yazabilirsiniz.

LOGHedefin sonlandırılmayan bir hedef olduğunu unutmayın; bu, izleyen kuralların hala değerlendirileceği ve paketin LOG kuralı tarafından reddedilmeyeceği veya kabul edilmeyeceği anlamına gelir. Bu, LOGhedefi güvenlik duvarı kurallarında hata ayıklamak için de yararlı kılar .

Günlüğünüzü taşmasını önlemek için, limitmodülü bununla birlikte kullanmayı düşünün . Detaylar için iptables (8) man sayfasına bakınız.


bunu tetikleyen bir python betiği çalıştırmak mümkün mü?
Karl Zillner

Bu IP tablo kurallarını tamamladıktan sonra silmeyi unutmayın, aksi halde kurallara bağlı olarak günlükleri oldukça spam olarak alırlar. digitalocean.com/community/tutorials/…
Mo Beigi

26

Mikro-saniye Çözünürlük

Varsayılan olarak, tcpdump yardımcı programı, mikro saniye çözünürlüğü ile zamanı bildirir. Örneğin:

$ sudo tcpdump -i any port 443

aşağıdakine benzer çıktı gösterecektir:

12: 08: 14.028945 IP localhost.33255> localhost.https: Bayraklar [S], seq 1828376761, 43690 galibiyet, seçenekler [mss 65495, sackOK, TS val 108010971 ecr 0, no, wscale 7], uzunluk 0
12:08: 14.028959 IP localhost.https> localhost.33255: Bayraklar [R.], sıra 0, ack 1828376762, 0 kazan, uzunluk 0

Tcpdump seçeneklerinin tam listesi için tcpdump (8) 'e, kullanabileceğiniz filtrelerin tam sözdizimi için pcap-filter'a (7) bakınız.


5

443, şifreli trafiktir - bu bağlantı noktasında herhangi bir şekilde trafiğin başını veya yolunu yapmak çok zordur:

yapabilirsin

yum kurulum ngrep veya apt-get kurulum ngrep

o zaman koş

ngrep -W byline -d any port 443 -q

2

Bunu, gelen ve giden paketleri diğer makinelerden izlemek için de isteyebilirsiniz.

tcpflow -i eth0 -c port 7891

( -iağdan bahsetme seçeneği -c, paketleri konsolda yazdırma seçeneği )


Bu gerçekten bir yorum ve asıl sorunun cevabı değil . Bir yazarın açıklamasını eleştirmek veya talep etmek için, yazdıklarının altında bir yorum bırakın; istediğiniz zaman kendi yazılarınıza yorum yapabilirsiniz ve yeterli saygınlık elde ettiğinizde , herhangi bir yayına yorum yazabilirsiniz . Lütfen okuyun Neden yorum yapmak için 50 itibara ihtiyacım var? Bunun yerine ne yapabilirim?
DavidPostill


0

Her zaman ilgilenilen bağlantı noktalarındaki trafiği izleyecek kalıcı bir çözüme ihtiyacınız varsa, QoS (linux'ta tc komutu) kullanmanızı öneririm. tc biraz şifreli ve belgesiz, bu yüzden gerçek zamanlı izleme için QoS ve net verilerini ayarlamak için FireQoS kullanıyorum.

Daha fazla bilgi için bunu kontrol edin: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers


Bunun, iPTables + --log'un çalışacağı günlük bağlantıları için biraz daha bittiğini söyleyebilirim.
djsmiley2k - CoW

Haklısın, bağlantıları kaydetmeniz gerekiyorsa, bu geçersizdir. Bu çözümü, hangi müşterilerin bağlı olduğunu değil, hizmetin ne kadar bant genişliği kullandığını izlemek için kullanıyorum.
Costa Tsaousis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.