Makinemden giden tüm istekleri / bağlantıları nasıl izleyebilirim?


71

Makinem bir sunucudur, bu yüzden sunucumla yapılan bağlantıları görmezden gelmek istiyorum (örneğin, birileri web sitemi ziyaret ettiğinde). Yalnızca sunucum tarafından başka yerlere yapılan bağlantılar / istekleri görmek istiyorum .

Sadece bu giden bağlantıları nasıl görebilirim ?

EDIT: Bu tür şeylerde yeniyim. Yapmaya çalıştığım şey sadece sunucumdan herhangi bir şeyin web uygulamalarım için olan veriler dışında gönderilip gönderilmediğini görmek. Örneğin, birisi web sitelerimi ziyaret ederse, açıkçası sunucum müşterinin tarayıcısına veri gönderir. Ancak web uygulamamın çerçevesinde, bilmediğim bir yere istatistiksel veri gönderen bir yerlerde de kod olduğunu varsayalım. Sunucumun varsa veri yolladığını görmek istiyorum. Muhtemelen muhtemel değildir, ancak yazmadığınız bir php veya nodejs çerçevesi kullanmaya karar verdiğinizi varsayalım: bir yere bir tür veri göndermesi için küçük bir ihtimal var. Eğer öyleyse, görmek istediğim de bu.

Yanıtlar:


77

Kullanın netstat. Örneğin

