はじめに
apacheやvsftpdのログをgrepして、特定のIPからの通信が発生しているか確かめたい。
grep -wF <IP> logfile
が鉄則。
準備
ログのサンプルとして、以下を用意。apacheの/var/log/httpd/access_log
を一部改変。
access_log
123.123.123.123 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
123.123.123.111 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
123.123.123.1 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
特定IPからの通信をgrep
-
123.123.123.123
からの通信をgrep -
-w
:単語単位で検索 が重要。-
-w
をつけ忘れると、123.123.123.111
とか123.123.123.123
まで引っかかってしまう。
-
-
-F
で正規表現を無効化。- これはつけ忘れてもうまくいってしまうこともある
[ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ grep -wF 123.123.123.1 access_log
123.123.123.1 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
- (参考1) :
-w
をつけ忘れたときの挙動。-
123.123.123.1
をgrepしたつもりが、余計な123.123.123.111
とか123.123.123.123
まで引っかかってしまう。
-
[ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ grep -F 123.123.123.1 access_log
123.123.123.123 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
123.123.123.111 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
123.123.123.1 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
- (参考2) :
-F
をつけ忘れたときの挙動- 実は
-F
をつけていなくてもうまく抽出されている・・・ように見えるが、内部的には
123.123.123.1
→123(任意一文字)123(任意一文字)123(任意一文字)1
と解釈されていることに注意。
-F
もつけておいた方が無難。
- 実は
[ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ grep -w 123.123.123.1 access_log
123.123.123.1 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
(蛇足)調べたいIPが複数ある時
まず、抽出したいIPアドレスのリストを準備する。
ip.list
123.123.123.123
123.123.123.1
①単にfor文で回す
- 簡単だが、ip.listの行数 * access_logの行数で検索するので、ip_listの量が多い時は不向き。
[ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ for i in `cat ip.list`; do grep -wF $i access_log; done
123.123.123.123 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
123.123.123.1 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
②or条件 でgrepする
-
grep -wF -e 123.123.123.123 -e 123.123.123.1 access_log
とする。 - ①よりは負荷が少ない。
- ip.listから
-e 123.123.123.123 -e 123.123.123.1
を生成する方法はいくらでもあるが、無理やりsedでやる場合は以下。-
sed 's/^/-e /g'
で各行頭に-e
をつけてから、tr '\n' ' '
で改行を削る。
-
[ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ cat ip.list | sed 's/^/-e /g' | tr '\n' ' '
-e 123.123.123.123 -e 123.123.123.1 [ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ cat ip.list | sed 's/^/-e /g' | tr '\n' ' ' > param
[ec2-user@ip-xxx-xxx-xxx-xxx log_bk]$ grep -wF `cat param` access_log
123.123.123.123 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
123.123.123.1 - - [24/Feb/2022:10:03:34 +0000] "GET /favicon.ico HTTP/1.1" 404 196 "http://999.999.999.999:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"