14 полезных сетевых команд Linux

Опубликовано: 2015-02-15

Настройка, мониторинг и защита сетей являются неотъемлемой частью работы системного администратора. Когда дело доходит до управления сетями Linux, доступно множество команд и утилит.

Иногда сетевые системы выходят из строя. Вы как администратор обязаны диагностировать и решать проблемы. Мониторинг помогает обнаруживать проблемы и устранять их до того, как ситуация выйдет из-под контроля. Мониторинг безопасности и производительности также является важной частью деятельности администратора.

Здесь мы обсудим некоторые часто используемые команды для управления сетями Linux.

IP

Пакет iproute2 включает команду IP, которая используется для настройки сети и маршрутизации. Это заменяет традиционные команды ifconfig и route .

ip принимает второй аргумент, указывающий объект, над которым вы хотите выполнить команду, и действие, например добавить, удалить или показать.

IP-ссылка

ip link предназначен для настройки, добавления и удаления сетевых интерфейсов. Используйте команду ip link show для отображения всех сетевых интерфейсов в системе:

 $ 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

Вы можете увидеть справочную страницу для ip link :

 $ man ip-link

айпи адрес

Используйте команду ip address для отображения адресов, привязки новых адресов или удаления старых. Команда ip address на странице руководства называется ip-address.

Например, следующая команда показывает IP-адрес, назначенный сетевому интерфейсу 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 ...

IP-маршрут

Используйте IP-маршрут для печати или отображения таблицы маршрутизации. Следующая команда отображает содержимое таблицы маршрутизации:

 $ 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

nmap

В то время как Nmap использовался во многих фильмах, The Matrix Reloaded ( Wikipedia , IMDB , Amazon ) превратил Nmap в кинозвезду!.

Nmap («Network Mapper») — мощная утилита, используемая для обнаружения сети, аудита безопасности и администрирования. Многие системные администраторы используют его, чтобы определить, какие из их систем подключены к сети, а также для обнаружения ОС и обнаружения служб.

Сканирование Nmap по умолчанию показывает порты, их состояние (открыто/закрыто) и протоколы. Он отправляет пакет на 1000 наиболее распространенных портов и проверяет ответ.

 $ 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

Чтобы проверить, какие хосты в вашей сети работают:

 $ 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

Используйте флаг -O, чтобы определить, какая операционная система работает на хосте.

 $ 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

Предостережение: никому не нравится, когда их системы сканируются через Интернет. Поэтому, прежде чем сделать это, спросите разрешения.

Вы также можете использовать Nmap в Windows, ознакомьтесь с этим руководством по установке.

пинг

Используйте ping, чтобы узнать, жив ли хост. Эта сверхпростая команда поможет вам проверить состояние хоста или сегмента сети. Команда Ping отправляет пакет ICMP ECHO_REQUEST целевому хосту и ожидает ответа.

Однако некоторые хосты блокируют эхо-запросы ICMP с помощью брандмауэра. Некоторые сайты в Интернете также могут делать то же самое.

По умолчанию ping выполняется в бесконечном цикле. Чтобы отправить определенное количество пакетов, используйте флаг -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

С флагом -o ping успешно завершается после получения одного ответного пакета.

 $ 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

Вы можете использовать флаг -n , чтобы избежать обратного поиска DNS. Порядковый номер ICMP особенно важен. Разрыв в порядковых номерах указывает на потерянные пакеты.

Неудачный пинг может быть вызван

  • ошибка сети
  • хозяин не жив
  • брандмауэр блокирует запросы ICMP ECHO

Вы также можете выполнить онлайн-тест ping, чтобы проверить подключение из разных частей мира.

iPerf

В то время как ping проверяет доступность хоста, iPerf помогает анализировать и измерять производительность сети между двумя хостами. С iPerf вы открываете соединение между двумя хостами и отправляете некоторые данные. Затем iPerf показывает пропускную способность, доступную между двумя хостами.

Вы можете установить iPerf с помощью менеджера пакетов дистрибутива. Например, в дистрибутивах на основе Ubuntu вы можете установить так:

 $ sudo apt install iperf -y

После того, как вы установили iPerf на обе машины, запустите сервер iPerf на одной из них. В следующем примере сервер iPerf запускается на хосте с IP-адресом 10.0.0.51.

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

На второй машине запустите iPerf с флагом -c. Это соединяется с сервером и отправляет некоторые данные.

 $ 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 возвращает данные о пропускной способности через несколько секунд.

трассировка

Если ping показывает отсутствующие пакеты, вы должны использовать traceroute, чтобы узнать, по какому маршруту идут пакеты. Traceroute показывает последовательность шлюзов, через которые проходят пакеты, чтобы достичь места назначения. Например, traceroute от моей машины до google.com показывает следующее:

 $ 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

Строка 4 в этом выводе показывает * во времени прохождения туда и обратно. Это означает, что ответ не был получен. Это может быть вызвано многими причинами — поскольку пакеты ICMP traceroute имеют низкий приоритет, они могут быть отброшены маршрутизатором. Или может быть просто затор. Если вы видите * во всех полях времени для данного шлюза, возможно, шлюз не работает.

Многие веб-инструменты отслеживания маршрутов позволяют выполнять обратную трассировку, то есть от веб-сайта до вашего хоста. Вы можете проверить их на traceroute.org или Geekflare Traceroute.

tcpdump

