TCP サービスを Anti-DDoS Pro または Anti-DDoS Premium で保護するために Anti-DDoS Proxy に追加すると、Anti-DDoS Proxy が着信トラフィックをフィルタリングし、ご利用のオリジンサーバーに転送します。ただし、プロキシがクライアントとご利用のサーバーの間に位置するため、オリジンサーバーでは実際のクライアント IP アドレスではなく、プロキシの IP アドレスが表示されます。送信元 IP アドレスへの可視性を復元するには、オリジンサーバーに TCP Option Address (TOA) カーネルモジュールをインストールしてください。
本トピックでは、Linux ベースのオリジンサーバーについて説明します。インストール方法は 3 種類あり、ご利用のオペレーティングシステムに合った方法を選択してください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
サポート対象の Linux ディストリビューションを実行しているオリジンサーバー
ポートを使用して Anti-DDoS Proxy に追加された TCP ベースの非 Web サービス(UDP ベースのサービスはサポートされていません)
インストールパッケージをダウンロードするための、オリジンサーバーからのインターネットアクセス
root ユーザーでない場合の
sudo権限
Web サービスについては、「リクエストの送信元 IP アドレスを取得する」をご参照ください。
サポート対象のシナリオ
| シナリオ | 説明 |
|---|---|
| Anti-DDoS Proxy — ECS インスタンス | オリジンサーバーが Elastic Compute Service (ECS) インスタンス上にデプロイされています。トラフィックは Anti-DDoS Proxy によってフィルタリングされ、ECS インスタンスに転送されます。 |
| Anti-DDoS Proxy — レイヤー 4 Server Load Balancer (SLB) インスタンス — ECS インスタンス | オリジンサーバーが ECS インスタンス上にデプロイされています。トラフィックは Anti-DDoS Proxy によってフィルタリングされた後、レイヤー 4 SLB インスタンスによって ECS インスタンスに転送されます。 |
| Anti-DDoS Proxy — お客様のデータセンター内のサーバー | オリジンサーバーがお客様のデータセンター内にデプロイされています。トラフィックは Anti-DDoS Proxy によってフィルタリングされ、データセンター内のサーバーに転送されます。 |
インストール方法の選択
まず、本番環境ではない環境でインストールをテストしてください。環境が安定していることを確認したうえで、本番環境に適用してください。
| 方法 | サポート対象のオペレーティングシステム | 使用タイミング |
|---|---|---|
| 方法 1:modprobe を使用して VTOA モジュールをロード | Alibaba Cloud Linux 3 のみ | 最もシンプルな方法。コンパイル不要 |
| 方法 2:ソースコードからコンパイル | CentOS、Ubuntu、Debian およびその他の Linux ディストリビューション | 方法 1 および方法 3 が適用できない場合に使用 |
| 方法 3:RPM Package Manager (RPM) を使用してインストール | Red Hat Linux、CentOS 6.x、CentOS 7.x | RPM ベースのディストリビューションに推奨 |
方法 1:modprobe を使用して VTOA カーネルモジュールをロード
この方法は、Alibaba Cloud Linux 3 のみに適用されます。
(任意)組み込みの TOA カーネルモジュールをバックアップします。再起動時に障害が発生した場合、元のカーネルに戻すことでオペレーティングシステムを復元できます。
VTOA カーネルモジュールをロードします。
modprobe vtoaVTOA モジュールが正しくロードされているかを確認します。
lsmod | grep vtoaVTOA モジュールを起動時に自動的にロードするように設定します。
以下の内容で
/etc/sysconfig/modules/vtoa.modulesを作成します:``bash #!/bin/bash modprobe vtoa > /dev/null 2>&1``ファイルに実行権限を付与します。``
bash sudo chmod +x /etc/sysconfig/modules/vtoa.modules``
方法 2:ソースコードから TOA カーネルモジュールをコンパイルおよびロード
この方法は、CentOS、Ubuntu、Debian を含むほとんどの Linux ディストリビューションで動作します。
(任意)組み込みの TOA カーネルモジュールをバックアップします。再起動時に障害が発生した場合、元のカーネルに戻すことでオペレーティングシステムを復元できます。
TOA ソースコードパッケージ をダウンロードします。このファイルをダウンロードするには、サーバーがインターネットに接続している必要があります。カーネルバージョンに応じて、適切なソースファイルを選択してください。
カーネルバージョン ソースファイル 2.x toa_kernel2.x3.x toa_kernel3.x4.x または 5.x toa_kernel_commonコンパイル環境(gcc、kernel-headers、kernel-devel)をインストールします。
CentOS:``
bash yum install gcc kernel-headers kernel-devel -y``Ubuntu または Debian:``
bash apt-get install gcc linux-headers-$(uname -r) -y``
重要上記コマンドが Debian で失敗した場合は、事前にビルド済みのヘッダーパッケージを手動でダウンロードしてください。次の例では、Debian 11.11(64 ビット)、カーネルバージョン 5.10.0-33-amd64 を使用しています。
Debian_11.11_5.10.0-33-amd64.zip をダウンロードします。
以下の順序でパッケージをインストールします。
sudo dpkg -i linux-headers-5.10.0-33-common_5.10.226-1_all.deb sudo dpkg -i linux-kbuild-5.10_5.10.237-1_amd64.deb sudo dpkg -i linux-compiler-gcc-10-x86_5.10.237-1_amd64.deb sudo dpkg -i linux-headers-5.10.0-33-amd64_5.10.226-1_amd64.deb
TOA カーネルモジュールをコンパイルします。ソースコードパッケージを展開し、該当するフォルダに移動して
makeコマンドを実行します。警告やエラーが表示されなければ、コンパイルは成功です。toa.koファイルが現在のディレクトリに存在することを確認してください。別のサーバーに TOA カーネルモジュールをロードする場合は、
toa.koファイルをそのサーバーにコピーし、残りの手順を実行してください。# カーネルバージョンに一致するフォルダに移動します: # カーネル 2.x:cd toa_kernel2.x/ # カーネル 3.x:cd toa_kernel3.x/ # カーネル 4.x または 5.x:cd toa_kernel_common/ cd toa_kernel3.x/ makeTOA カーネルモジュールをロードします。
mv toa.ko /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko && depmod insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.koTOA モジュールが正しくロードされているかを確認します。
lsmod | grep toaTOA モジュールを起動時に自動的にロードするように設定します。
CentOS:
以下の内容で
/etc/sysconfig/modules/toa.modulesを作成します:``bash #!/bin/bash if [ -e /lib/modules/uname -r/kernel/net/netfilter/ipvs/toa.ko ] ; then insmod /lib/modules/uname -r/kernel/net/netfilter/ipvs/toa.ko > /dev/null 2>&1 fi``ファイルに実行権限を付与します。``
bash sudo chmod +x /etc/sysconfig/modules/toa.modules``
Ubuntu または Debian:
/etc/modules-load.d/toa.confを以下の内容で作成します:``toa``
オペレーティングシステムを再起動します。
sudo reboot
方法 3:RPM を使用して TOA カーネルモジュールをインストール
サポート対象のオペレーティングシステム:
Red Hat Linux
CentOS 6.x
CentOS 7.x
(任意)組み込みの TOA カーネルモジュールをバックアップします。再起動時に障害が発生した場合、元のカーネルに戻すことでオペレーティングシステムを復元できます。
ご利用のオペレーティングシステムに対応するインストールファイルをダウンロードします。このファイルをダウンロードするには、サーバーがインターネットに接続している必要があります。
CentOS 7.x: kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
CentOS 6.x または Red Hat Enterprise Linux(両方のファイルをダウンロード):
TOA カーネルモジュールをインストールします。
CentOS 7.x — ダウンロードしたファイルが格納されているディレクトリに移動し、以下のコマンドを実行します。
sudo yum localinstall kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm説明注意: 依存関係の問題を回避するため、
yum localinstallを使用してください。代わりにsudo rpm -ivh kernel-3.10.0-957.21.3.el7.toa.x86_64.rpmを実行しても構いません。CentOS 6.x または Red Hat Enterprise Linux — ダウンロードしたファイルが格納されているディレクトリに移動し、以下のコマンドを実行します。
sudo rpm -ivh kernel-firmware-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm sudo rpm -ivh kernel-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm説明注意:
kernel-firmware のバージョンがすでに 2.6.32-696.13.2.el6.centos.plus.toa 以降である場合は、2 番目のコマンドのみ実行してください。
依存関係のエラーが発生した場合は、
--nodepsオプションをrpmコマンドに追加してください。インストール済みのカーネルバージョンが TOA モジュールのバージョンより新しい場合は、
--forceオプションを指定して強制的にインストールしてください。
TOA モジュールを起動時に自動的にロードするように設定します。
OS バージョンに応じた内容で
/etc/sysconfig/modules/toa.modulesを作成します。CentOS 7.x:``
bash #!/bin/bash if [ -e /lib/modules/uname -r/kernel/net/toa/toa.ko.xz ] ; then modprobe toa > /dev/null 2>&1 fi``CentOS 6.x または Red Hat Enterprise Linux:``
bash #!/bin/bash if [ -e /lib/modules/uname -r/kernel/net/toa/toa.ko ] ; then modprobe toa > /dev/null 2>&1 fi``
ファイルに実行権限を付与します。``
bash sudo chmod +x /etc/sysconfig/modules/toa.modules``
オペレーティングシステムを再起動します。
reboot
結果の確認
TOA カーネルモジュールをインストールした後、サーバーはリクエストの送信元 IP アドレスを取得できるようになります。
サーバーがリクエストの送信元 IP アドレスを取得できない場合は、以下のコマンドを実行して TOA カーネルモジュールがロードされているかを確認してください。
lsmod | grep toaTOA モジュールがロードされていない場合は、以下のコマンドを実行して手動でロードしてください。
modprobe toaTOA カーネルモジュールがロードされた後は、サーバーのアクセスログを確認して、オリジンサーバーがリクエストの送信元 IP アドレスを取得できていることを検証してください。
TOA カーネルモジュールの管理
TOA カーネルモジュールを一時的に無効化するには:
rmmod toa.koTOA カーネルモジュールをアンインストールするには:
rmmod toaTOA カーネルモジュールが正常にアンインストールされたかを確認します。
dmesgの出力に「TOA unloaded」と表示されれば、正常に削除されています。dmesg -T
よくある質問
TOA カーネルモジュールはネットワークパフォーマンスにどのような影響を与えますか?
TOA モジュールはバイパスモードで実行されるため、ネットワークパフォーマンスへの影響は最小限です。
Linux カーネルをアップグレードした後に送信元 IP アドレスが取得できないのはなぜですか?
カーネルをアップグレードすると、既存の TOA モジュールは新しいカーネルと互換性がなくなります。Linux カーネルをアップグレードするたびに、TOA モジュールを再コンパイルおよび再インストールする必要があります。
次のステップ
リクエストの送信元 IP アドレスを取得する — Anti-DDoS Pro または Anti-DDoS Premium で保護される Web サービス向け