はじめに
この記事では Linux 初心者の自分が Ubuntu でサーバーを構築するときにやったことをメモしています。
使用した Ubuntu のバージョンは Ubuntu 24.04 LTS です。
この記事は以下の状態の方を対象にしています。
- Ubuntu をコンピュータにインストールして初期設定を行ってあること
- ポート番号、IP アドレス、ドメインなどの基本的な用語を理解していること
また注意事項としてはこの記事は Linux 初心者がサーバーを構築しただけの内容なので、この通りにすればセキュリティが確保されるというものではありません。
自分自身、サーバー周りについては初心者であるため正しい情報を提供できているとは限りません。
もし誤った内容があった場合はご指摘いただけるとうれしいです。
SSH の有効化
まずは SSH(Secure Shell)の有効化です。
SSH はネットワークを通じて安全に別のコンピュータに接続し、操作するためのプロトコルです。
リモートコンピュータの操作はコマンドで行い、ネットワーク上の通信は全て暗号化されています。
SSH を有効化した後、自分は Tera Term を使って別のコンピュータからサーバーを操作していました。
# Open SSH Server をインストール
sudo apt install openssh-server
# SSH を起動
sudo systemctl start ssh
# SSH を正常に起動できたか確認
sudo systemctl status ssh
#システム起動時に SSH を自動で起動するように設定
sudo systemctl enable ssh
# RSA 暗号を用いた SSH キーを生成
ssh-keygen -t rsa -b 4096 -C {任意のメールアドレス}
#生成した SSH キーを確認
cat ~/.ssh/id_rsa #秘密鍵
cat ~/.ssh/id_rsa.pub #公開鍵
ファイアウォールの有効化
次は UFW(Uncomplicated Firewall)というものを使ってファイアウォールを有効化しました。
Linux でファイアウォールを有効化する、つまり特定のポートを開閉したり、特定の IP アドレスを許可 or 拒否したりするには iptables というものを使用することもできますが、少し難しそうだったのでより簡単にファイアウォールを設定できる UFW を使用しました。
# UFW を有効化
sudo ufw enable
# UFW を正常に有効化できたか確認
sudo ufw status verbose
# 自分の PC のみが SSH にアクセスできるように設定
#(SSH のデフォルトのポート番号は 22)
sudo ufw allow from {自分の PC の IP アドレス} to any port 22
ポートの最適化
次は SS(Socket Statistics)を使用してポートの最適化を行いました。
SS は Linux でネットワーク接続の状態を確認するためのコマンドです。
# inproute2 をインストール
sudo apt-get install iproute2
#現在開いているポートの一覧を表示(不要なポートは UFW などを使って閉じる)
sudo ss -tuln
ModSecurity を使った WAF の有効化
次は ModSecurity というものを使って WAF を有効化しました。
ModSecurity は Apache や Nginx、IIS などの Web サーバーに組み込んで使うセキュリティモジュールで、悪意あるリクエストを検出してブロックできます。
# apache2 をインストール
sudo apt install apache2
# ModSecurity をインストール
sudo apt install libapache2-mod-security2
#「etc/modsecurity」にある modsecurity.conf-recommended を「etc/modsecurity」にある modsecurity.conf にコピペして上書きする
#(modsecurity.conf 無い場合は新たに作成する)
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
#「etc/modsecurity」にある modsecurity.conf を編集して SecRuleEngine DetectionOnly を On に、SecResponseBodyAccess を Off に変更する
sudo nano /etc/modsecurity/modsecurity.conf
#「sudo systemctl status apache2」で apache2 の動作が確認できない場合は apache2 を起動する
sudo systemctl start apache2
最後に
参考記事
- 用語集|SSH(エスエスエイチ)
- Ubuntuのソフトウェアファイアウォール:UFWの利用(1)
- linux【ss/netstat】コマンドの見方/オプション~Recv-Q/Send-Qやポート確認(Listen/Estab/Unconn),プロセス表示等~
- ModSecurityとは?オープンソースWAFのメリット・デメリットを解説
- Ubuntu 22.04 Apache Web サーバー構築 WAF 有効化