初心者が立てたAWS lightsailサーバにアタック食らった話

ただの備忘録（見づらいので後々整える予定。。）

---
結論
-
Apacheのhttpd.conf内のCONNECTにアク禁対策しました！
＜Directory＞に＜Limit＞を書き込む対策です。

事の発端
-
10日前からちょいちょいサイトが落ちる
ターミナルが起動できない落ち方してる
よくわからないまま、lightsail画面からサーバ再起動で復旧
半日でまたサイトが落ちる。。

原因究明
--
ターミナルからPHP-FPMとApacheの再起動をかける
```
sudo /opt/bitnami/ctlscript.sh restart php-fpm
sudo /opt/bitnami/ctlscript.sh restart apache
```
まずは自分のサイトがどうなってるか見る
```
curl localhost
```
Apacheのログを見る
```
cat /opt/bitnami/apache2/logs/access_log
```
色んなアクセス状況が見れたが、その中でCONNECTというところにやたらアクセスがあるよう。
めちゃくちゃ404-504が出てる
こんな感じで毎秒ごと。10日間くらいログが。。。
```
95.216.102.134 - - [09/May/2023:13:56:19 +0000] "CONNECT 65.109.55.8:20053 HTTP/1.1" 404 44183
95.216.102.134 - - [09/May/2023:13:56:19 +0000] "CONNECT 65.109.55.8:20053 HTTP/1.1" 404 44183
95.216.102.134 - - [09/May/2023:13:56:39 +0000] "CONNECT 65.109.55.8:20053 HTTP/1.1" 404 44183
95.216.102.134 - - [09/May/2023:13:56:38 +0000] "CONNECT 65.109.55.8:20053 HTTP/1.1" 404 44183
95.216.102.134 - - [09/May/2023:13:56:39 +0000] "CONNECT 65.109.55.8:20053 HTTP/1.1" 404 44183
95.216.102.134 - - [09/May/2023:14:44:37 +0000] "CONNECT 88.198.48.45:80 HTTP/1.1" 404 44089
95.216.102.134 - - [09/May/2023:14:44:39 +0000] "CONNECT 88.198.48.45:80 HTTP/1.1" 404 56525
```
めちゃくちゃ長いので200で絞り込む。
```
cat /opt/bitnami/apache2/logs/access_log | grep -i connect | cat -n | head -200
```
ここでアタック食らってるのでは？？と仮説を立てる
私のサーバのCONNECTというところを狙っている。。
［95.216.102.134］とかいう奴がCONNECT経由で他のサイト（真ん中のIPアドレス）にアタックしている模様。
ということは、CONNECTにアクセスできないようにすれば良い！？

chatGPTくんに聞いてみる
--
>95.216.102.134 - - [09/May/2023:14:44:37 +0000] "CONNECT 88.198.48.45:80 HTTP/1.1" 404 44089
このように私のサイトがアタックを受けているようです。
CONNECTを使わせないようにしたい。
>>おっしゃる通り、"CONNECT"メソッドはプロキシサーバを介して別のサーバに接続するために使用されることがあります。もし、特定のIPアドレスからの"CONNECT"リクエストによる攻撃を防止したい場合、いくつかの方法があります。

>>①ファイアウォールの設定: ファイアウォールを使用して、特定のIPアドレスからの"CONNECT"リクエストをブロックすることができます。ファイアウォールの設定やルールを見直し、不正なリクエストをフィルタリングするように設定してください。

>>②Webサーバの設定: Webサーバ（例: Apache、Nginx）の設定で、"CONNECT"メソッドを許可しないようにできます。具体的な手順はサーバの種類によって異なりますが、一般的には設定ファイル（例: httpd.conf、nginx.conf）内で適切なディレクティブを変更します。

>>③プロキシサーバの設定: もし、プロキシサーバを使用している場合、プロキシサーバの設定を見直して"CONNECT"メソッドを制限することができます。プロキシサーバの設定は、使用しているプロキシサーバの種類やバージョンによって異なります。
IPアドレスのブロック: 特定のIPアドレスからの接続をブロックするために、ネットワークレベルでIPアドレスをブロックすることもできます。これには、ファイアウォールやネットワーク機器（例: ルーター、ロードバランサー）の設定を使用します。

>>ただし、注意点として、正当なアクセスがブロックされないように慎重に設定する必要があります。誤った設定や誤ったIPアドレスのブロックは、正規のユーザーに対して問題を引き起こす可能性があるためです。したがって、設定変更を行う前に、注意深く検討し、必要なテストと監視を行うことをお勧めします。

なるほど、私でもできそうな『②Webサーバの設定』を変更することに。

