さくらのクラウド やってみたシリーズ(6) ~非DHCP環境(ローカルルーターなしスイッチ)IPv4 の付与とパケットフィルタ
前回のまでの手順でこのような環境が構築されています。
Publicサーバには2つのNICが搭載され外部からのアクセスと2台のinternalサーバへの接続が可能です。2台のinternalサーバは共有セグメントには属していませんので、外部からの接続は行えずPubli
cサーバからの接続のみが可能です。
IPアドレスの状態は以下の通りです。
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
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
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を付与します。
sudo ip addr add 192.168.50.1/24 dev eth0
sudo ip addr add 192.168.50.2/24 dev eth0
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ベースのファイアウォール機能であるパケットフィルタ
という機能が提供されています。これを用いて以下の制御を行っていきます。
- Public→internal 1/2 へのPing禁止
- 外部インターネットから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