Oracle CloudでARMインスタンスが開始されたのでIPv6アクセスできるサーバとして構築してみた


Oracle CloudでARMインスタンスの提供が開始された。

Arm-based cloud computing is the next big thing: Introducing Arm on Oracle Cloud Infrastructure

Ampere A1を使用したものらしい。

今日から使える、といってるけど、さすがに東京リージョンには来てないだろうと思いつつコンソールを開いてみる。

画像

え!?東京でも作成できんじゃん!と作成開始

まず、Always Freeアカウントではどういうスペックが作れるのか?を確認→「Always Free Resources

画像

なんとCPU 4個/RAM 24GBまでいけるらしい。

すでに、これまでのAlways Freeアカウントの上限である、VM.Standard.E2.1.Micro インスタンスで2個作っていても、それとは別カウントでARMのVM.Standard.A1.Flexが作れるようだ。

画像
画像
画像

標準ではOracle Linux 7.9が選択されている。他の選択肢を見てみる。

画像

「イメージビルド」に記載がないものは選べないようだ。このため、Oracle Autonomous Linux は選択できなかった。

Oracle Linux 8 にすることはできるようだ。

インスタンスのshapreは変更可能

その他の項目はいままでのインスタンス作成となんら変わらず。

完成するとこんな感じ

画像

「Always Free」というマークがついてない・・・

不安になったのでいろいろ試行錯誤

画像

既存のVM.Standard.E2.1.Microインスタンスを1個けして作り直してもA1.FlexインスタンスにAlways Freeマークがつくわけではないようだ。

かといって、VM.Standard.E2.1.Microインスタンスが2個ある状態で3個目をつくろうとすると、有料アカウントへのアップグレードが必要と表示されるので、有料になっているわけではない模様。

画像

じゃあ、ARMインスタンスを複数個立てられるのかな?と実行してみると、作成は可能なものの直ちに終了して使えないという状態

既存インスタンスのシェイプの変更を選び

変更することは可能

変更が反映されました。

ほんとにこれで大丈夫なのかなぁ???と悩むところではありますが、ドキュメント通り、「VM.Standard.E2.1.Micro インスタンスを2個」と「ARMのVM.Standard.A1.Flexインスタンスを4CPU/メモリ24GBの範囲内」で作成することができる、ということのようです。

また、ARMインスタンスについては、作成後、CPU/メモリスペックを変更する事が可能でした。

2021/05/27訂正

ドキュメント上は「All tenancies get two public IPv4 addresses for Always Free compute instances」となっていますが、動作検証をしてみたところ、パブリックIPアドレスの上限個数が3となっているようです。

パブリックIPアドレスの割り当てをやめてみたところARMインスタンス(VM.Standard.A1.Flex)を4つ作ることができました。

画像

IPv6設定メモ

4月から使える様になったIPv6ですが「Oracle Cloudですでに作成済みのネットワークに対してIPv6を有効にする方法」に示した手順で有効化したところ、DHCPv6でのIPv6アドレス取得が失敗しました。

手動であれば設定できたので、ARMインスタンスが存在するネットワークへのDHCPv6が正常に動作していない模様です。

設定としては、Oracle Cloudコンソールの[インスタンスの詳細]-[アタッチされたVNIC]-[VNICの詳細]にある[リソース]-[IPv6アドレス]にて、インスタンスにIPv6アドレスを割り当てる。

また、2021/05/26時点でのOracle Linux 7提供イメージでは、IPv6アドレスが有効化されていないため、インスタンス内のOS設定を変更する必要があり、DHCPv6アドレス取得ができなかったので、disable-ipv6.confと01_ipv6を作成した。
Oracle Linux 8だとIPv6有効化されていたがDHCPv6アドレス取得ができなかったので01_ipv6を作成したfirewalldにdhcpv6-clientの設定がされていないのでDHCPv6アドレス取得に失敗していたので設定を変更した。
Ubuntu 20.04ではIPv6有効化されておりDHCPv6アドレス取得はできたものの起動時に自動取得はしなかったので01_ipv6を作成しdhclient -6の方を有効にした。

disable-ipv6.confの手順