chatGPTくんの対策案
--
>Apacheの設定ファイルであるhttpd.confを使用して、CONNECTメソッドを防止するには、以下の手順に従うことができます。
httpd.confファイルを開きます。
httpd.confファイル内で、<Directory>ディレクティブまたは<Location>ディレクティブを使用して、該当するディレクトリまたは場所を特定します。一般的には、<Directory>ディレクティブが使用されます。
```
例:
<Directory /var/www/html>
```
>該当のディレクティブ内に、<Limit>ディレクティブを追加します。
```
例:
<Directory /var/www/html>
    <Limit CONNECT>
        Deny from all
    </Limit>
</Directory>
```
>Deny from allを使用して、すべてのアクセスを拒否するように設定します。
保存してhttpd.confファイルを閉じます。
Apacheサーバを再起動します。
これにより、httpd.confファイルで指定されたディレクトリまたは場所へのCONNECTメソッドのアクセスが拒否されます。ただし、正当な使用ケースでの制限も考慮する必要があります。必要に応じて、適切なアクセス制御を実装してください。

対策実行！
--
上記を元にhttpd.confファイルに記述する。
まずは現状のhttpd.confを見てみる。
```
cat /opt/bitnami/apache2/conf/httpd.conf
```
↑ /Dir でググって対応範囲を確認、n で次の検索へ。
vi で記述モード
```
vi /opt/bitnami/apache2/conf/httpd.conf
```
o で改行し、Deny from allのソースコードを貼り付け。escボタンで編集解除。
該当部分に記述したら、再起動コマンド
```
sudo /opt/bitnami/ctlscript.sh restart php-fpm
sudo /opt/bitnami/ctlscript.sh restart apache
```

まとめ
--
これで今のところサイト落ちてないので、一旦様子見！
chatGPTくんと会社の先輩に教えを請いながらなんとか出来ました…！！
これはインフラわからぬ開発初心者には難しいと感じる対応でした、、落ちた原因にあたりを付けてlogを見るまでいかないので…（すぐ再起動ボタン押しちゃう💦）
今後はもっとロジカルな動きができるよう身につけたくQiitaに残しました。

長々と見てくださってありがとうございます！
開発初心者ですが、これからも負けずに自サイトをカスタム頑張っていきます！


その後
--
半日経ってlogをもう一度確認したところ、アタックが来ていました。
以下実際のlog抜粋▼
```
 1466095.216.102.134 - - [10/May/2023:22:00:26 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466195.216.102.134 - - [10/May/2023:22:00:26 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466295.216.102.134 - - [10/May/2023:22:00:26 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466395.216.102.134 - - [10/May/2023:22:00:26 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466495.216.102.134 - - [10/May/2023:22:00:26 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466595.216.102.134 - - [10/May/2023:22:00:27 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466695.216.102.134 - - [10/May/2023:22:00:27 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466795.216.102.134 - - [10/May/2023:22:00:27 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
 1466895.216.102.134 - - [10/May/2023:22:00:27 +0000] "CONNECT 51.210.99.80:40720 HTTP/1.1" 403 199
```
アタックは来ているのですが、403を返してくれているのでちゃんと弾いてくれていました！
更に、時間とアタック回数で絞って見てみる
```
コマンド>>
cat /opt/bitnami/apache2/logs/access_log | grep -i connect | awk '{print substr(
$4, 0, 16)":00"}' | sort | uniq -c | sed -e "s/:/ /"

log>>
    104 [09/May/2023 13:00
      7 [09/May/2023 14:00
    923 [09/May/2023 16:00
    163 [09/May/2023 17:00
     31 [09/May/2023 18:00
     69 [09/May/2023 19:00
    116 [09/May/2023 20:00
      7 [09/May/2023 21:00
   4232 [10/May/2023 15:00
   2182 [10/May/2023 16:00
   2019 [10/May/2023 17:00
    105 [10/May/2023 18:00
   2703 [10/May/2023 19:00
    172 [10/May/2023 20:00
   1674 [10/May/2023 21:00
     71 [10/May/2023 22:00
```
5/9 
13時にサーバ落とされたのが発覚（104件でダウンしたみたい）
15時頃に対策完了
16時から再度アタックされる、弾き返してるからリクエスト数多い
5/10
再びすごい量アタックされてるが、ダウンしないのでただ量が多いだけでざまぁ！

いやでも、log見るとこれだけ来てたのかってちょっと怖いですが、本当に対策打てて良かった。。！
（何も知らなかったら容量増やすことしか考えなかったので、その分アタック食らって落とされる堂々巡りだったかも。。無知は怖い:confounded: