🐉

AWS EC2でKali Linuxを立ち上げてRDP接続する方法

2025/01/23に公開

はじめに

Hack the Box というペネトレーションテストを競技化したコンテンツにハマり数ヶ月が経ち、ローカルの環境を問わず同じ Kali の環境にアクセスできるようにしたいと思い立ちました。

本記事では AWS の EC2 に Kali Linux のインスタンスを作成し RDP 接続する方法を簡単に紹介します。

ローカル環境

  • M4 macbook pro

EC2

インスタンスの作成

具体的な手順は既に記事が豊富にあるので省略します。以下に挙げる記事を参考にしてください。
https://dev.classmethod.jp/articles/craete-to-kali-linux-ec2/

セキュリティグループの作成

Kali に RDP 接続をするためのポートを開放します。

まずは左ペインから「セキュリティグループ」をクリックして右上の「セキュリティグループを作成」をクリックします。

次に「基本的な詳細」に必要事項を入力してインバウンドルールに任意のポート番号を設定してください。

今回使用する RDP ツールのポート番号はデフォルトでは 3389 ですが、この番号を開放していると外部の第三者が RDP 接続を試みる可能性があるのでデフォルト値以外にしましょう。 

続いて先に作成したインスタンスの概要画面の右上から「セキュリティグループを変更」をクリックしてセキュリティグループを追加してください。

Kali のセッティング

大体の手順は公式ドキュメント通りですがここでも簡単に説明しておきます。作成した Kali のインスタンスに SSH アクセスして以下の手順に従ってください。

kali ユーザのパスワードを設定します。

kali@kali ~
$ echo kali:kali | sudo chpasswd

Kali の基本的なツールをインストール(環境次第ですが 10 分程度かかります)。

kali@kali ~
$ sudo apt install kali-linux-default

xrdp をインストールします。

kali@kali ~
$ sudo apt-get install -y kali-desktop-xfce xorg xrdp

xrdp のポート番号をインスタンスに追加したセキュリティグループで設定したものにします。

kali@kali ~
$ sed -i 's/port=3389/port=11111/g' /etc/xrdp/xrdp.ini

xrdp が自動で起動するようにしておきます。

kali@kali ~
$ sudo systemctl enable xrdp --now

最後にクリップボード共有のためのツールもインストールしておきます。

kali@kali ~
$ sudo apt install spice-vdagent

以上の手順が完了したら念の為再起動しておきましょう。

kali@kali ~
$ sudo reboot

RDP クライアントのセットアップ

続いてローカル環境に RDP クライアントをインストールします。macbook で利用できる RDP クライアントにはWindows Appなどが挙げられますが、今回は CLI で操作できるFreeRDPを利用します。

FreeRDP をインストールします。

local@macbook
$ brew install freerdp

環境変数を設定します。

local@macbook
$ export DISPLAY=:0

以上の手順が完了したら以下のコマンドで RDP にアクセスできます。その際クリップボード共有や軽量化のためのオプションも付けています。

local@macbook
$ xfreerdp /u:kali /p:PASSWORD /v:KALI_INSTANCE_IP:PORT_NUMBER /cert:ignore /auto-reconnect-max-retries:0 +clipboard /size:1920x1080 /bpp:16 /printer:off /compression-level:2 /network:modem

エイリアスの作成

以上で RDP 接続のための設定はすべて完了しました。ただ起動のたびに長いコマンドを打つのは面倒なので以上の手順をエイリアスにまとめておきます。

ローカルの ~/.zshrc に以下のコードを追記してください。

export DISPLAY=:0

alias kalistart='aws ec2 start-instances --instance-ids INSTANCE_ID'
alias kalirdp='IP=$(aws ec2 describe-instances --instance-ids INSTANCE_ID --query "Reservations[*].Instances[*].PublicIpAddress" --output text) && xfreerdp /u:kali /p:PASSWORD /v:$IP:PORT_NUMBER /cert:ignore /auto-reconnect-max-retries:0 +clipboard /size:1920x1080 /bpp:16 /printer:off /compression-level:2 /network:modem'
alias kaliaccess='IP=$(aws ec2 describe-instances --instance-ids INSTANCE_ID --query "Reservations[*].Instances[*].PublicIpAddress" --output text) && ssh -tt -i ~/kali_key.pem kali@$IP'
alias kalistop='aws ec2 stop-instances --instance-ids INSTANCE_ID'
alias kalistatus='aws ec2 describe-instances --instance-ids INSTANCE_ID'

各エイリアスの簡単な説明は以下のとおりです。

エイリアス 説明
kalistart インスタンスの起動
kalirdp インスタンスに RDP 接続
kaliaccess インスタンスに SSH 接続
kalistop インスタンスを停止
kalistatus インスタンスのステータスを表示

EC2 のインスタンスはデフォルト設定では起動のたびにパブリック IP アドレスが変化しますが、ElasticIPを利用すれば IP アドレスを固定できるので上のエイリアスももう少し簡潔にすることができます。
https://qiita.com/miyuki_samitani/items/d9aa05ca8f72a013ce57

インスタンスを使わないときは停止しておくことを忘れずに!

Discussion