tcpdump — это инструмент для перехвата пакетов, который может очень помочь при решении проблем с сетью. Он прослушивает сетевой трафик и распечатывает информацию о пакетах на основе заданных вами критериев.

Например, вы можете проверить все пакеты, отправленные на определенный хост или с него, в данном примере Ubuntu18:

 $ 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

По умолчанию tcpdump преобразует IP-адреса в имена хостов. Используйте флаг -n , если вы не хотите, чтобы tcpdump выполнял поиск имен.

Вывод tcpdump печатает одну строку для каждого пакета. Используйте флаг -c для ограничения вывода, 5 в приведенном выше примере.

tcpdump полезен для решения проблем с сетью, а также для выявления потенциальных проблем. Рекомендуется время от времени запускать tcpdump в вашей сети, чтобы убедиться, что все в порядке.

нетстат

Команда Netstat используется для проверки сетевых подключений, таблиц маршрутизации, а также различных сетевых настроек и статистики.

Используйте флаг -i , чтобы вывести список сетевых интерфейсов в вашей системе.

Вот пример:

 $ 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

Использование флага -r отобразит таблицу маршрутизации. Здесь показан путь, настроенный для отправки сетевых пакетов.

 $ 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

Звездочка в последних двух строках указывает на то, что шлюз не требуется для отправки пакетов на любой хост в этих сетях. Этот хост напрямую подключен к сетям 10.0.0.0 и 10.0.2.0.

В первой строке пункт назначения указан по умолчанию, что означает, что любой пакет, предназначенный для сети, не указанной в этой таблице, обрабатывается маршрутизатором 10.0.2,2.

Команда netstat без каких-либо параметров выводит список открытых сокетов. Используйте флаг -l для отображения только прослушиваемых сокетов, которые по умолчанию не отображаются. Вы можете использовать флаг -a, чтобы показать прослушивающие и не прослушивающие сокеты. Вот пример:

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

Еще пример команды Netstat здесь

SS

В установках Linux по умолчанию запущено множество служб. Они должны быть отключены или предпочтительно удалены, так как это помогает уменьшить поверхность атаки. Вы можете увидеть, какие службы работают, с помощью команды netstat. Хотя netstat все еще доступен, большинство дистрибутивов Linux переходят на команду ss .

используйте команду ss с флагами -t и -a , чтобы получить список всех сокетов TCP. Это отображает как прослушивающие, так и не прослушивающие сокеты.

 $ 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 :::*

Чтобы отобразить только соединения TCP с установленным состоянием:

 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 позволяет безопасно подключаться к удаленным хостам через Интернет. Раньше rlogin и telnet использовались для подключения к удаленным хостам и их администрирования. Однако оба имеют фундаментальный недостаток: они отправляют всю информацию, включая имена для входа и пароли, в открытом виде.

ssh обеспечивает безопасную связь через Интернет со следующими двумя функциями:

  • Он подтверждает, что удаленный хост является тем, за кого он себя выдает.
  • Он шифрует все сообщения между хостами.

Чтобы подключиться к удаленному хосту, вам необходимо запустить сервер OpenSSH на удаленном хосте. Вы можете установить его с помощью менеджера пакетов вашего дистрибутива. Например, в Ubuntu вы можете установить его так:

 $ sudo apt install openssh-server

Вот пример, показывающий, как вы можете подключиться к удаленному хосту 10.0.0.50 с помощью команды 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

Вы получаете сообщение о том, что подлинность хоста 10.0.0.50 не может быть установлена, это связано с тем, что это первое соединение с 10.0.0.50 (сервером), а клиент ssh никогда раньше не видел этот удаленный хост. Введите yes, чтобы продолжить подключение. После установления соединения вам будет предложено ввести пароль:

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

После того, как вы введете правильный пароль, вы войдете на удаленный хост.

 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:~$

Вы можете выйти из этой удаленной оболочки с помощью команды exit.

Кроме того, вы можете легко выполнить одну команду на удаленном хосте, используя ssh. Например, чтобы запустить df -h на удаленном хосте:

 $ 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 (безопасная копия) очень похожа на команду cp для копирования файлов, с добавлением — вы можете включать удаленные имена хостов в исходные или целевые пути. Имя хоста и путь к каталогу разделяются двоеточием. Это позволяет безопасно копировать файлы по сети в зашифрованном виде. Следующая команда копирует .txt с локального компьютера на 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 (защищенный ftp) также является программой копирования файлов, аналогичной ftp . Однако он использует зашифрованный туннель SSH для копирования файлов вместо отправки всего в открытом виде. Кроме того, вам не нужен FTP-сервер, работающий на удаленном хосте. Вам нужен только ssh-сервер. Вот пример сеанса:

 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 для проверки IP-адреса, назначенного системе.

 [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 ~]#

копать землю

dig (Domain Information Groper) — это гибкий инструмент для опроса DNS-серверов имен.

Он выполняет поиск DNS и отображает ответы, возвращаемые серверами имен.

 [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, если соединение установлено, это означает, что соединение между двумя хостами работает нормально.

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

нслукап

nslookup — это программа для запроса серверов доменных имен и разрешения 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 ~]#

Резюме

Работа в сети в Linux — обширная тема с большим количеством команд и утилит. В этой статье мы обсудили некоторые часто используемые команды, которые, надеемся, помогут вам в управлении и защите вашей сети.