Onlangs zag ik op de router het lampje van het netwerkverkeer tekeer gaan als zot. Op zoek naar de oorzaak.
Met top opdrachten kan je nagaan welke processen (programma's) hoeveel bronnen nodig hebben. Ideaal dus om grootverbruikers op te sporen. Top opdrachten bestaan voor allerlei testen: processorbelasting, harde schijf gebruik, netwerkbelasting, enz. In ons geval hebben we iftop nodig om de netwerkbelasting van de draaiende processen weer te geven. We beginnen met de installatie van iftop:
dany@pindabook:~> sudo zypper install iftop
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
Het volgende NIEUWE pakket zal worden geïnstalleerd:
iftop
1 nieuw te installeren pakket.
Totale downloadgrootte: 51,8 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 95,2 KiB worden gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j):
pakket iftop-0.99.4-lp150.1.5.x86_64 wordt opgehaald (1/1), 51,8 KiB ( 95,2 KiB uitgepakt)
Ophalen: iftop-0.99.4-lp150.1.5.x86_64.rpm ...............................................................[gereed]
Controleren op conflicten tussen bestanden: ..............................................................[gereed]
(1/1) Installeren van: iftop-0.99.4-lp150.1.5.x86_64 .....................................................[gereed]
Bij het scannen van een openSUSE Leap 15.0 systeem in rust, zien we toch netwerkactiviteit. De volgende opdracht toont het netwerkverkeer via de eth0 netwerkverbinding:
dany@pindabook:~> sudo iftop -i eth0
[sudo] wachtwoord voor root:
interface: eth0
IP address is: 192.168.1.8
IPv6 address is: 2a02:a03f:5cb5:7700:f5d7:70b7:1a4b:91ac
MAC address is: 00:50:b6:6b:4f:28
De tabel toont in de eerste twee kolommen welke apparaten met elkaar communiceren, waarbij de pijlen de richting van de communicatie aanduiden. De drie laatste kolommen geven de gemiddelde gebruikte bandbreedte van respectievelijk de laatste 2, 10 en 40 seconden. Onderaan worden een aantal statistieken weergegeven van het verzonden (TX) en ontvangen (RX) netwerkverkeer. Ook hier geven de laatste drie kolommen de gemiddelden van de laatste 2, 10 en 40 seconden weer. Met deze informatie kom je echter niet te weten welk proces netwerkverkeer gebruikt. Typ een vraagteken om de hieronder afgebeelde help pagina weer te geven.
Zo komen we te weten dat de sneltoets D (hoofdletter D) de doelpoorten zal weergeven. Door nogmaals ? te drukken, sluit je help pagina. Na het drukken van D komen we al iets meer te weten.
Door het inschakelen van de doelpoorten wordt duidelijk dat het netwerkverkeer met als doelpoort ntp (Network Time Protocol) gebruikt wordt om de tijd op te vragen. Het netwerkverkeer naar dsldevice.lan (mijn router) vraagt naar het IP adres van een benoemde computer (domain: Domain Name Server). Het netwerkverkeer naar main.lan via de onbenoemde poort 37552 is naar een computer in het LAN netwerk, dus niet naar het boze internet en is waarschijnlijk opgezet door de main.lan computer. Om meer informatie over dit netwerkverkeer te krijgen, kan je de bronpoorten activeren. Een overzicht van netwerkpoorten kan je opvragen met de opdracht:
dany@pindabook:~> more /etc/services
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
#
# This list could be found on:
# http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.x
ml
#
# See also: services(5)
#
#
# SERVICE NAME AND TRANSPORT PROTOCOL PORT NUMBER REGISTRY
#
# (last updated on 2017-03-03)
#
#
# Service names and port numbers are used to distinguish between different
# services that run over transport protocols such as TCP, UDP, DCCP, and
# SCTP.
#
# Service names are assigned on a first-come, first-served process, as
# documented in [RFC6335].
Of doorzoeken met:
dany@pindabook:~> grep domain /etc/services domain 53/tcp # Domain Name Server [Paul_Mockapetris] domain 53/udp # Domain Name Server [Paul_Mockapetris] login 513/tcp # remote login a la telnet; automatic authentication performed based on priviledged port numbers and distributed data bases which identify "authentication domains" domain-s 853/tcp # DNS query-response protocol run over TLS/DTLS (updated 2017-01-23) [IESG] [IETF_Chair] [RFC7858] [RFC8094] domain-s 853/udp # DNS query-response protocol run over TLS/DTLS (updated 2017-01-23) [IESG] [IETF_Chair] [RFC7858] [RFC8094] domaintime 9909/tcp # domaintime [Jeffry_Dwight] domaintime 9909/udp # domaintime [Jeffry_Dwight]
Daarna kan je op internet meer informatie opzoeken over een bepaalde dienst (service). Bij het werken met een browser (hier Firefox) lijkt iftop op hol te slaan.
Bij het surfen, zelfs bij het raadplegen van één enkele pagina, worden verschillende computers op het internet gevraagd informatie op te sturen. Bij zo'n druk netwerkverkeer is het handig dat je informatie die je niet interesseert kunt verbergen (filteren). Dit kan door te drukken op de l-toets (set screen filter). Daarna typ je de zoekterm waarop je wilt filteren. Na het bevestigen van de zoekterm, wordt enkel het netwerkverkeer dat de zoekterm bevat weergegeven. In onderstaande voorbeeld :ntp, wat enkel iets oplevert als de doelpoorten worden weergegeven.
Het filteren schakel je uit door de zoekterm na het drukken van l te wissen. In ons vorig voorbeeld, werd contact opgenomen met veel internet webservers, maar viel de netwerkbelasting mee. In het volgende voorbeeld wordt met VLC geluisterd naar internetradio (audio stream).
De witte balk toont dat bij het luisteren naar internetradio veel data wordt ontvangen. Hoe langer de balk hoe meer data wordt ontvangen. Bovenaan staat een schaal met de netwerkbelasting in cijfers. In het voorbeeld heeft het luisteren naar internetradio een bandbreedte van ongeveer 130Kb nodig. Het volgende voorbeeld toont de netwerkbelasting bij het downloaden van de installatie DVD van openSUSE Leap 15.0 via torrent.
Ten eerste merk je dat torrents data van verschillende bronnen van het internet halen. En het netwerk zwaarder wordt belast. In de schaal bovenaan het scherm, lezen we af dat de bovenste torrent server een bandbreedte van ongeveer 12Mb gebruikt. De gemiddelde totale download netwerkbandbreedte bedraagt zelfs 70Mb (b voor bits), de tot nu reeds ontvangen data 107MB (B voor bytes). Bij het gebruik van torrent ontvang je niet alleen data, maar verdeel je de reeds ontvangen data opnieuw, wat na een tijd zorgt voor meer en meer verzonden bandbreedte.
Nu we weten welke poorten veel netwerkverkeer gebruiken, wordt het tijd na te gaan welke processen (programma's) daarvoor verantwoordelijk zijn. Daarvoor gebruik ik de opdracht ss (socket statistics)(onderdeel van iproute2). Met de volgende opdracht wordt het TCP en UDP netwerkverkeer weergegeven. De laatste kolom bevat daarbij het proces dat verantwoordelijk is voor dit netwerkverkeer.
dany@pindabook:~> sudo ss --tcp --udp -p
[sudo] wachtwoord voor root:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.8:45260 82.192.95.134:http users:(("vlc",pid=3151,fd=20))
tcp ESTAB 0 0 192.168.1.8:ssh 192.168.1.46:32818 users:(("sshd",pid=2648,fd=3),("sshd",pid=2646,fd=3))
Bovenstaande opdracht werd uit tijdens het met VLC luisteren naar internetradio, duidelijk zichtbaar in de tabel. De tweede netwerkstroom wordt veroorzaakt door een SSH verbinding tussen mijn notebook en vaste computer. Onderstaande opdracht wordt uitgevoerd tijdens het via torrent downloaden van de installatie DVD van openSUSE Leap 15.0.
dany@pindabook:~> sudo ss --tcp --udp -p
[sudo] wachtwoord voor root:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.8:49196 89.133.160.94:63641 users:(("ktorrent",pid=3483,fd=68))
tcp SYN-SENT 0 1 192.168.1.8:46548 194.95.64.250:6881 users:(("ktorrent",pid=3483,fd=88))
tcp SYN-SENT 0 1 192.168.1.8:56766 46.53.195.246:bctp users:(("ktorrent",pid=3483,fd=91))
tcp SYN-SENT 0 1 192.168.1.8:45418 194.44.15.182:62806 users:(("ktorrent",pid=3483,fd=83))
tcp ESTAB 0 0 192.168.1.8:35520 5.39.80.148:51413 users:(("ktorrent",pid=3483,fd=34))
tcp ESTAB 0 0 192.168.1.8:42676 195.154.227.107:42634 users:(("ktorrent",pid=3483,fd=89))
tcp ESTAB 0 0 192.168.1.8:60708 79.249.240.129:41389 users:(("ktorrent",pid=3483,fd=60))
tcp ESTAB 0 9 192.168.1.8:41476 130.0.216.216:23788 users:(("ktorrent",pid=3483,fd=76))
tcp SYN-SENT 0 1 192.168.1.8:50982 95.90.198.39:6881 users:(("ktorrent",pid=3483,fd=92))
tcp ESTAB 0 0 192.168.1.8:36014 83.92.125.102:23547 users:(("ktorrent",pid=3483,fd=63))
tcp ESTAB 0 0 192.168.1.8:33916 88.198.44.123:6918 users:(("ktorrent",pid=3483,fd=67))
tcp ESTAB 0 0 192.168.1.8:53634 109.247.235.166:14941 users:(("ktorrent",pid=3483,fd=58))
tcp ESTAB 0 9 192.168.1.8:41842 190.137.45.217:49160 users:(("ktorrent",pid=3483,fd=81))
tcp ESTAB 0 27 192.168.1.8:45312 114.84.37.212:65090 users:(("ktorrent",pid=3483,fd=49))
tcp ESTAB 0 27 192.168.1.8:39474 188.100.30.158:51413 users:(("ktorrent",pid=3483,fd=84))
tcp ESTAB 0 0 192.168.1.8:44962 91.202.253.198:61730 users:(("ktorrent",pid=3483,fd=39))
tcp SYN-SENT 0 1 192.168.1.8:52782 93.182.116.91:6881 users:(("ktorrent",pid=3483,fd=59))
tcp ESTAB 0 0 192.168.1.8:44964 38.101.139.57:52978 users:(("ktorrent",pid=3483,fd=43))
tcp ESTAB 0 0 192.168.1.8:40384 89.102.0.150:49164 users:(("ktorrent",pid=3483,fd=66))
tcp SYN-SENT 0 1 192.168.1.8:43592 109.128.145.150:6881 users:(("ktorrent",pid=3483,fd=48))
tcp ESTAB 0 0 192.168.1.8:51484 51.15.10.149:45000 users:(("ktorrent",pid=3483,fd=50))
tcp ESTAB 0 0 192.168.1.8:39146 85.17.29.115:61037 users:(("ktorrent",pid=3483,fd=65))
tcp ESTAB 0 0 192.168.1.8:57276 213.168.178.121:6881 users:(("ktorrent",pid=3483,fd=41))
tcp SYN-SENT 0 1 192.168.1.8:43610 109.128.145.150:6881 users:(("ktorrent",pid=3483,fd=74))
tcp SYN-SENT 0 1 192.168.1.8:35708 216.118.135.155:6881 users:(("ktorrent",pid=3483,fd=44))
tcp ESTAB 0 9 192.168.1.8:48880 153.121.48.76:6881 users:(("ktorrent",pid=3483,fd=79))
tcp SYN-SENT 0 1 192.168.1.8:48728 77.139.74.218:16762 users:(("ktorrent",pid=3483,fd=51))
tcp ESTAB 0 0 192.168.1.8:37412 37.187.109.201:51237 users:(("ktorrent",pid=3483,fd=42))
tcp ESTAB 0 0 192.168.1.8:44926 87.72.245.228:16881 users:(("ktorrent",pid=3483,fd=55))
tcp ESTAB 0 0 192.168.1.8:58582 99.145.32.229:50000 users:(("ktorrent",pid=3483,fd=52))
tcp ESTAB 0 9 192.168.1.8:46096 70.114.162.198:35808 users:(("ktorrent",pid=3483,fd=36))
tcp ESTAB 0 0 192.168.1.8:36490 193.169.220.24:51413 users:(("ktorrent",pid=3483,fd=33))
tcp ESTAB 0 0 192.168.1.8:43756 83.233.72.203:58256 users:(("ktorrent",pid=3483,fd=61))
tcp ESTAB 0 0 192.168.1.8:41756 188.193.244.37:50022 users:(("ktorrent",pid=3483,fd=80))
tcp ESTAB 0 306 192.168.1.8:52812 185.86.126.150:20930 users:(("ktorrent",pid=3483,fd=82))
tcp SYN-SENT 0 1 192.168.1.8:56730 46.53.195.246:bctp users:(("ktorrent",pid=3483,fd=37))
tcp SYN-SENT 0 1 192.168.1.8:40322 212.3.149.242:53923 users:(("ktorrent",pid=3483,fd=90))
tcp SYN-SENT 0 1 192.168.1.8:50926 95.90.198.39:6881 users:(("ktorrent",pid=3483,fd=70))
tcp SYN-SENT 0 1 192.168.1.8:42366 2.138.206.225:49444 users:(("ktorrent",pid=3483,fd=77))
tcp ESTAB 0 9 192.168.1.8:37390 209.141.47.111:51413 users:(("ktorrent",pid=3483,fd=72))
tcp ESTAB 0 0 192.168.1.8:35182 77.138.101.5:11030 users:(("ktorrent",pid=3483,fd=57))
tcp ESTAB 0 126 192.168.1.8:44226 73.211.17.246:31911 users:(("ktorrent",pid=3483,fd=56))
tcp SYN-SENT 0 1 192.168.1.8:52798 93.182.116.91:6881 users:(("ktorrent",pid=3483,fd=62))
tcp ESTAB 0 0 192.168.1.8:ssh 192.168.1.46:32818 users:(("sshd",pid=2648,fd=3),("sshd",pid=2646,fd=3))
tcp SYN-SENT 0 1 192.168.1.8:52742 93.182.116.91:6881 users:(("ktorrent",pid=3483,fd=69))
tcp SYN-SENT 0 1 192.168.1.8:52762 93.182.116.91:6881 users:(("ktorrent",pid=3483,fd=46))
tcp ESTAB 0 0 192.168.1.8:41448 193.200.241.133:51413 users:(("ktorrent",pid=3483,fd=87))
tcp SYN-SENT 0 1 192.168.1.8:54260 188.123.241.193:bctp users:(("ktorrent",pid=3483,fd=85))
tcp ESTAB 0 43 192.168.1.8:50066 156.34.29.148:60706 users:(("ktorrent",pid=3483,fd=45))
tcp SYN-SENT 0 1 192.168.1.8:56748 46.53.195.246:bctp users:(("ktorrent",pid=3483,fd=47))
tcp ESTAB 0 51 192.168.1.8:55046 90.71.112.168:50000 users:(("ktorrent",pid=3483,fd=38))
tcp ESTAB 0 0 192.168.1.8:36668 92.100.130.18:55510 users:(("ktorrent",pid=3483,fd=40))
tcp SYN-SENT 0 1 192.168.1.8:46422 182.70.7.222:39602 users:(("ktorrent",pid=3483,fd=78))
tcp ESTAB 0 1275 192.168.1.8:39054 80.252.154.77:36589 users:(("ktorrent",pid=3483,fd=64))
tcp SYN-SENT 0 1 192.168.1.8:38018 193.107.134.200:63759 users:(("ktorrent",pid=3483,fd=86))
tcp SYN-SENT 0 1 192.168.1.8:43572 109.128.145.150:6881 users:(("ktorrent",pid=3483,fd=71))
tcp ESTAB 0 27 192.168.1.8:60002 121.99.132.240:51413 users:(("ktorrent",pid=3483,fd=73))
tcp ESTAB 0 9 192.168.1.8:37686 176.210.225.16:47797 users:(("ktorrent",pid=3483,fd=75))
Om deze informatie te filteren geven we deze door aan de grep opdracht. De volgende opdracht toont enkel de regel waarin SSH netwerkverkeer (poort :ssh) voorkomt:
dany@pindabook:~> sudo ss --tcp --udp -p | grep ':ssh'
tcp ESTAB 0 0 192.168.1.8:ssh 192.168.1.46:32818 users:(("sshd",pid=2648,fd=3),("sshd",pid=2646,fd=3))
Hoewel veel netwerkopdrachten afgeschreven en verouderd zijn (word niet meer aan gewerkt), zie je ze nog in veel tutorials opduiken. Wie met zijn tijd wil meegaan kan terecht op de webpagina Deprecated Linux networking commands and their replacements waar je voor verouderde opdrachten de vervangende moderne opdrachten vindt.