はじめに
前提条件
- Ubuntu をコンピュータにインストールして初期設定を行ってある事
- ポート番号、IP アドレス、ドメイン等の基本的な用語を理解している事
注意事項
この記事は Linux 初心者がサーバーを構築しただけの内容であり、この通りにすればセキュリティが確保されるというものではありません。
著者自身、サーバー周りについては初心者であるため正しい情報を提供できているとは限りません。
この記事の内容を実践する際は必ず1つずつ調べてから実行して下さい。
環境
- Ubuntu 24.04 LTS
SSH(Secure Shell)の有効化
SSH(Secure Shell)とは
SSHとは、Secure Shell(セキュアシェル)の略称で、リモートコンピュータと通信するためのプロトコルです。
用語集|SSH(エスエスエイチ)
認証部分を含めネットワーク上の通信がすべて暗号化されるため、安全に通信することができます。
やった事
# 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)を用いたファイアウォールの有効化
UFW(Uncomplicated Firewall)とは
ufw(Uncomplicated FireWall)は、Ubuntuで標準的に利用できる、「iptablesを簡単に設定するツール」です。ufwを利用することで、「外部からの接続は基本的に受け付けない」「sshだけは許す」などといった設定を、iptablesにくらべて格段に少ない操作で実現できます。
Ubuntuのソフトウェアファイアウォール:UFWの利用(1)
やった事
# UFW を有効化
sudo ufw enable
# UFW を正常に有効化できたか確認
sudo ufw status verbose
# 自分の PC のみが SSH にアクセス出来るように設定
sudo ufw allow from {自分の PC の IP アドレス} to any port 22 # SSH のデフォルトのポート番号は 22
SS(Socket Statistics)を用いたポートの最適化
SS(Socket Statistics)とは
ss は socket statistics の略で、netstatに替わる Linux標準のネットワークの状態確認コマンドです。初期はバグが多いと話題になっていたようですが、現状では netstat と大きな違いはありません。
linux【ss/netstat】コマンドの見方/オプション~Recv-Q/Send-Qやポート確認(Listen/Estab/Unconn),プロセス表示等~
やった事
# inproute2 をインストール
sudo apt-get install iproute2
#現在開いているポートの一覧を表示(不要なポートは UFW 等で閉じる)
sudo ss -tuln
ModSecurity を用いた WAF の有効化
ModSecurity とは
ModSecurityは、Apache HTTP ServerやNginx、Microsoft IISのモジュールで、Webサーバーのモジュールとしてインストールするホスト型WAFです。ApacheやNginx、IISを運用しているエンジニアにとっては、インストールの手順も難しくありません。無償であるにもかかわらず、ModSecurityはビジネスシーンでも採用されています。ModSecurityの優れた機能や導入のメリットについては以下で解説しますが、Webサーバーにインストールするだけで、Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護してくれる、大変心強い味方であるといえます。
ModSecurityとは?オープンソースWAFのメリット・デメリットを解説
やった事
# 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
SecRuleEngine DetectionOnly を On に変更しています。DetectionOnly は検出(ログの記録)だけ行いブロックはしません。SecResponseBodyAccess は Off に変更しています。CentOS ではデフォルトが Off だっと思いますが Ubuntu では On です。これはその名の通りレスポンスデータもWAF の監査対象とするものですが、例えば SQL 文を説明した記事があるとブロックされる可能性があります。実際の WAF の運用においてもレスポンスデータを監査対象とすることはほとんどのケースでないでしょう。
Ubuntu 22.04 Apache Web サーバー構築 WAF 有効化
その他
参考記事
- 用語集|SSH(エスエスエイチ)
- Ubuntuのソフトウェアファイアウォール:UFWの利用(1)
- linux【ss/netstat】コマンドの見方/オプション~Recv-Q/Send-Qやポート確認(Listen/Estab/Unconn),プロセス表示等~
- ModSecurityとは?オープンソースWAFのメリット・デメリットを解説
- Ubuntu 22.04 Apache Web サーバー構築 WAF 有効化