🗂

さくらのクラウド やってみたシリーズ(6) ~非DHCP環境(ローカルルーターなしスイッチ)IPv4 の付与とパケットフィルタ

に公開

https://zenn.dev/sakura_internet/articles/3dab3754aa6ea9
https://zenn.dev/sakura_internet/articles/da970016fd594d
前回のまでの手順でこのような環境が構築されています。

Publicサーバには2つのNICが搭載され外部からのアクセスと2台のinternalサーバへの接続が可能です。2台のinternalサーバは共有セグメントには属していませんので、外部からの接続は行えずPubli
cサーバからの接続のみが可能です。

IPアドレスの状態は以下の通りです。

public
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 9c:a3:ba:32:2b:ec brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 163.43.218.53/24 brd 163.43.218.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe32:2bec/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 9c:a3:ba:32:72:0a brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    inet6 fe80::9ea3:baff:fe32:720a/64 scope link
       valid_lft forever preferred_lft forever
internal1
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 9c:a3:ba:32:c3:d0 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet6 fe80::9ea3:baff:fe32:c3d0/64 scope link 
       valid_lft forever preferred_lft forever
internal2
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 9c:a3:ba:32:97:6f brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet6 fe80::9ea3:baff:fe32:976f/64 scope link 
       valid_lft forever preferred_lft forever

さくらのクラウドのスイッチは純粋なL2スイッチでありL3のローカルルータを組み合わせない限りDHCPの機能が提供されないため、デフォルトで付与されているIPアドレスはIPv6のローカルリンクアドレスのみです。

ここにIPv4を付与します。

internal1
sudo ip addr add 192.168.50.1/24 dev eth0
internal2
sudo ip addr add 192.168.50.2/24 dev eth0
public
sudo ip addr add 192.168.50.3/24 dev eth0

これでIPv4を用いたPing疎通が行えます。

ping -I eth1 192.168.50.1
PING 192.168.50.1 (192.168.50.1) from 192.168.50.3 eth1: 56(84) bytes of data.
64 bytes from 192.168.50.1: icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from 192.168.50.1: icmp_seq=2 ttl=64 time=0.285 ms

パケットフィルタ

さくらのクラウドには各NICに付与する5Tupleベースのファイアウォール機能であるパケットフィルタという機能が提供されています。これを用いて以下の制御を行っていきます。

  1. Public→internal 1/2 へのPing禁止
  2. 外部インターネットからPublicへのSSH以外の通信の禁止

Public→internal 1/2 へのPing禁止

コンソール左ペインからパケットフィルタをクリックし、追加ボタンをクリックします。

適当な名前を付けて作成をクリックします。

追加ボタンをクリックしルールを新たに作成し投入します。

Ping疎通で使われるICMPを禁止するルールを書きます。送信元はPublicサーバのIPアドレスとなっています。


作業が終わったら必ず画面上部の反映ボタンをクリックしてください。
これをinternal1/2のNICに付与します。
サーバ管理画面のNICタブからパケットフィルタの編集を選択します。

先ほど作成したパケットフィルタを選択します。

これによりPublicサーバからinternal 1/2 へのpingが通らなくなります。

ping 192.168.50.2
PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data.
^C
--- 192.168.50.2 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6145ms

余談:ICMPを止めるメリット

ICMPプロトコルを遮断するとPingが通らなくなるというデメリットがありますが、以下の様なメリットがあります。
外部からの調査を防ぐ:
攻撃者は最初に「この IP は生きてるか?」を調べるために ping を送ります。応答があると「存在している」ことが分かるため、攻撃の足がかりになります。ping を止めると「死んでいる IP のように見せられる」ので、スキャンの対象から外れる可能性が高まります。
DoS/DDoS 攻撃の軽減:
ping(ICMP echo)を大量に送りつける攻撃(ping flood)を無効化することができます。

外部インターネットからPublicへのSSH以外の通信の禁止

では同様の手順で外部からPublicサーバに対する通信をSSHのみ許可する、というルールを作成します。これを行うためには2つのルールが必要です。
1.SSHのみ許可するルールを作成
2.すべてのPublicサーバに対する通信を禁止



これによりSSH以外のPublicサーバへの通信が禁止されます。(商用で使うならさらにソースIPを絞るなどが望ましいです)
この際通信に対するルールの評価は必ず上から行わ,該当するルールがあった場合それ以降のルールは評価されません。つまりSSH通信はルール1のみが評価されルール2は無視されるため通信が許可されることとなります。
またこのパケットフィルタはステートレスとして動作しますので注意してください。

さくらインターネット株式会社

Discussion