ConoHa の VPS を IPv6 対応させる

ConoHa Enterprise Linux 9
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

ConoHa の VPS に Red Hat Enterprise Linux 9 をインストールして、ウェブサーバーやメールサーバーの構築をしてきました。

ConoHa の VPS で MTA-STS を設定する
前回まで ConoHa の VPS に RHEL9 をインストールし、そこにメールサーバーを構築しました。今回はその環境に MTA-STS ポリシーを設定していこうと思います。MTA-STS(Mail Transfer Agent-Stri...

今回はこのサーバーを IPv6 に対応させていきます。

ConoHa VPS

ネットワークインターフェイス(eth0)の設定変更

ConoHa の公式サイトに手順が載っていますので、その通り進めます。

IPv6をVPSへ設定する|ConoHa VPSサポート
ConoHa VPSのご利用ガイド、よくある質問などの各種サポート情報をご案内しています。ConoHa VPSは便利なご利用ガイドと専任スタッフのサポートで安心してご利用いただけます。

IPv6 の複数アドレスに関しては必要性を感じなかったので、セカンダリーは設定しませんでした。

IPV6_AUTOCONF="no" #yesをnoへ変更

#下記を追記
IPV6ADDR=IPv6アドレス
IPV6_DEFAULTGW=コントロールパネルで確認できる「ゲートウェイ」のアドレス
IPV6FORWARDING=yes

ネットワークマネージャーをリスタートして反映させます。

systemctl restart NetworkManager

DNS の編集

ConoHa の管理画面から DNS を開き、AAAA レコードを 2 つ追加します。

AAAA レコード(追加)

ドメインのレコードを設定する。

  • タイプ:AAAA
  • 名称:@
  • 値:IPv6 アドレス

サブドメインに対してワイルドカードでレコードを設定する。

  • タイプ:AAAA
  • 名称:*
  • 値:IPv6 アドレス

SPF レコード(修正)

既存の SPF レコードに対して、IPv6 アドレスも追加する。

  • タイプ:TXT
  • 名称:@
  • 値:v=spf1 +ip4:(IPv4 アドレス) +ip6:(IPv6 アドレス) -all

PTR レコード

続いて、逆引きホスト名の設定も入れていきます。

ConoHa 管理画面からサーバーを表示し、IPv6 の PTR レコードを編集します。

サーバーに割り振った IPv6 アドレスの逆引きホスト名を指定して保存します。

ファイアウォールの設定

以前設定した nftables をベースに設定を変更していきます。

Red Hat Enterprise Linux 9 のファイアウォール(nftables)設定
ここまで ConoHa の VPS に RHEL9 をインストールする方法と、初期設定の解説をしてきました。今回はサーバー構築において、最も大事な部分であるファイアウォールの設定をしていきます。ファイアウォールの設定方針以前までは fire...

nftables の設定ファイルで、ip protocol(IPv4 のルール)に対応した ip6 nexthdr(IPv6 のルール)を追加していきます。

# 現在のルールセットを消去
flush ruleset

# 管理者用IPアドレスリストを読み込む
include "/etc/nftables/list/admin"
# 日本国内IPアドレスリストを読み込む
include "/etc/nftables/list/domestic"

# IPv4 & IPv6
table inet filter {

        set admin {
                type ipv4_addr
                elements = $admin
        }

        set domestic {
                type ipv4_addr
                flags interval
                elements = $domestic
        }

        chain input {
                type filter hook input priority 0; policy drop;

                # Ping floods
                ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept
                ip protocol icmp icmp type echo-request limit rate 10/second accept

                # 関連・確立済みトラフィックは許可する
                ct state established,related accept

                # 不正なトラフィックは全て破棄する
                ct state invalid drop

                # ループバックインターフェイスのトラフィックは全て許可する
                iif lo accept

                # Neighbor Discovery を許可する
                ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept

                # 新しいエコー要求 (ping) は許可する
                ip6 nexthdr icmpv6 icmpv6 type echo-request ct state new accept
                ip protocol icmp icmp type echo-request ct state new accept

                ip6 nexthdr udp ct state new jump UDP
                ip protocol udp ct state new jump UDP
                #ip6 nexthdr tcp tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP
                #ip protocol tcp tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP
                meta l4proto tcp tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP

                # 他のルールによって処理されなかったトラフィックは全て拒否する
                ip6 nexthdr udp reject
                ip protocol udp reject
                ip6 nexthdr tcp reject with tcp reset
                ip protocol tcp reject with tcp reset
        }

        chain forward {
                type filter hook forward priority 0; policy drop;
        }

        chain output {
                type filter hook output priority 0; policy accept;
        }

        chain TCP {
                # 管理者にのみ解放
                # ssh, OLS 管理画面
                tcp dport { 22, 7080 } ip saddr @admin accept

                # 日本国内にのみ開放
                # SMTPS, IMAPS
                tcp dport { 465, 993 } ip saddr @domestic accept

                # 全開放
                # SMTP, HTTP, HTTPS
                tcp dport { 25, 80, 443 } accept
        }

        chain UDP {
                # 全開放
                # http/3
                udp dport { 443 } accept
        }

}

参考サイトにしっかり書いてあったのですが、Neighbour Discovery を許可する設定を入れないと IPv6 が切断されてしまう現象でハマりましたのでご注意ください。

※上記の設定だと MUA(Thunderbird など)が IPv4 で日本国内からしか到達できない状態ですが、アクセスする環境が IPv6 に対応していないため割り切って使っています。必ず自分の環境にあった設定を確認してください。

nftables wiki

nftables を再起動して反映します。

systemctl restart nftables

IPv6 を有効にするサービスの設定

OpenLiteSpeed

リスナーの追加

OLS の管理画面から「リスナー」を開き、新しいリスナーを追加します。

  • リスナー名:(任意)
  • IP アドレス:[ANY] IPv6
  • ポート:443
  • セキュア:はい

バーチャルホストマップの割り当て

作成したリスナーにバーチャルホストマップを割り当てます。

プルダウンから設定済みのバーチャルホストを選択し、ドメインと紐づけます。

SSL の設定

作成したリスナーの「SSL」のタブを開き、SSL の設定を追加します。

  • 秘密鍵ファイル:Let's Encrypt で取得した privkey.pem へのパス
  • 証明書ファイル:Let's Encrypt で取得した fullchain.pem へのパス
  • 証明書チェーン:はい
  • プロトコルバージョン:TLS v1.2、TLS v1.3
  • SSL再交渉保護:はい
  • ALPN:SPDY/3、HTTP/2、HTTP/3
  • Open HTTP3/QUIC (UDP) Port:はい

設定を保存したら、OLS を再起動しましょう。

Postfix

Postfix の設定で inet_protocols に all が指定されていれば、IPv4 と IPv6 両方が有効になっています。

postconf | grep ^inet_protocols
(out) inet_protocols = all
(out) smtp_address_preference = any

inet_protocols が ipv4 の場合は /etc/postfix/main.cf を修正して、Postfix を再起動します。

smtp_address_preference は、送信先の MX が IPv4 と IPv6 両方に対応している場合どちらを優先するかという設定です。IPv4 を優先したいときは smtp_address_preference = ipv4 を指定します。

Dovecot

Dovecot の設定で listen に「*, ::」が指定されていれば、IPv4 と IPv6 両方が有効になっています。

doveconf | grep ^listen
(out) listen = *, ::

listen が「*」の場合は /etc/dovecot/local.conf(もしくは /etc/dovecot/dovecot.conf)を修正して、Dovecot を再起動します。

確認

ウェブサーバーと、メールサーバーが正しく設定されているかチェックしておきましょう。

Test for modern Internet Standards like IPv6, DNSSEC, HTTPS, DMARC, STARTTLS and DANE.
Test for modern Internet Standards IPv6, DNSSEC, HTTPS, HSTS, DMARC, DKIM, SPF, STARTTLS, DANE, RPKI and security.txt

追記

WordPress の LiteSpeed Cache プラグインで QUIC.cloud と連携して画像を WebP に置換していましたが、最適化要求(Gather Image Data)で画像を渡すことはできても、画像を引き戻す(Pull Images)際に受け取れない状況になってしまっていました。

OpenLiteSpeed で /wp-admin に対して IP アドレスで制限をかけていたのですが、自サーバーの IPv6 アドレスを許可リストに追加することで解決しました。

ConoHa VPS

コメント

タイトルとURLをコピーしました