14の便利なLinuxネットワークコマンド

公開: 2015-02-15

ネットワークの構成、監視、および保護は、システム管理者の仕事の重要な部分を形成します。 Linux ネットワークの管理に関しては、多くのコマンドとユーティリティが利用可能です。

ネットワーク化されたシステムに障害が発生することがあります。 管理者は、問題を診断して解決する必要があります。 監視は、問題が手に負えなくなる前に問題を検出して修正するのに役立ちます。 セキュリティとパフォーマンスの監視も、管理者の活動の重要な部分を形成します。

ここでは、Linux ネットワークを管理するために一般的に使用されるコマンドについて説明します。

IP

iproute2 パッケージには、ネットワークとルーティングの構成に使用される IP コマンドが含まれています。 これは、従来のifconfigおよびrouteコマンドに取って代わります。

ipは、コマンドを実行するオブジェクトと、追加、削除、または表示などのアクションを指定する 2 番目の引数を取ります。

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 ページは次のように表示されます。

 $ man ip-link

IPアドレス

ip address コマンドを使用して、アドレスを表示したり、新しいアドレスをバインドしたり、古いアドレスを削除したりします。 man ページの ip address コマンドの名前は ip-address です。

たとえば、次のコマンドは、ネットワーク インターフェイス enp0s8 に割り当てられた IP アドレスを表示します。

 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」) は、ネットワーク検出、セキュリティ監査、および管理に使用される強力なユーティリティです。 多くのシステム管理者は、どのシステムがオンラインであるかを判断したり、OS の検出やサービスの検出に使用したりしています。

デフォルトの 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

注意点: 自分のシステムがインターネット上でスキャンされていることを喜ぶ人はいません。 そのため、その前に許可を求めてください。

Windows で Nmap を使用することもできます。このインストール ガイドを参照してください。

ピング

ホストが生きているかどうかを確認するには、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 は 1 つの応答パケットを受信した後に正常に終了します。

 $ 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 シーケンス番号は特に重要です。 シーケンス番号の中断は、失われたパケットを示します。

失敗した ping の原因として考えられるのは、

  • ネットワーク障害
  • ホストが生きていない
  • ファイアウォールが ICMP ECHO 要求をブロックする

オンライン ping テストを実行して、世界のさまざまな場所からの接続を確認することもできます。

iPerf

ping はホストの可用性を検証しますが、iPerf は 2 つのホスト間のネットワーク パフォーマンスの分析と測定に役立ちます。 iPerf では、2 つのホスト間の接続を開き、データを送信します。 iPerf は、2 つのホスト間で使用可能な帯域幅を表示します。

ディストリビューション パッケージ マネージャーを使用して iPerf をインストールできます。 たとえば、Ubuntu ベースのディストリビューションでは、次のようにインストールできます。

 $ sudo apt install iperf -y

両方のマシンに iPerf をインストールしたら、いずれかのマシンで iPerf サーバーを起動します。 次の例では、IP アドレスが 10.0.0.51 のホストで iPerf サーバーを起動します。

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

2 番目のマシンで、-c フラグを指定して iPerf を開始します。 これはサーバーに接続し、いくつかのデータを送信します。

 $ 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 は、パケットが宛先に到達するまでに通過する一連のゲートウェイを示します。 たとえば、私のマシンから google.com への traceroute は次のように表示されます。

 $ 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 行目は、往復時間に * を示しています。 これは、応答が受信されなかったことを示します。 これには多くの理由が考えられます。traceroute ICMP パケットは優先度が低いため、ルーターによってドロップされる可能性があります。 または、単に混雑している可能性があります。 特定のゲートウェイのすべての時間フィールドに * が表示される場合、ゲートウェイがダウンしている可能性があります。

多くの Web ベースのルート トレース ツールを使用すると、Web サイトからホストへの逆 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 アドレスをホスト名に解決します。 tcpdump に名前検索を実行させたくない場合は、 -nフラグを使用します。

tcpdump の出力では、パケットごとに 1 行が出力されます。 -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

最後の 2 行のアスタリスクは、これらのネットワーク上のホストにパケットを送信するためにゲートウェイが必要ないことを示しています。 このホストは、ネットワーク 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コマンドに移行しています。

-tおよび-aフラグを指定して ss コマンドを使用して、すべての 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 は、次の 2 つの機能を使用して、インターネットを介した安全な通信を可能にします。

  • リモートホストが誰であるかを確認します。
  • ホスト間のすべての通信を暗号化します。

リモート ホストに接続するには、リモート ホストで OpenSSH サーバーを実行する必要があります。 ディストリビューション パッケージ マネージャーを使用してインストールできます。 たとえば、Ubuntu では次のようにインストールできます。

 $ sudo apt install openssh-server

以下は、ssh コマンドを使用してリモート ホスト 10.0.0.50 に接続する方法を示す例です。

 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 を使用して、リモート ホストで 1 つのコマンドを簡単に実行できます。 たとえば、リモート ホストで 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 と sftp

scp (セキュア コピー) は、ファイルをコピーするためのcpコマンドに非常に似ていますが、さらに、コピー元またはコピー先のパス名にリモート ホスト名を含めることができます。 ホスト名とディレクトリ パスはコロンで区切られます。 これにより、暗号化された形式でネットワーク経由でファイルを安全にコピーできます。 次のコマンドは、 a.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 アドレスを確認するためにifconfigコマンドを使用します。

 [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

接続が確立された場合、2 つのホスト間の接続が正常に機能していることを意味します。

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

nslookup

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 でのネットワークは膨大なテーマであり、多数のコマンドとユーティリティがあります。 この記事では、ネットワークの管理と保護に役立つと思われる一般的に使用されるコマンドについて説明しました。