さくらのクラウド ネットワーク入門 3. パケットフィルタリングや内部へのSSHログイン

公開:最終更新日:
さくらのクラウド ネットワーク入門 3. パケットフィルタリングや内部へのSSHログイン

「さくらのクラウド ネットワーク入門」のVol. 1では「スイッチ」を用いて内部ネットワークを作成し、Vol. 2でインターネット(共有セグメント)に接続しました。このVol. 3では、内部ネットワークにインターネットからSSHでログインするために必要な設定をいくつか進めていきます。

目次
  1. NICにIPv4アドレスを付与する
    1. コマンドラインからIPv4アドレスを設定する
    2. IPv4アドレスを永続的に設定する
  2. 内部ネットワークにSSHでログインする
  3. パケットフィルタを設定してみよう
  4. 設定1. 踏み台から内部サーバへのPingを禁止
    1. パケットフィルタを作成する
    2. パケットフィルタをNICに適用する
  5. 設定2:外部からpublicへはSSH以外の通信を禁止
  6. 参考リンク

NICにIPv4アドレスを付与する

ここまで共有セグメントにはIPv4アドレスが割り当てられていましたが、内部ネットワークはデフォルトで付与されるIPv6のリンクローカルアドレスで構成してきました。もちろん内部ネットワークのNICにもIPv4アドレスを付与できます。

例えば、ここでは各サーバに次のようなIPv4アドレスを固定で設定することにします。

サーバー名IPv4アドレス
internal1192.168.50.1
internal2192.168.50.2
public(switch1側)192.168.50.3

コマンドラインからIPv4アドレスを設定する

ここでは動作確認のため、ひとまずコマンドラインから ip addr add コマンドでIPv4アドレスを付与してみます。

internal1では、さくらのクラウドのコンソールから次のコマンドを入力します。

