14 przydatnych poleceń sieciowych w systemie Linux

Opublikowany: 2015-02-15

Konfigurowanie, monitorowanie i zabezpieczanie sieci stanowi istotną część pracy administratora systemu. Jeśli chodzi o zarządzanie sieciami Linux, dostępnych jest wiele poleceń i narzędzi.

Czasami systemy sieciowe zawodzą. Jako administrator jesteś zobowiązany do diagnozowania i rozwiązywania problemów. Monitorowanie pomaga w wykrywaniu problemów i naprawianiu ich, zanim sprawy wymkną się spod kontroli. Monitorowanie bezpieczeństwa i wydajności również stanowi istotną część działań administratora.

Tutaj omawiamy niektóre często używane polecenia do zarządzania sieciami Linux.

ip

Pakiet iproute2 zawiera polecenie IP, które służy do konfiguracji sieci i routingu. Zastępuje to tradycyjne ifconfig i route .

ip przyjmuje drugi argument, który określa obiekt, na którym chcesz wykonać polecenie i akcję, taką jak dodanie, usunięcie lub pokazanie.

łącze ip

ip link służy do konfigurowania, dodawania i usuwania interfejsów sieciowych. Użyj polecenia ip link show aby wyświetlić wszystkie interfejsy sieciowe w systemie:

 $ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 02:35:97:08:6b:2a brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff

Możesz zobaczyć stronę podręcznika dla ip link za pomocą:

 $ man ip-link

adres IP

Użyj polecenia adresu IP, aby wyświetlić adresy, powiązać nowy adres lub usunąć stare. Polecenie adresu ip strony podręcznika nosi nazwę ip-address.

Na przykład następujące polecenie pokazuje adres IP przypisany do interfejsu sieciowego enp0s8:

 ip address show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff inet 10.0.0.51/24 brd 10.0.0.255 scope global enp0s8 ...

trasa ip

Użyj trasy IP, aby wydrukować lub wyświetlić tablicę routingu. Poniższe polecenie wyświetla zawartość tablicy routingu:

 $ ip route show default via 10.0.2.2 dev enp0s3 10.0.0.0/24 dev enp0s8 proto kernel scope link src 10.0.0.51 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15

nmapa

Podczas gdy Nmap był używany w wielu filmach, The Matrix Reloaded ( Wikipedia , IMDB , Amazon ) zmienił Nmapa w gwiazdę filmową!

Nmap („Network Mapper”) to potężne narzędzie używane do wykrywania sieci, audytu bezpieczeństwa i administrowania. Wielu administratorów systemów używa go do określania, które z ich systemów są w trybie online, a także do wykrywania systemu operacyjnego i wykrywania usług.

Domyślne skanowanie Nmap pokazuje porty, ich stan (otwarty/zamknięty) i protokoły. Wysyła pakiet do 1000 najpopularniejszych portów i sprawdza odpowiedź.

 $ nmap 10.0.0.50 Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 10:32 UTC Nmap scan report for 10.0.0.50 Host is up (0.00077s latency). Not shown: 997 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp closed mysql

Aby sprawdzić, które hosty w Twojej sieci działają:

 $ nmap -sn 10.0.0.0/24 Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 11:59 UTC Nmap scan report for 10.0.0.1 Host is up (0.00084s latency). Nmap scan report for 10.0.0.50 Host is up (0.0021s latency). Nmap scan report for 10.0.0.51 Host is up (0.00026s latency). Nmap done: 256 IP addresses (3 hosts up) scanned in 2.61 seconds

Użyj flagi -O, aby zidentyfikować system operacyjny, na którym działa host.

 $ sudo nmap 10.0.0.50 -O Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 13:44 UTC Nmap scan report for 10.0.0.50 Host is up (0.00053s latency). ... Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.10 - 3.19 Network Distance: 1 hop OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.95 seconds

Słowo ostrzeżenia: nikt nie lubi skanować swoich systemów przez Internet. Więc zanim to zrobisz, poproś o pozwolenie.