$ netstat -nputw
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
[...]
tcp        0      0 192.168.25.222:22       192.168.0.134:42903     ESTABLISHED 32663/sshd: gert [p

tüm UDP ( u), TCP ( t) ve RAW ( w) giden bağlantıları ( lveya kullanmayanlar a) sayısal biçimde listeler ( n, uzun süren olası DNS sorgularını önler) ve pbununla ilişkili programı ( ) içerir .

cÇıktının sürekli olarak güncellenmesini sağlamak için seçenek eklemeyi düşünün .


Teşekkürler. Bu iyi bir bilgi. Güncellenmiş soruma bir göz atar mısınız?
trusktr

1
Tamamen uygunsuz kaçırma (bu cevabın iyi googled olması dışında): Bu cevap Windows ile de çalışır. netstatOrada "sürekli modda" kullanmak , -cişe yaramaz. Bunun yerine sayıları kullanırsınız, netstat -na 1 | find "[Scan_Host_IP_Addr]"her 1saniye güncellenmesi gibi (bu örnekte). ( kaynak ).
ruffin

4
Bu anket, her zaman bütün bağlantıları yakalamayacak .
reinierpost

Etki alanı adları, ip hakkında bilgi gibi daha kullanıcı dostu bilgileri görüntülemenin bir yolu var mı? Belki özel bir komut dosyası kullanarak?
awm

@ awm Eh, bu stracesüreç üzerinde yapılabilir, isim sunucusu aramalarına filtre uygular (detay yok, bu tam bir cevap değil). Alternatif olarak, netstatcevabımda yer alan nseçeneği bırakarak listelenen IP’lerin ters DNS’lerini gösterebilirsiniz .
gertvdijk

11

Her bağlantı girişimini yalnızca günlüğe kaydetmek istiyorsanız, en kolay olanı muhtemelen iptables LOGLinux (ya da sisteminizdeki eşdeğer güvenlik duvarı günlüğü özelliği) hedefidir.

Bağlantının süresi ve her iki yönde paylaşılan veri miktarı gibi daha fazla bilgiye ihtiyacınız varsa, conntrackd(Linux'ta) muhtemelen en iyi seçenektir.

Bununla birlikte, yukarıdakilerin ikisinin yalnızca genel olarak tüm trafiği olan, ancak kullanıcı alanındaki (sanal makineler veya ham yuva kullanan herhangi bir şey gibi) ya da köprülenmiş trafiği olan IP yığınlarıyla oluşturulan trafiği hesaba katmayan yalnızca net filtreden geçen trafiği günlüğe kaydettiğini unutmayın.

Daha genel çözümleri için, gibi şeyler bir göz olabilir argus, bro-ids, sancpya ntoponlar bir arabirimde koklamayı trafiğe dayalı her türlü bilgiyi açın.


8

Ben de dahil olmak üzere, araçlar bir demet denedim iftop, ntop, iptrafve çok kullanışlı dahili tabii netstat -tupln, ama benim kullanımlar için pratik olduğu ortaya çıktı (desteklenen seçenekleri OS bağlıdır) nethogs- bu bağlantıları toplayan menşeli tarafından uygulaması ve hepsinden az gürültülü.

Üzerinden yüklenebilir:

sudo apt-get install nethogs

Kök olarak çalıştır:

sudo nethogs

Amacınız herhangi bir uygulama tarafından başlatılan tüm TCP bağlantılarını görmekse, şunları kullanabilirsiniz:

sudo tcpdump -i lo -A | grep Host:

6

Yapmak istediğim şey, dinleme bağlantı noktalarının bir listesini almak ve daha sonra onları diğer tüm TCP bağlantılarından kaldırmak, o zaman giden bağlantıların tümü olacak. Ss (soket durumu) komutu "Yerel Adres: Bağlantı Noktası" ve "Eş Adres: Bağlantı Noktası" sütunlarını çıkarır, dinleme bağlantı noktalarını "Yerel Adres: Bağlantı Noktası" sütunundan değil, "Eş Adres: Bağlantı Noktası" sütunundan çıkarmamız gerekir, Aksi takdirde bazı giden bağlantıları kaçırabilirsiniz. Bu nedenle, grep'teki \s{2}+": $ port" dizesinin arkasında "Local Address: Port" sütununun ardındaki boşluklarla eşleşmek için kullanıyorum; bu sütunun arkasında iki veya daha fazla beyaz boşluk var, burada "Eş Adres: Bağlantı Noktası" nın bir boşluğu var ve sonra yeni bir satır (grrr ... sadece yeni bir satır olmalı, IMO,\s+\s{2}+.) Normalde ss gibi filtreleme işlevlerini kullanmaya çalışabilirim ss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>. Fakat bu ipin ne kadar olabileceği konusunda bir sınır var, çok fazla dinleme portu olan bir sistemde bombalandı. Ben de aynı şeyi grep ile yapmaya çalışıyorum. Aşağıdakilerin işe yarayacağına inanıyorum:

FILTER=$(ss -tn state listening | gawk 'NR > 1 {n=split($3,A,":"); B[NR-1]=A[n]} END {for (i=1; i<length(B); i++) printf ":%s\\s{2}+|", B[i]; printf ":%s\\s{2}+", B[i]}')

ss -tn state established dst :* | grep -P -v "$FILTER"

Bunun, kullandığınız ss sürümüne bağlı olduğunu unutmayın, daha eski sürümler (örneğin: ss yardımcı programı, iproute2-ss111117) farklı bir çıktı biçimine sahiptir, bu yüzden awk olarak 4 $ yerine 3 $ kullanmanız gerekebilir. Ayrıca not edin ss -tlnve ss -tn state listeningsize biraz sezgisel olan farklı çıktılar verir. YMMV.

Ana bilgisayarın IP adresini bilmeyi gerektirmeyen biraz daha şık bir çözüm buldum, ss -tn state established dst :*iyi çalışıyor, yukarıdaki komut satırlarını değiştirdim.


Lütfen bunun nasıl çalıştığına dair bir açıklama ekler misiniz? ( Düzenle ben kısmen bunu çözdüm; yorum olarak açıklayıcı bilgiler göndermeyin cevabı.). Biraz daha fazla çalışmaya ihtiyacı olabilir gibi görünüyor. ss -tn state listeningBir FTP sunucusu çalıştıran bir ana bilgisayarda çalıştım ve doğal olarak komut, makinenin 21 numaralı bağlantı noktasını dinlediğini gösterdi. Yani bu egrep -v, IP adresi "21" ("210 dahil) dahil olmak üzere uzak ana bilgisayarları filtreleyecek anlamına gelmez. "," 211 "," 212 ", ...)? Ayrıca, asortgerçekten gerekli mi, yoksa sadece vitrin mi?
G-Man

Neredeyse her şeyi düzeltmek zorunda kaldım, düzeltilmiş senaryo yukarıda.
Dale

Sonuçta, eğer ss veya netstat bu işlevselliği içinde içerecekse çok daha iyi olurdu. Bir Do ss --outgiden bağlantıların bir listesini almak için.
Dale

Güzel, bu cevabı sevdim. Sunucumun güvenliğini arttırmaya geri döndüğümde deneyeceğim. : D
trusktr

Bunun da UDP için kullanılabileceği görülüyor, ancak elbette farklı bayraklar ve eyaletler kullanmanız gerekiyor.
Dale

4

tcpdumpBelirli ölçütlere göre filtreleme özelliğine sahip belirli bir arabirimden / biriminden akan tüm IP trafiğini görmenizi sağlar. tcpdumpgenellikle kendi dağıtımınız için kapmak için bir yerde bir port yoksa, varsayılan olarak çoğu * nix sistemlerine kuruludur.


2

netstat iyi bir seçenektir. Parametreleri gerektiği gibi kullanın. (man sayfalarına bakın).

netstat -antup

Burada tüm (a) dinleme sayısal (n) tcp (t) ve udp (u) işlemini (p) izleyebilir.

Ayrıca sskomutu deneyebilirsiniz . Referans kullanım için:

SS Linux TCP / UDP Ağ ve Soket Bilgisi


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.