InfoSec / / 2024. 9. 24. 16:28

웹서버 보안 강화 - access.log 확인하기 및 자동 수집

cat /var/log/apache2/access.log

 

 

 

▶ 분석

192.168.5.20                                             -> 접속자의 IP

24/Sep/2024:14:41:21 +0900                        -> 접속한 시간

GET                                                        -> 요청 방식

/board/board_show.php?no=6                       -> 요청한 페이지

HTTP/1.1                                                -> 프로토콜

500                                                          -> 응답코드

2348                                                        -> 전송한 패킷크기

http://192.168.5.66/board/board.php  -> 응답 주소

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36

(KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"                      -> 접속한 브라우저

 

 

원하는 정보만 추출하기

awk '{ print $1,$4,$6,$23}' /var/log/apache2/access.log > web_history.txt

cat web_history.txt

 

awk는 기본적으로 공백으로 요소를 구분하므로 원하는 요소의 번호를 입력하여

원하는 정보만 추출할 수 있습니다.

 

 

  각 IP가 서버에 접근한 횟수 추출하기

awk '{ arr[$1] +=1 } END { for(i in arr) print i,arr[i] }' /var/log/apache2/access.log

 

반복문 명령어를 이용하여 IP별로 서버에 몇번 요청을 보냈는지 확인할 수 있습니다.

접근 횟수가 비정상적으로 크면 공격을 받고 있다고 추정할 수 있으며,

IP별로 접근 가능 횟수를 지정하는 방식으로 공격을 차단할 수 있습니다.

 

Python과 SSH를 통한 로그 자동수집

# SSH 모듈
from netmiko import ConnectHandler

# 운영체제 관련 명령어 사용
import os

# range()함수는 정수를 사용함
for i in range(65,69) :   # 접속할 IP 범위
    host_ip = '192.168.5.' + str(i)        #192.168.5.65~68

    # 로그인을 위한 서버 기본 정보
    servers = {
        'device_type' : 'linux',
        'host' : host_ip,
        'username' : 'root',
        'password' : '12345678',
        'port' : 22}

    try:
        net_connect = ConnectHandler(**servers)
        net_connect.enable()
        access_log_file = net_connect.send_command("cat /var/log/apache2/access.log")

        # 수집된 로그 정보를 파일로 저장하기
        file_name = './' + str(i) + '_access_log.txt'
        f = open(file_name, 'w', encoding='utf-8') # 한글 인코딩 uec-kr, utf-8, cp949
        f.write(access_log_file)
        f.close()
    except:
        print("fail")
os.system('pause')

 

 

 

SSH 접속이 성공하면 fail이 출력되며

접속이 성공하면 로그가 생성됩니다.

 

해당 예제에서는 68번 IP가 접속 실패했으며

나머지 65~67번 IP의 로그가 추출된 것을 확인할 수 있습니다.

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유