Możesz także używać Nmap w systemie Windows, sprawdź ten przewodnik instalacji.

świst

Użyj polecenia ping, aby sprawdzić, czy host żyje. To bardzo proste polecenie pomaga sprawdzić stan hosta lub segmentu sieci. Polecenie ping wysyła pakiet ICMP ECHO_REQUEST do hosta docelowego i czeka na odpowiedź.

Jednak niektóre hosty blokują żądania echa ICMP za pomocą zapory. Niektóre witryny w Internecie mogą również robić to samo.

Domyślnie polecenie ping działa w nieskończonej pętli. Aby wysłać określoną liczbę pakietów, użyj -c .

 $ ping -c 3 google.com PING google.com (172.217.167.238): 56 data bytes 64 bytes from 172.217.167.238: icmp_seq=0 ttl=118 time=7.898 ms 64 bytes from 172.217.167.238: icmp_seq=1 ttl=118 time=7.960 ms 64 bytes from 172.217.167.238: icmp_seq=2 ttl=118 time=6.247 ms --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 6.247/7.368/7.960/0.793 ms

Z flagą -o polecenie ping kończy pomyślnie po otrzymaniu jednego pakietu odpowiedzi.

 $ ping -o google.com PING google.com (172.217.167.46): 56 data bytes 64 bytes from 172.217.167.46: icmp_seq=0 ttl=118 time=7.540 ms --- google.com ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 7.540/7.540/7.540/0.000 ms

Możesz użyć flagi -n , aby uniknąć wyszukiwania wstecznego DNS. Szczególnie ważny jest numer sekwencyjny ICMP. Przerwa w numerach sekwencyjnych oznacza utracone pakiety.

Przyczyną może być nieudane polecenie ping

  • awaria sieci
  • gospodarz nie żyje
  • firewall blokujący żądania ICMP ECHO

Możesz także wykonać test ping online, aby sprawdzić łączność z różnych części świata.

iPerf

Podczas gdy polecenie ping weryfikuje dostępność hosta, iPerf pomaga analizować i mierzyć wydajność sieci między dwoma hostami. Za pomocą iPerf otwierasz połączenie między dwoma hostami i wysyłasz dane. Następnie iPerf pokazuje przepustowość dostępną między dwoma hostami.

Możesz zainstalować iPerf za pomocą menedżera pakietów dystrybucyjnych. Na przykład w dystrybucjach opartych na Ubuntu możesz zainstalować w ten sposób:

 $ sudo apt install iperf -y

Po zainstalowaniu iPerf na obu komputerach uruchom serwer iPerf na jednym z nich. Poniższy przykład uruchamia serwer iPerf na hoście o adresie IP 10.0.0.51.

 $ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------

Na drugiej maszynie uruchom iPerf z opcją -c. To łączy się z serwerem i wysyła pewne dane.

 $ iperf -c 10.0.0.51 ------------------------------------------------------------ Client connecting to 10.0.0.51, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.0.0.50 port 42177 connected with 10.0.0.51 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.13 GBytes 972 Mbits/sec

iPerf zwraca wyniki przepustowości w ciągu kilku sekund.

Trasa śledzenia

Jeśli ping pokazuje brakujące pakiety, powinieneś użyć traceroute, aby zobaczyć, jaką trasą podążają pakiety. Traceroute pokazuje sekwencję bramek, przez które przechodzą pakiety, aby dotrzeć do celu. Na przykład traceroute z mojego komputera do google.com pokazuje:

 $ traceroute google.com traceroute to google.com (172.217.167.46), 64 hops max, 52 byte packets 1 dlinkrouter.dlink (192.168.0.1) 5.376 ms 2.076 ms 1.932 ms 2 10.194.0.1 (10.194.0.1) 5.190 ms 5.125 ms 4.989 ms 3 broadband.actcorp.in (49.207.47.201) 7.165 ms 5.749 ms 5.755 ms 4 broadband.actcorp.in (49.207.47.225) 5.918 ms * 8.483 ms ... 9 108.170.251.97 (108.170.251.97) 6.359 ms del03s16-in-f14.1e100.net (172.217.167.46) 5.448 ms 108.170.251.97 (108.170.251.97) 6.400 ms