/etc/sysctl.d/disable-ipv6.conf を作成し、下記を記載

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0

01_ipv6の手順

/var/lib/cloud/scripts/per-boot/01_ipv6 を作成し、下記を記載

#/bin/bash
#dhclient -6
ip -6 addr add xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/128 dev enp0s3

DHCPv6が使える様になった場合は、ip行の先頭に#を入れ、dhclientの前の#を外すこと。

また/var/lib/cloud/scripts/per-boot/01_ipv6には下記の様に実行権限を与えること

# chmod a+x /var/lib/cloud/scripts/per-boot/01_ipv6 

firewalldにdhcpv6-clientを追加する手順

serviceとしてdhcpv6-clientを追加する、という手順。Oracle Linux 7だと標準で設定されていたが、2021/05/27時点でのOracle Linux 8 ARM環境だと設定されていなかった。

$ sudo firewall-cmd --permanent --add-service=dhcpv6-client
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
$

簡易的なセキュリティ対策

インスタンスを稼働させておくとsshへのアタックが凄い数来ます。

標準設定では秘密鍵持ってないとログインできないので影響は少ないですが、アクセスができる状態だといつまでもリトライを繰り返してきます。このため、fail2banを使って拒否することで、アタック側のブラックリストに載せて攻撃者数を減らしてみよう、という試みです。

$ sudo yum install fail2ban
$ sudo vi /etc/fail2ban/jail.local
$ sudo cat /etc/fail2ban/jail.local
[DEFAULT]
# 86400秒=24時間以内に5回不審なアクセスがあったら24時間BAN
bantime  = 86400
findtime  = 86400
maxretry = 5
# 259200秒=3日以内に5回不審なアクセスがあったら3日間BAN
#bantime  = 259200
#findtime  = 259200
#maxretry = 5

# 除外IP
ignoreip = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

[sshd]
enabled = true
banaction = firewallcmd-ipset

$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
$

おまけ情報

インスタンス内でlscpuを実行した結果

Oracle Linux 7の場合

$ sudo lscpu
Architecture:          aarch64
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Model:                 1
BogoMIPS:              50.00
NUMA node0 CPU(s):     0
Flags:                 fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
$

Oracle Linux 8 (Oracle-Linux-8.3-aarch64-2021.05.12-0) 初期状態の場合

$ lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           1
NUMA node(s):        1
Vendor ID:           ARM
Model:               1
Stepping:            r3p1
BogoMIPS:            50.00
NUMA node0 CPU(s):   0
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
$

Oracle Linux 8 (Oracle-Linux-8.3-aarch64-2021.05.12-0) でdnf updateした後の場合

$ sudo lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per cluster: 1
Socket(s):           1
Cluster(s):          1
NUMA node(s):        1
Vendor ID:           ARM
BIOS Vendor ID:      QEMU
Model:               1
Model name:          Neoverse-N1
BIOS Model name:     virt-4.2
Stepping:            r3p1
BogoMIPS:            50.00
NUMA node0 CPU(s):   0
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
$

Oracle Linux 8で4CPU/24GBにした場合

$ sudo lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per cluster: 4
Socket(s):           1
Cluster(s):          1
NUMA node(s):        1
Vendor ID:           ARM
BIOS Vendor ID:      QEMU
Model:               1
Model name:          Neoverse-N1
BIOS Model name:     virt-4.2
Stepping:            r3p1
BogoMIPS:            50.00
NUMA node0 CPU(s):   0-3
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
$

Ubuntu 20.04の場合

$ sudo lscpu
Architecture:                    aarch64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
CPU(s):                          1
On-line CPU(s) list:             0
Thread(s) per core:              1
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       ARM
Model:                           1
Model name:                      Neoverse-N1
Stepping:                        r3p1
BogoMIPS:                        50.00
NUMA node0 CPU(s):               0
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled v
                                 ia prctl
Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
Vulnerability Spectre v2:        Not affected
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fp asimd evtstrm aes pmull sha1 sha2 crc32 atom
                                 ics fphp asimdhp cpuid asimdrdm lrcpc dcpop asi
                                 mddp ssbs
$