[root@internal1 ~]# ip addr add 192.168.50.1/24 dev eth0
[root@internal1 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:52:dd brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    altname enx9ca3ba3252dd
    inet 192.168.50.1/24 brd 192.168.50.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::938b:343:730:7831/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

internal2でも次のように入力します。

[root@internal2 ~]# ip addr add 192.168.50.2/24 dev eth0
[root@internal2 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:fb:fc brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    altname enx9ca3ba32fbfc
    inet 192.168.50.2/24 brd 192.168.50.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::56ed:cbb8:c259:621e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

publicは前回記事(Vol. 2)の最後で試したように、SSHで接続して作業できます。

[root@public ~]# ip addr add 192.168.50.3/24 dev eth1
[root@public ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:c2:80 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    altname enx9ca3ba32c280
    inet 192.168.50.3/24 brd 192.168.50.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::7096:398c:eb59:3083/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@public ~]# 

これで各サーバにIPv4アドレスが付与できました。publicでは次の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

IPv4アドレスを永続的に設定する

上記で試した ip コマンドによる設定はサーバを停止すると消えてしまうので、永続的に利用するにはそのための設定が必要です。IPアドレスなどの設定方法は使用しているOSによるため、サーバを起動する際に選択したOS(Linuxディストリビューション)の関連ドキュメントなどを参照してください。

例えば、本シリーズのVol. 1で参照した「始めよう!さくらのクラウド(2)」ではAlmaLinuxを採用していますが、この場合は次の nmcli コマンドで設定することもできます。

[root@public ~]# nmcli connection add type ethernet ifname eth1 \
 con-name eth1 ipv4.method manual ipv4.addresses 192.168.50.3/24
Connection 'eth1' (e2c4f7c1-b696-4261-86c0-93b796f74f2e) successfully added.
[root@public ~]# nmcli connection up eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/21)
[root@public ~]# nmcli device
DEVICE  TYPE      STATE                   CONNECTION 
eth0    ethernet  connected               eth0       
eth1    ethernet  connected               eth1       
lo      loopback  connected (externally)  lo         

また、内部ネットーワークにのみ接続されているineternal1とinetrnal2については、NICが1枚だけなのでコントロールパネルの「ストレージ」で「ディスク」の詳細から「ディスクの修正」でIPアドレスを設定できます。

なお、ここではSSHログインに必要な公開鍵を「プロジェクトから選択」しています。ディスクの修正やSSH鍵の設定については次のマニュアルや「始めよう!さくらのクラウド(3)」などを参照してください。

内部ネットワークにSSHでログインする

IPv4アドレスが付与できたら、これまでさくらのクラウドのコンソールでしか操作できなかった内部ネットワークのサーバ(internal1およびinternal2)に、踏み台サーバ(public)越しにインターネットから接続してみましょう。

例えば、IPv4アドレスに「192.168.50.1」が設定されたineternal1に対しては、SSHのProxyJumpを利用して次のコマンドでログインを行います。コマンドライン中の [publicの共用セグメントのIPアドレス] は利用者自身の環境に置き換えてください。

$ ssh -J root@[publicの共用セグメントのIPアドレス]:22 root@192.168.50.1
Enter passphrase for key '/Users/xxxxxxxx/.ssh/id_ed25519': [秘密鍵のパスフレーズ]
Enter passphrase for key '/Users/xxxxxxxx/.ssh/id_ed25519': [秘密鍵のパスフレーズ]
Last login: Fri Dec  5 12:57:41 2025 from 192.168.50.3

また今回は、各サーバの公開鍵を「プロジェクトから選択」することを前提としています。このため踏み台と内部サーバで同じ鍵を使用することになり、同じパスフレーズを2回入力します。なお、初回のSSHログイン時には、いくつかの登録メッセージなどが表示されます。

パケットフィルタを設定してみよう

さくらのクラウドでは、NICごとにファイアウォールを付与できる「パケットフィルタ」という機能が提供されています。これは5タプル (five tuple) ベースでプロトコルを制御できます。パケットフィルタの詳細は次のマニュアルなどを参照してください。

なお、コンピュータネットワークにおける5タプルとは「送信元IPアドレス」「送信元ポート番号」「宛先IPアドレス」「宛先ポート番号」「プロトコル番号」という5つの数字の組み合わせになります。

今回のパケットフィルタでは以下のルールを設定します。

  1. 踏み台(public)から内部サーバ(internal1・internal2)へのICMP(Ping)を禁止
  2. 外部(インターネット)から踏み台(public)へのSSH以外の通信を禁止

順に設定していきましょう。

設定1. 踏み台から内部サーバへのPingを禁止

まず、踏み台サーバから内部へのICMPを遮断します。これによりPingが通らなくなるというデメリットがありますが、一方で以下のメリットがあります。

  • 外部からの攻撃者による調査を防ぐ
    攻撃者は、最初に「このIPアドレスは生きてるか?」を調べるためにPingを送ります。応答があると「存在している」ことが分かるため、攻撃の足がかりになります。ICMPを止めると「死んでいるIPアドレスのように見せられる」ので、攻撃のスキャン対象から外される可能性が高まります。
  • DoS(DDoS)攻撃の軽減
    ICMP echoを大量に送りつける攻撃(ping flood)を無効化できます。

パケットフィルタを作成する

コントロールパネルの「ネットワーク」で「パケットフィルタ」の画面を開きます。

上部の「+追加」ボタンをクリックして「パケットフィルタ追加」画面を開き、分かりやすい名前を付けます。ここでは「block ping」としています。右下の「+作成」ボタンをクリックしてリソースを作成します。

コントロールパネルから先ほど作成したパケットフィルタを開いて「ルール」タブを選択し、右下の「追加+」ボタンをクリックして新たなルールを投入します。

ここでは、Pingに使われる「 icmp」を拒否(deny)するルールを記述しています。「送信元ネットワーク」として踏み台サーバ(public)のIPアドレスを指定します。

右下の「追加」ボタンをクリックしてルール作成が終わったら、必ず画面上部の「反映」ボタンをクリックしてください。

パケットフィルタをNICに適用する

先ほど作成したパケットフィルタを、internal1とinternal2のNICに付与します。

サーバのコントロールパネルで「inetrnal1」を開いて「NIC」タブを選択します。右端の▼メニューから「パケットフィルタの編集」を選択します。

先ほど作成したパケットフィルタ「block ping」を選択して、右下の「更新」ボタンをクリックします。

これによりinternal1のパケットフィルターが更新され、踏み台(public)からPingを実行しても、次のように通らなくなります。

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

同様にinternal2のNICにもパケットフィルタ「block ping」を適用してください。

設定2:外部からpublicへはSSH以外の通信を禁止

続いて2つ目のパケットフィルタを同様の手順で作成します。外部からpublicサーバに対する通信でSSHのみを許可してそれ以外を禁止するため、次の2つのルールが必要です。

  1. SSHのみを許可するルール
  2. すべての通信を禁止するルール

1番目のルールでは、SSHで使用するTCPの22番ポートを許可(allow)します。

2番目のルールでは、IPによる通信そのものを拒否(deny)します。

このように複数のルールを記載すると上から順に評価され、該当するルールがあればそれ以降は評価されません。つまり、SSHについてはルール1のみが評価されルール2は無視されるため、通信が許可されます。それ以外のプロトコルはルール1に該当しないため、ルール2が評価されて禁止となります。

このパケットフィルタをpublicの共有セグメント側のNICに適用して「更新」してください。

なお、さくらのクラウドのパケットフィルタはステートレスで動作します。内部ネットワークが起点となるTCP通信などで、外には出れるが応答が戻らないことも起こりえるので注意してください。また実際にサイトを運用する際には、SSHに対しても送信元ネットワークを絞って許可することが望ましいでしょう。

参考リンク

本記事では以下のマニュアルを参照しました。

また、以下のコラムも参照しています。

これまで「さくらのクラウド ネットワーク入門」では以下の記事を公開しています。

亀田治伸
制作者

クラウド事業本部

亀田治伸

兵庫県伊丹市出身、米国州立南イリノイ大学卒業。認証系独立ASP、 動画・音楽配信システム構築、決済代行事業者、外資クラウドエバンジェリスト数社を経て現職。得意領域は、認証、暗号、ネットワークを中心としたセキュリティ、 映像配信、開発手法に見る組織論、クラウドアーキテクチャ、プレゼンテーション。