Linux標準教科書(Ver.3.0.0)のまとめ ~第10章~

# 第10章 ネットワークの設定と管理

## はじめに

当初は `Docker` を使用して履修する予定でしたが、必要なファイルなどがなかったりしたため、 `VertualBox` を使って `CentOS7` をインストールしました。

https://qiita.com/tamago3keran/items/260899458959d3214dcf

以下、 `VirtualBox` 上の `CentOS7` を使用する前提で記述していますので、ご了承ください。

## ネットワークデバイスを有効化

`VertualBox` で `CentOS7` を立ち上げた直後だと、ネットワークデバイスが有効になっていない場合があるので、 `nmcli device` コマンドを使用して確認してみましょう。

```console:実行コマンド
# nmcli device
デバイス    タイプ    状態      接続   
virbr0      bridge    接続済み  virbr0 
enp0s3      ethernet  切断済み  --     
lo          loopback  管理無し  --     
virbr0-nic  tun       管理無し  -- 
```

イーサネットのネットワークインターフェースを示す `enp0s3` に注目すると **切断済み** になっており、ネットワークに繋がっていないことを示します。

`ifup` コマンドを使用して、 `enp0s3` をアクティブにし、ネットワークに接続できるようにしましょう。

```console:実行コマンド
# ifup enp0s3
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/3)

# nmcli device
デバイス    タイプ    状態      接続   
virbr0      bridge    接続済み  virbr0 
enp0s3      ethernet  接続済み  enp0s3 
lo          loopback  管理無し  --     
virbr0-nic  tun       管理無し  --     
```

`enp0s3` が **接続済み** になったら、ネットワークに接続できるはずです。 `ping` コマンドを実行して、接続されていることを確認しましょう。

```console:実行コマンド
# ping lpi.jp -c 3
PING lpi.jp (203.174.74.34) 56(84) bytes of data.
64 bytes from sv1.lpi.jp (203.174.74.34): icmp_seq=1 ttl=55 time=5.37 ms
64 bytes from sv1.lpi.jp (203.174.74.34): icmp_seq=2 ttl=55 time=6.42 ms
64 bytes from sv1.lpi.jp (203.174.74.34): icmp_seq=3 ttl=55 time=5.59 ms

--- lpi.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 5.377/5.800/6.425/0.455 ms
```

## 経路の確認

インターネットは多くのネットワークが繋がって構成されており、いくつものネットワークを中継して通信が行われます。その際に、ネットワークとネットワークを仲介するゲートウェイをいくつも通るわけです。その中継したゲートウェイを調べるコマンドが `traceroute` コマンドと `tracepath` コマンドです。

```console:実行コマンド
# traceroute lpi.jp
traceroute to lpi.jp (203.174.74.34), 30 hops max, 60 byte packets
 1  gateway (xxx.xxx.xxx.xxx)  2.070 ms  3.503 ms  3.527 ms
--- 省略 ---
10  sv1.lpi.jp (203.174.74.34)  9.857 ms  10.662 ms  10.563 ms

# tracepath lpi.jp
 1?: [LOCALHOST]                                         pmtu 1500
 1:  gateway                                               1.888ms 
 1:  gateway                                               1.844ms 
--- 省略 ---
10:  sv1.lpi.jp                                            6.732ms reached
     Resume: pmtu 1500 hops 10 back 10 
```

私の PC からコマンドを叩いて見たところ、 インターネット回線が NRUO で、プロバイダーが So-net であることがわかりました。いやー、たのしい。

## ネットワークインターフェースの設定

ネットワークインターフェースの設定は `/etc/sysconfig/network-scripts/ifcfg-XXX` のファイルに記述されています。今回は `enp0s3` の設定を見てみます。

```console:実行コマンド
# ip addr show dev enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:e1:27:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.94/24 brd 192.168.100.255 scope global dynamic enp0s3
       valid_lft 257196sec preferred_lft 257196sec
    inet6 fe80::980e:c4da:7151:4ed1/64 scope link 
       valid_lft forever preferred_lft forever
```