Linia 4 tego wyjścia pokazuje * w czasach podróży w obie strony. Oznacza to, że nie otrzymano odpowiedzi. Może to wynikać z wielu przyczyn — ponieważ pakiety ICMP traceroute mają niski priorytet, mogą zostać odrzucone przez router. Lub może być po prostu zator. Jeśli widzisz * we wszystkich polach czasu dla danej bramy, prawdopodobnie brama jest wyłączona.

Wiele internetowych narzędzi do śledzenia tras umożliwia wykonanie odwrotnej trasy, czyli ze strony internetowej do hosta. Możesz to sprawdzić na traceroute.org lub Geekflare Traceroute.

tcpdump

tcpdump to narzędzie do wąchania pakietów, które może być bardzo pomocne przy rozwiązywaniu problemów z siecią. Nasłuchuje ruchu sieciowego i drukuje informacje o pakietach na podstawie zdefiniowanych kryteriów.

Na przykład możesz sprawdzić wszystkie pakiety wysłane do lub z określonego hosta, Ubuntu18 w tym przykładzie:

 $ sudo tcpdump host ubuntu18 -n -c 5 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:12:11.509092 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 2991049004:2991049112, ack 2956233368, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 108 14:12:11.509146 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 108:252, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 144 14:12:11.509218 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 252:288, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 36 14:12:11.509259 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 288:500, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 212 14:12:11.509331 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 500:768, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 268 5 packets captured 6 packets received by filter 0 packets dropped by kernel

Domyślnie tcpdump tłumaczy adresy IP na nazwy hostów. Użyj -n , jeśli nie chcesz, aby tcpdump wyszukiwał nazwy.

Wyjście tcpdump drukuje jedną linię dla każdego pakietu. Użyj flagi -c , aby ograniczyć wyjście, 5 w powyższym przykładzie.

tcpdump jest przydatny do rozwiązywania problemów z siecią, a także identyfikowania potencjalnych problemów. Dobrym pomysłem jest od czasu do czasu uruchomienie tcpdump w sieci, aby sprawdzić, czy wszystko jest w porządku.

statystyka sieci

Polecenie Netstat służy do sprawdzania połączeń sieciowych, tablic routingu oraz różnych ustawień i statystyk sieciowych.

Użyj flagi -i , aby wyświetlić listę interfejsów sieciowych w systemie.

Oto przykład:

 $ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 4001 0 0 0 2283 0 0 0 BMRU eth1 1500 0 27154 0 0 0 838962 0 0 0 BMRU lo 65536 0 0 0 0 0 0 0 0 0 LRU

Użycie flagi -r spowoduje wyświetlenie tablicy routingu. Pokazuje ścieżkę skonfigurowaną do wysyłania pakietów sieciowych.

 $ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 * 255.255.255.0 U 0 0 0 eth1 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0

Gwiazdka w dwóch ostatnich wierszach wskazuje, że do wysyłania pakietów do dowolnego hosta w tych sieciach nie jest wymagana żadna brama. Ten host jest bezpośrednio podłączony do sieci 10.0.0.0 i 10.0.2.0.

W pierwszym wierszu adres docelowy jest domyślny, co oznacza, że ​​każdy pakiet przeznaczony dla sieci niewymienionej w tej tabeli jest obsługiwany przez router 10.0.2,2.

Komenda netstat bez żadnych opcji wyświetla listę otwartych gniazd. Użyj flagi -l , aby pokazać tylko gniazda nasłuchujące, które domyślnie nie są pokazywane. Możesz użyć flagi -a, aby pokazać gniazda nasłuchujące i nienasłuchujące. Oto przykład:

 $ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 36 10.0.2.15:ssh 10.0.2.2:51017 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] DGRAM 8186 /run/systemd/notify ...

