0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

アクセスの多いIPアドレスはどいつだ!?

Last updated at Posted at 2023-09-06

アクセス数の多いIPアドレスを解析してアタッカーを遮断

fail2banやAWSのWAFなど攻撃者を遮断できるツールはあるが学習がてら手動で行う方法を試してみた。

環境

・Docker version 24.0.2
・CentOS Linux release 7.9.2009 (Core)
・Apache/2.4.6

参考

sad servers
awkガナス 第3回 同じ行がいくつあるかカウントする(awk+sort+uniq)

下準備

Apache

yum -y install httpd
systemctl start httpd
systemctl status httpd

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-09-06 14:32:18 UTC; 6min ago

###省略###

firewall

yum install firewalld
firewall-cmd --state

running

httpのポートに穴を開けておく

firewall-cmd --add-service=http --permanent
firewall-cmd --reload
firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

実践

sad servers
"Saskatoon": counting IPs.のアクセスログを参考にlocal環境で解析する。

Apacheであれば

/var/log/httpd/access_log

にアクセスログが溜まっている。

cat /var/log/httpd/access_log

###省略###
172.19.0.1 - - [26/Jul/2023:07:50:03 +0000] "GET /favicon.ico HTTP/1.1" 304 - "http://localhost:10000/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:50:09 +0000] "POST /login HTTP/1.1" 302 354 "http://localhost:10000/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:50:09 +0000] "GET /book HTTP/1.1" 200 53407 "http://localhost:10000/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:50:13 +0000] "GET /book/bulk/ HTTP/1.1" 301 240 "http://localhost:10000/book" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:50:13 +0000] "GET /book/bulk HTTP/1.1" 200 4470 "http://localhost:10000/book" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:50:26 +0000] "GET /book HTTP/1.1" 200 53407 "http://localhost:10000/book/bulk" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:50:33 +0000] "GET /book/create HTTP/1.1" 200 5455 "http://localhost:10000/book" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
172.19.0.1 - - [26/Jul/2023:07:51:25 +0000] "-" 408 - "-" "-"

local環境でしか動かしていないので単一のIPアドレスしか記録されていないが、実際に動いているサイトでは様々なIPアドレスからアクセスがされている。

・IPアドレスだけ抜き出す
awkの使いかた

awk '{print $1}' /var/log/httpd/access_log

172.19.0.2
172.19.0.2
172.19.0.3
172.19.0.3
172.19.0.3
172.19.0.3
172.19.0.1
172.19.0.1
172.19.0.1
###省略###

※今回は検証のためにIPアドレスを編集してあります

・ソートする
sortコマンド

awk '{print $1}' /var/log/httpd/access_log | sort

###省略###
172.19.0.1
172.19.0.1
172.19.0.1
172.19.0.1
172.19.0.2
172.19.0.2
172.19.0.3
172.19.0.3
172.19.0.3
172.19.0.3

昇順に並び変わりました。

・重複をまとめてカウントする
uniq コマンドのオプション

awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c
     19 172.19.0.1
      2 172.19.0.2
      4 172.19.0.3

172.19.0.1が19回アクセスで最も多いことがわかりました。
ただ行数が多いと一番多いIPアドレスを探すのが大変なので、もう一度ソートして見やすくします。

・昇順で並び替え

awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -n
      2 172.19.0.2
      4 172.19.0.3
     19 172.19.0.1

これで一番多くアクセスしたIPアドレスがわかりやすくなりました。
もし数値が現実的な数値ではない場合、アタックに使われているIPアドレスだと判断します。

firewallに設定し、通信を遮断する

現時点でブラウザからアクセスできることを確認したのち

firewall-cmd --zone=drop --add-source=172.19.0.1 --permanent
firewall-cmd --reload
firewall-cmd --get-active-zones
drop
  sources: 172.19.0.1

ブラウザでアクセスすると
image.png

元に戻す場合は

firewall-cmd --zone=drop --remove-source=172.19.0.1 --permanent
firewall-cmd --reload
firewall-cmd --get-active-zones

再びアクセスできるようになっています。

以上

※今回はDockerコンテナにてテストしましたが、実際のサーバーで行う際は自身のIPアドレスをfirewallに設定してターミナルを閉じてしまうと2度とアクセスできなくなる可能性がありますので注意!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?