`enp0s3` に割り振られている `プライベートIPアドレス` は `192.168.100.94` であることが確認できます。では、設定ファイルを修正して、 `プライベートIPアドレス` を変更してみましょう。

```console:実行コマンド
# nmcli c mod enp0s3 ipv4.method manual ipv4.addresses 192.168.100.100/24 ipv4.gateway 192.168.100.253
(enp0s3 に割り振られる IP アドレスとゲートウェイの設定を変更します)

# systemctl restart network.service
(ネットワークサービスの再起動)

# ifup enp0s3
(enp0s3 をアクティブにする)

# ip addr show dev enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:e1:27:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.100/24 brd 192.168.100.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::980e:c4da:7151:4ed1/64 scope link 
       valid_lft forever preferred_lft forever
(IP アドレスが指定した通り 192.168.100.100/24 になっていることを確認)
```

## サーバのIPアドレスとFQDN

様々なサイトが使用しているサーバのIPアドレスを調べたり、IPアドレスからサーバのFQDNを調べることもできるそうです！

実際に色々調べてみましょう！

```console:実行コマンド
# nslookup yahoo.co.jp
Server:  192.168.100.1
Address: 192.168.100.1#53

Non-authoritative answer:
Name: qiita.com
Address: 183.79.135.206
Name: qiita.com
Address: 182.22.59.229

# nslookup 13.114.149.164
Server:  192.168.100.1
Address: 192.168.100.1#53

Non-authoritative answer:
164.149.114.13.in-addr.arpa   name: kitchhike.com

Authoritative answers can be found from:
114.13.in-addr.arpa   nameserver = x4.amazonaws.org.
--- 省略 ---
```

`yahoo.co.jp` のIPアドレスをブラウザに直打ちすると、ちゃんと `Yahoo!` のページが表示されます！

## ネットワークセキュリティの設定

`CentOS7` では、 `iptables` に代わり、 `firewalld` が推奨されているようです。まずは `firewalld` の操作をしてみましょう。

まず firewalld の状態を確認してみましょう。

```console:実行コマンド
# firewall-cmd --state
(ファイアウォールの状態を表示)
running
```

ちゃんと起動しているようですね。
次は systemctl コマンドで firewalld の設定も確認してみましょう。

```console:実行コマンド
# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon
  Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
  Active: active (running) since Thu 2018-04-26 10:37:32 JST; 3min 24s ago
    Docs: man: firewalld(1)
Main PID: 722 (firewalld)
  CGroup: /system.slice/firewalld.service
          └ ─ 722 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
  Apr 26 10:37:31 localhost.localdomain systemd[1]: Starting firewalld - dyna...
  Apr 26 10:37:32 localhost.localdomain systemd[1]: Started firewalld - dyna...
--- 省略 ---
```

`active` つまり firewalld が実行中であることが確認できますね。
次は firewall-cmd で 現在有効になっているサービスのみを確認してみます。このコマンドは root または sudo で実行してください。

```console:実行コマンド
# firewall-cmd --list-services
ssh dhcpv6-client
```

ディストリビューションによってはデフォルトでほとんどのサービスが抑制されているので、サービスを使用するために設定を追加する必要があるようです。

では実際にサービスを使用するための設定を追加してみましょう。

```console:実行コマンド
# firewall-cmd --add-service=http
success
(http を一時的に設定)

# firewall-cmd --add-service=https --permanent
(https を永続的に設定)
```

実際に http と https がそれぞれ追加されていることを確認しましょう。

```console:実行コマンド
# firewall-cmd --list-services
ssh dhcpv6-client http

# firewall-cmd --list-services --permanent
ssh dhcpv6-client https
```

では永続的に追加した https がシステム起動時に設定されていることを確認しましょう。

```console:実行コマンド
# systemctl restart firewalld.service
(firewalld の再起動)

# firewall-cmd --list-services
ssh dhcpv6-client https
(https が設定されている)

# firewall-cmd --list-services --permanent
ssh dhcpv6-client https
```