# Nginx web サーバーのセキュリティ

[error] 2988348#2988348: *489243 open() "/usr/share/nginx/html/upl.php" failed (2: No such file or directory), client: ***.***.***.***, server: , request: "GET /upl.php HTTP/1.1", host: "***.***.***.***"

環境

  • Ubuntu 22
  • nginx/1.18.0

# Nginx 設定ファイル

  • ファイル /etc/nginx/nginx.conf
  • http ブロック修正
http {
    # 大量リクエストを制限し、DDoS や悪意のあるスクレイピングを防ぎ
    # 1秒間に5リクエストまで許可
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

    # 不要な情報の非表示
    server_tokens off;

    # ファイルやディレクトリのリスト表示を無効化
    autoindex off;

    # 悪意のあるリクエストをブロック
    if ($query_string ~* "wget|curl|rm|chmod|sh") {
        return 403;
    }
}

# server ブロック修正

server {
    listen 80;
    server_name hapicode.com;
    root /var/www/laravel/public;
    index index.php;

    location / {
        # クロスサイトスクリプティング(XSS)やクリックジャッキングを防ぎ
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";

        # 悪質な User-Agent をブロックï
        if ($http_user_agent ~* (python|curl|wget|scrapy|bot)) {
            return 403;
        }

        # リクエストのパラメータに SELECT や DROP などの SQL キーワードが含まれる場合、ブロック
        if ($query_string ~* "union.*select.*\(") {
            return 403;
        }
        if ($query_string ~* "drop.*table") {
            return 403;
        }
    }

    # 攻撃者が .php や .sh を実行禁止
    location ~* \.(php|sh|exe|cgi|pl|py)$ {
        deny all;
    }

    # .htaccess .env .git などの機密ファイルへのアクセスを禁止
    location ~ /\.(?!well-known).* {
        deny all;
        access_log off;
        log_not_found off;
    }
}

# 監視ツールを導入

access.log を監視して自動でアラート表示、通知、遮断したりするツールを導入検討

ツール 機能 メリット 向いている用途
GoAccess リアルタイム監視 & 可視化 Web UI で確認可能 高速なログ解析
Logwatch 定期レポート生成 メールでレポート送信 1 日 1 回の確認
Fail2Ban 不正 IP 自動ブロック 攻撃者の IP を遮断 セキュリティ強化
Swatch リアルタイムアラート すぐに通知が来る 怪しいアクセス即対応
2025-02-05
  • server

関連記事

Laravel Address already in use の原因
AWS EC2 の amazon-linux-extras の話
AWS CloudWatch ログ監視で Lambda 処理
デプロイツール Capistrano
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
Shell と Bash のいろいろ
AWS SES メール開封確認  DB に集計
crontab 設定いろいろ
Centos7 Webserver 構築の時のメモ
DDNS 無料ダイナミック DNS サービス 4 つ
content-security-policy 設定
ディスク容量を確認する df コマンド
Docker command でドッカー練習する時のメモ
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Docker Supervisor 使ってバッチ処理
Windows10 Home に Docker 入れた時のメモ
Docker の基本的な使い方
ジェネレーティブ AI と大規模言語モデル(LLM)を学ぶためのリソース
Windows Mac Linux hosts ファイル場所
VPS サーバーのセキュリティー fail2ban
メールサーバー移行と POP & IMAP 設定
自宅サーバー構築!  Nextcloud で NAS クラウドストレージ
robots.txt の書き方
Nginx 基本設定
SPF メール送信なりすまし対策
積水ハウス 個人情報流出 SQL インジェクション攻撃か
5 分で VPN サーバー立てる! wg-easy の使い方
xserver に nodejs インストール
よく使う WSL コマンド
Vim 操作とショートカット
解決! xserver php バージョンアップした時に ssh 環境に反映されない
XZ Utils 事件対応
xserver に vim インストール
Ubuntu で Web サーバーを構築する手順
Mac ターミナル SSH 接続設定
レンタルサーバーなら xserver おすすめ理由
ZeroSSL で無料 SSL できるけど Let's Encrypt と比較
oh my zsh 使うべし
youtube 見れるように vpn サーバー建ててみた
no such file or directory: /usr/share/zsh/vendor-completions/_docker