Więcej przykładów polecenia Netstat tutaj

SS

Instalacje Linuksa mają domyślnie uruchomionych wiele usług. Powinny one zostać wyłączone lub najlepiej usunięte, ponieważ pomaga to zmniejszyć powierzchnię ataku. Możesz zobaczyć, jakie usługi są uruchomione za pomocą polecenia netstat. Podczas gdy netstat jest nadal dostępny, większość dystrybucji Linuksa przechodzi na polecenie ss .

użyj polecenia ss z flagami -t i -a , aby wyświetlić listę wszystkich gniazd TCP. Spowoduje to wyświetlenie zarówno gniazd nasłuchujących, jak i nienasłuchujących.

 $ ss -t -a State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:sunrpc *:* LISTEN 0 128 *:http *:* LISTEN 0 128 *:ssh *:* LISTEN 0 128 *:60031 *:* ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51699 ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51049 LISTEN 0 128 :::sunrpc :::* LISTEN 0 128 :::http :::* LISTEN 0 128 :::ssh :::* LISTEN 0 128 :::54715 :::*

Aby wyświetlić tylko połączenia TCP z ustalonym stanem:

 ss -a -t -o state established Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 10.0.2.15:ssh 10.0.2.2:51699 timer:(keepalive,23min,0) 0 0 10.0.2.15:ssh 10.0.2.2:51049 timer:(keepalive,114min,0)

ssh

ssh umożliwia bezpieczne łączenie się ze zdalnymi hostami przez Internet. Wcześniej do łączenia się ze zdalnymi hostami i administrowania nimi były używane rlogin i telnet. Jednak oba mają podstawową wadę, to znaczy przesyłają wszystkie informacje, w tym nazwy logowania i hasła, w postaci zwykłego tekstu.

ssh umożliwia bezpieczną komunikację przez Internet dzięki dwóm następującym funkcjom:

  • Potwierdza, że ​​zdalny host jest tym, za kogo się podaje.
  • Szyfruje całą komunikację między hostami.

Aby połączyć się ze zdalnym hostem, musisz mieć serwer OpenSSH działający na zdalnym hoście. Możesz go zainstalować za pomocą menedżera pakietów dystrybucyjnych. Na przykład w systemie Ubuntu możesz zainstalować go w ten sposób:

 $ sudo apt install openssh-server

Oto przykład pokazujący, jak możesz połączyć się ze zdalnym hostem 10.0.0.50 za pomocą polecenia ssh:

 me@ubuntu-xenial:~$ ssh 10.0.0.50 The authenticity of host '10.0.0.50 (10.0.0.50)' can't be established. ECDSA key fingerprint is SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/+PMpnY. Are you sure you want to continue connecting (yes/no)? yes

Otrzymujesz komunikat, że nie można ustalić autentyczności hosta 10.0.0.50, ponieważ jest to pierwsze połączenie z serwerem 10.0.0.50, a klient ssh nigdy wcześniej nie widział tego zdalnego hosta. Wpisz tak, aby kontynuować łączenie. Po nawiązaniu połączenia zostaniesz poproszony o podanie hasła:

 Warning: Permanently added '10.0.0.50' (ECDSA) to the list of known hosts. [email protected]'s password:

Po wprowadzeniu poprawnego hasła nastąpi zalogowanie do zdalnego hosta.

 Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64) * Documentation: https://help.ubuntu.com/ .. me@vagrant-ubuntu-trusty-64:~$

Możesz opuścić tę zdalną powłokę za pomocą polecenia wyjścia.

Ponadto możesz łatwo wykonać pojedyncze polecenie na zdalnym hoście za pomocą ssh. Na przykład, aby uruchomić df -h na zdalnym hoście:

 $ ssh 10.0.0.50 df -h [email protected]'s password: Filesystem Size Used Avail Use% Mounted on udev 241M 12K 241M 1% /dev tmpfs 49M 384K 49M 1% /run /dev/sda1 40G 1.6G 37G 5% / ... none 224G 113G 111G 51% /vagrant me@ubuntu-xenial:~$

