Tips en Trucs 2018

Netwerkverkeer opsporen

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
iftop

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.

iftop Help

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.

iftop doelpoorten

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.

iftop Firefox

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.

iftop Screen filter

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).

iftop VLC

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.

iftop 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.

Welk proces veroorzaakt het netwerkverkeer?

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))

Afgeschreven netwerkopdrachten

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.