Szukałem tego dość szeroko, ale nie wydaje mi się, aby wymyślić działający przykład.
Moim celem jest monitorowanie ruchu TCP na określonym porcie, aby zobaczyć połączenia przychodzące i zapisać je w pliku tekstowym. Najważniejsze jest to, że potrzebuję także znacznika czasu w każdym wierszu, aby pokazać dokładnie, kiedy klient podłączył się do drugiego.
Wyczerpałem już funkcje netstat, nmap i tcptrack, ale żaden nie obsługuje sygnatury czasowej.
Myślałem, że skrypt powłoki Linuksa może działać, gdybym monitorował określony port lokalny i zapisywał tekst w pliku, gdy nawiązane jest połączenie, a następnie po prostu konkatenował datę w każdym wierszu.
Bawiłem się tym:
netstat -ano|grep 443|grep ESTABLISHED
tak dobrze jak to:
tcptrack -i eth0 port 443
ale żadne z nich nie odpowiada moim potrzebom, ponieważ potrzebuję czasu na połączenie.
Jeśli masz jakieś sugestie lub możesz skierować mnie w dobrym kierunku, byłbym bardzo wdzięczny.
Dzięki. :)
Odpowiedzi:
edytuj : Wciąż otrzymuję przychylne głosy za te lata później. Proszę, nie wybieraj tej odpowiedzi, moim zdaniem odpowiedź wykorzystująca
iptables
tutaj jest o wiele lepsza.lub tylko
tcp-syn
, lub tylkotcp-ack
(przypuszczam, że byłby to jeden), w zależności od tego, czego potrzebujesz.źródło
-n
po tcpdump (man tcpdump: -n Nie konwertuj adresów (tj. Adresów hostów, numerów portów itp.) Na nazwy ) .Możesz w tym celu skorzystać z obsługi iptables w jądrze Linuksa. Plusem jest to, że nie wymaga żadnego dodatkowego oprogramowania, aby być umiarkowanie użytecznym. Minusem jest to, że wymaga skonfigurowania uprawnień roota (ale biorąc pod uwagę, że mówisz o porcie 443, który jest portem uprzywilejowanym, prawdopodobnie potrzebujesz uprawnień roota w przypadku większości rozwiązań).
Dodaj regułę iptables z czymś takim jak:
(Dostosuj
-I INPUT
część do własnych upodobań).Po uruchomieniu reguły jądro emituje wpis syslog. Na przykład w przypadku reguły wprowadzania wpis dziennika może wyglądać mniej więcej tak:
Następnie możesz użyć dowolnego narzędzia do monitorowania dzienników, aby zrobić coś użytecznego z tymi informacjami. Jeśli twoja implementacja syslog to obsługuje, możesz nawet skierować je do osobnego pliku dziennika, skutecznie spełniając wymóg zapisania danych połączenia do pliku oznaczonego czasem w sekundach bez dodatkowego oprogramowania.
Zauważ, że
LOG
cel jest celem nie kończącym się, co oznacza, że wszelkie reguły następujące po nim będą nadal oceniane, a pakiet nie zostanie odrzucony ani zaakceptowany przez samą regułę LOG. To sprawia, żeLOG
cel jest przydatny również do debugowania reguł zapory.Aby uniknąć zalania dziennika, rozważ użycie
limit
modułu w połączeniu z tym. Szczegółowe informacje można znaleźć na stronie podręcznika użytkownika iptables (8).źródło
Rozdzielczość mikro sekund
Domyślnie narzędzie tcpdump zgłasza czas z dokładnością do mikro sekundy. Na przykład:
wyświetli dane wyjściowe podobne do następujących:
Zobacz tcpdump (8), aby uzyskać pełną listę opcji tcpdump, a pcap-filter (7), aby uzyskać pełną składnię filtrów, których możesz użyć.
źródło
443 to zaszyfrowany ruch - tak trudno jest uzyskać ruch w tym porcie:
możesz to zrobić
mniam zainstaluj ngrep lub apt-get install ngrep
następnie uruchomić
źródło
Może to wymagać również monitorowania przychodzących i wychodzących pakietów z innych komputerów.
(opcja
-i
wspominania o sieci, opcja-c
drukowania pakietów w konsoli)źródło
Możesz użyć tcpdump lub Wireshark.
źródło
Jeśli potrzebujesz stałego rozwiązania, które zawsze będzie monitorować ruch na interesujących portach, sugeruję użycie QoS (polecenie tc w Linuksie). tc jest nieco tajemniczy i nieudokumentowany, więc używam FireQoS do konfiguracji QoS i netdata do monitorowania w czasie rzeczywistym.
Sprawdź to, aby uzyskać więcej informacji: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers
źródło