Moja maszyna jest serwerem, więc chcę zignorować połączenia z moim serwerem (np. Gdy ktoś odwiedza moją stronę internetową). Chcę, aby mój serwer wysyłał tylko połączenia / żądania do innych miejsc.
Jak wyświetlić tylko te połączenia wychodzące?
EDYCJA: Jestem nowy w tego typu rzeczach. Próbuję tylko sprawdzić, czy wysyłane są cokolwiek z mojego serwera poza danymi dla moich aplikacji internetowych. Na przykład, jeśli ktoś odwiedzi moje strony, to oczywiście mój serwer wyśle dane do przeglądarki klienta. Załóżmy jednak, że gdzieś w środowisku mojej aplikacji internetowej znajduje się kod, który przesyła dane statystyczne w inne miejsce, o którym nie wiem. Chciałbym zobaczyć te miejsca, do których mój serwer wysyła dane, jeśli takie istnieją. Prawdopodobnie nie jest to prawdopodobne, ale przypuśćmy, że zdecydujesz się na użycie frp lub nodejs frameworka, którego nie napisałeś: istnieje niewielka szansa, że może wysłać gdzieś jakiś rodzaj danych. Jeśli tak, to chciałbym to zobaczyć.
źródło
netstat
w „trybie ciągłym”-c
nie działa. Zamiast tego używasz liczb, na przykładnetstat -na 1 | find "[Scan_Host_IP_Addr]"
w celu aktualizacji co1
sekundę (w tym przykładzie). ( źródło ).strace
w procesie, filtrując wyszukiwania serwerów nazw (brak szczegółów, to nie jest pełna odpowiedź na to pytanie). Alternatywnie możesz pokazać odwrotny DNS adresów IP wymienionych wnetstat
, pomijającn
opcję zawartą w mojej odpowiedzi.Jeśli chcesz tylko rejestrować każdą próbę połączenia, najłatwiej jest prawdopodobnie
iptables
LOG
celować w systemie Linux (lub w równoważnej funkcji rejestrowania zapory ogniowej w systemie).Jeśli potrzebujesz więcej informacji, takich jak czas trwania połączenia i ilość danych wymienianych w obu kierunkach, to
conntrackd
(w systemie Linux) jest prawdopodobnie najlepszą opcją.Należy jednak pamiętać, że te dwa powyżej rejestrują tylko ruch przechodzący przez netfilter, który jest generalnie całym ruchem, ale nie uwzględnia ruchu generowanego przez stosy IP w przestrzeni użytkownika (np. Maszyny wirtualne lub cokolwiek używającego surowych gniazd) lub ruchu zmostkowanego.
Aby uzyskać więcej ogólnych rozwiązań, można rzucić okiem na takie rzeczy jak
argus
,bro-ids
,sancp
lubntop
, że rejestrować wszystkie rodzaje informacji w oparciu o ich powąchać ruchu na interfejsie.źródło
Próbowałem kilka narzędzi, w tym
iftop
,ntop
,iptraf
, i oczywiście bardzo przydatne wbudowanychnetstat -tupln
(obsługiwane opcje są zależne od OS), ale najbardziej praktyczne dla mojego przypadku użycia okazało sięnethogs
- to agreguje połączenia przez pochodzącego aplikacja i jest najmniej głośna ze wszystkich.Instalowalny przez:
Uruchom jako root:
Jeśli Twoim celem jest zobaczenie wszystkich połączeń TCP inicjowanych przez dowolną aplikację, możesz użyć:
źródło
To, co myślę, że chcesz zrobić, to uzyskać listę portów nasłuchiwania, a następnie usunąć je z innych połączeń TCP, to będą wszystkie połączenia wychodzące. Komenda ss (status gniazda) wyprowadza kolumny „Adres lokalny: port” i „Adres równorzędny: port”, musimy usunąć porty nasłuchujące z kolumny „Adres lokalny: port”, a nie kolumnę „Adres równorzędny: port”, w przeciwnym razie możesz przegapić niektóre połączenia wychodzące. Aby to osiągnąć, używam
\s{2}+
za ciągiem „: $ port” w grep, aby pasował do spacji istniejących za kolumną „Adres lokalny: port”; ta kolumna ma za sobą co najmniej dwie białe spacje, gdzie „Adres równorzędny: port” ma jedną spację, a następnie nową linię (grrr ... powinien mieć tylko nową linię, IMO,\s+
\s{2}+
.) Normalnie mogę spróbować użyć funkcji filtrowania ss, jak zss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
. Ale wydaje się, że istnieje limit długości tego ciągu, który zbombardował w systemie, w którym miałem dużo portów nasłuchujących. Więc próbuję zrobić to samo z grep. Wierzę, że następujące będą działać:Uwaga: zależy to od używanej wersji ss, starsze wersje (takie jak: ss narzędzie, iproute2-ss111117) mają inny format wyjściowy, więc może być konieczne użycie 3 $ zamiast 4 $ w awk. Zauważ też
ss -tln
iss -tn state listening
daje różne wyniki, co jest dla mnie trochę sprzeczne z intuicją. YMMV.Znalazłem nieco bardziej eleganckie rozwiązanie, które nie wymaga znajomości adresu IP hosta,
ss -tn state established dst :*
działa dobrze, zmodyfikowałem powyższe wiersze poleceń.źródło
ss -tn state listening
na hoście, na którym działa serwer FTP, i oczywiście polecenie pokazało, że maszyna nasłuchuje na porcie 21. Nie oznacza to, żeegrep -v
odfiltruje wszystkie hosty zdalne, których adres IP zawiera „21” (w tym „210” ”,„ 211 ”,„ 212 ”, ...)? Ponadto, czyasort
naprawdę jest to konieczne, czy może tylko ozdabianie okien?ss --out
aby uzyskać listę połączeń wychodzących.tcpdump
pozwala zobaczyć cały ruch IP przepływający do / z określonego interfejsu z możliwością filtrowania według określonych kryteriów.tcpdump
jest zazwyczaj instalowany domyślnie w większości systemów * nix, jeśli nie, zwykle jest gdzieś port, w którym można go pobrać dla określonej dystrybucji.źródło
netstat
jest dobrą opcją Użyj wymaganych parametrów. (patrz strony podręcznika) Na przykładTutaj może monitorować wszystkie (a) nasłuchiwanie numeryczne (n) tcp (t) i udp (u) proces (p).
Możesz także spróbować wykonać
ss
polecenie. W celach informacyjnych:SS Linux TCP / UDP Informacje o sieci i gniazdach
źródło
Jeśli używasz Solaris lub pochodnej, spójrz na conntrack
źródło