이 명령 체인을 더 짧게 또는 더 좋게 만드는 방법이 있습니까?

이 명령 체인을 더 짧게 또는 더 좋게 만드는 방법이 있습니까?

저는 이 명령 체인을 사용하여 봇/크롤러 트래픽을 필터링하고 IP 주소를 금지합니다. 이 명령 체계를 보다 효율적으로 만들 수 있는 방법이 있습니까?

sudo awk -F' - |\\"' '{print $1, $7}' access.log | 
grep -i -E 'bot|crawler' | 
grep -i -v -E 'google|yahoo|bing|msn|ask|aol|duckduckgo' | 
awk '{system("sudo ufw deny from "$1" to any")}'

다음은 제가 분석 중인 샘플 로그 파일입니다. 기본 apache2 access.log

173.239.53.9 - - [09/Oct/2019:01:52:39 +0000] "GET /robots.txt HTTP/1.1" 200 3955 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FSL 7.0.6.01001)"
46.229.168.143 - - [09/Oct/2019:01:54:56 +0000] "GET /robots.txt HTTP/1.1" 200 4084 "-" "Mozilla/5.0 (compatible; SemrushBot/6~bl; +http://www.semrush.com/bot.html)"
157.55.39.20 - - [09/Oct/2019:01:56:10 +0000] "GET /robots.txt HTTP/1.1" 200 3918 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
65.132.59.34 - - [09/Oct/2019:01:56:53 +0000] "GET /robots.txt HTTP/1.1" 200 4150 "-" "Gigabot (1.1 1.2)"
198.204.244.90 - - [09/Oct/2019:01:58:23 +0000] "GET /robots.txt HTTP/1.1" 200 4480 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
192.151.157.210 - - [09/Oct/2019:02:03:41 +0000] "GET /robots.txt HTTP/1.1" 200 4480 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
93.158.161.112 - - [09/Oct/2019:02:09:35 +0000] "GET /neighborhood/ballard/robots.txt HTTP/1.1" 404 31379 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
203.133.169.54 - - [09/Oct/2019:02:09:43 +0000] "GET /robots.txt HTTP/1.1" 200 4281 "-" "Mozilla/5.0 (compatible; Daum/4.1; +http://cs.daum.net/faq/15/4118.html?faqId=28966)"

감사해요

답변1

단일 awk명령을 사용하십시오.

awk -F' - |\"' 'tolower($7) ~ /bot|crawler/ && tolower($7) !~ /google|yahoo|bing|msn|ask|aol|duckduckgo/{system("sudo ufw deny from "$1" to any")}' access.log

bot그러면 일곱 번째 열에서 또는 (첫 번째 명령이 수행하는 작업) 항목 만 필터링됩니다 .crawlergrep~하지 않는 한7열확실히google|yahoo|bing|msn|ask|aol|duckduckgo(두 번째 명령이 수행하는 작업 )이 포함되어 있습니다 grep. 일치하는 행은 sudo ufw deny from "$1" to any첫 번째 열에서 실행됩니다. (최종 awk명령의 기능)

관련 정보