scp i sftp

scp (bezpieczne kopiowanie) jest bardzo podobne do polecenia cp do kopiowania plików, z dodatkiem – możesz dołączyć zdalne nazwy hostów w nazwach ścieżek źródłowych lub docelowych. Nazwa hosta i ścieżka do katalogu są oddzielone dwukropkiem. Umożliwia to bezpieczne kopiowanie plików przez sieć w postaci zaszyfrowanej. Następujące polecenie kopiuje plik .txt z komputera lokalnego do 10.0.0.50:

 me@ubuntu-xenial:~$ scp a.txt 10.0.0.50:/home/me [email protected]'s password: a.txt 100% 0 0.0KB/s 00:00

sftp (bezpieczny ftp) to także program do kopiowania plików podobny do ftp . Jednak używa szyfrowanego tunelu SSH do kopiowania plików, zamiast wysyłania wszystkiego w postaci zwykłego tekstu. Ponadto nie potrzebujesz serwera FTP działającego na zdalnym hoście. Potrzebujesz tylko serwera ssh. Oto przykładowa sesja:

 me@ubuntu-xenial:~$ sftp 10.0.0.50 [email protected]'s password: Connected to 10.0.0.50. sftp> put kali-linux-2020.3-installer-netinst-i386.iso Uploading kali-linux-2020.3-installer-netinst-i386.iso to /home/me/kali-linux-2020.3-installer-netinst-i386.iso kali-linux-2020.3-installer-netinst-i386.iso 100% 435MB 27.2MB/s 00:16 sftp> bye

Ifconfig

Najczęściej używamy polecenia ifconfig do sprawdzenia adresu IP przypisanego do systemu.

 [root@lab ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 209.97.137.171 netmask 255.255.240.0 broadcast 209.97.143.255 inet6 fe80::c035:b2ff:fe9d:72d5 prefixlen 64 scopeid 0x20<link> ether c2:35:b2:9d:72:d5 txqueuelen 1000 (Ethernet) RX packets 1333200 bytes 167143230 (159.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 979666 bytes 93582595 (89.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 16 bytes 1392 (1.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16 bytes 1392 (1.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@lab ~]#

kopać

dig (Domain Information Groper) to elastyczne narzędzie do przesłuchiwania serwerów nazw DNS.

Wykonuje wyszukiwanie DNS i wyświetla odpowiedzi, które są zwracane z serwerów nazw.

 [root@lab ~]# dig geekflare.com ; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12310 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 30 IN A 104.27.119.115 geekflare.com. 30 IN A 104.27.118.115 ;; Query time: 12 msec ;; SERVER: 67.207.67.2#53(67.207.67.2) ;; WHEN: Wed Sep 16 17:58:45 UTC 2020 ;; MSG SIZE rcvd: 74 [root@lab ~]#

telnet

telnet połącz hosta i port miejsca docelowego za pośrednictwem protokołu telnet, jeśli połączenie zostanie ustanowione, oznacza to, że łączność między dwoma hostami działa prawidłowo.

 [root@lab ~]# telnet gf.dev 443 Trying 104.27.153.44... Connected to gf.dev. Escape character is '^]'.

nslookup

nslookup to program do wysyłania zapytań do serwerów nazw domen i rozpoznawania adresów IP.

 [root@lab ~]# nslookup relicflare.com Server: 67.207.67.2 Address: 67.207.67.2#53 Non-authoritative answer: Name: relicflare.com Address: 192.64.119.178 [root@lab ~]#

Streszczenie

Sieci w Linuksie to rozległy temat, z dużą liczbą poleceń i narzędzi. W tym artykule omówiliśmy niektóre często używane polecenia, które, miejmy nadzieję, pomogą ci w zarządzaniu i zabezpieczaniu sieci.