Linux/서버 보안(CentOS)

로그관리

D4tai1 2018. 11. 23.

1. 로그관리

  ▶ 사람은 죽어서 가죽을 남기고 서버는 죽어서 로그를 남긴다..?

  ▶ rsyslog는 API가 공개되어 플러그인을 개발하여 추가할 수 있다.

  ▶ c언어에서 #include<rsyslog.h>를 작성하여 로그를 전송하는 프로그램을 작성할 수 있다.



1) 로그파일

 [1] 로그파일위치

  ▶ /var/log/messages = 시스템 범용로그

  ▶ /var/log/secure = 인증 관련로그

  ▶ /var/log/boot.log = 서비스 시작/정지 로그

  ▶ /var/log/cron = cron 실행 로그

  ▶ /var/log/dmesg = 커널이 출력한 메세지 로그

  ▶ /var/log/lastlog = 모든 사용자의 마지막 접속 로그 -> lastlog 명령어로 확인 가능

  ▶ /var/log/maillog = 메일 시스템 로그

  ▶ /var/log/wtmp = 로그인 및 재부팅 로그 -> last 명령어로 확인 가능

  ▶ /var/log/yum.log = yum 패키지 관련 로그


2) 로그 설정파일

 [1] vi /etc/rsyslog.conf


3) Rules

 [1] auth, authpriv = 인증시스템(login, su 등)으로부터 생성

 [2] cron = cron으로부터 생성

 [3] daemon = 각종 데몬이 설정


4) MARK

 [1] /etc/rsyslog.conf

  ▶ immark 플러그인을 활성화하면 20분 간격으로 "rsyslogd:--MARK--"라는 타임스탬프 마크를 출력한다.

  ▶ MARK를 남기는 이유는 rsyslog가 정상적으로 동작하는지 확인하기 위해서이다.

  ▶ 만약 인가되지 않은 사용자가 시스템에 접속하여 로그를 지우고 출력하지 않도록 rsyslog를 변경하더라도 타임스탬프 마크가 없다면 침해사실을 확인할 수 있다.


5) 로그파일 관리

 [1] /etc/logrotate.conf

  ▶ 로그의 길이가 길어지면 분석하기도 힘들고 무거워지기 때문에 나누어서 관리한다.

   + 실제로 대회가 있기 전날에 시스템 관리자가 로그기록을 테스트한다고 많은 양의 로그를 남기고 이상이 없는 것을 확인했으나 대회 당일에 서버가 다운되어 외부의 침입이 있을 것으로 예상했으나 나중에 보니 로그가 넘쳐서 다운되었다고 한다.

  ▶ 기본적으로 "weekly" 로 설정되어 있지만 "weekly"는 매주 로테이션을 실시한다.

  ▶ "rotate 4"는 백업파일 수를 4개로 지정한다.

  ▶ "create"는 로테이션 후 로그파일을 새로 생성한다.

  ▶ "dateext"는 백업 파일명에 날짜를 추가한다.

  ▶ "mail test@test.com"은 로테이션이 완료되면 메일로 알린다.


6) 모니터링

 [1] 검색방법

  ▶ Regular Expression(정규표현식)을 이용한다.

  ▶ [grep "검색단어" "경로"] 와 같이 사용한다.


 [2] vi 내 검색

  ▶ "/단어" n을 누르면 다음을 검색하고 N을 누르면 이전을 검색한다.

  ▶ "?단어" N을 누르면 다음을 검색하고 n을 누르면 이전을 검색한다.

 

 [3] swatch

  ▶ Simple Log Watcher의 약자이며 로그파일을 실시간으로 확인할 수 있다.

  ▶ swatch는 검색하는 문자열이 있으면 메일로 보내거나 따로 저장한다.


6) 시연

  ▶ 가상머신을 복제했기 때문에 네트워크 설정을 새로 해주어야 한다.

  ▶ 시스템서버에 접근 시 로그를 시스템서버에 남기지 않고 로그서버를 만들고 전송한다.

  ▶ swatch를 사용해서 필터링된 패턴이 있다면 메일로 전송 후 로그를 분석한다.

  ▶ iptables에서 체인을 만들고 그에 대한 로그를 작성 후 차단한다.


 [1] [로그서버] 부팅 시 서비스 설정 확인

  ▶ [chkconfig] 명령어로 부팅시 rsyslog 데몬이 실행되는지 확인한다.


 [2] [로그서버] 네트워크 인터페이스 확인

  ▶ [ip addr] 명령어로 네트워크 인터페이스 이름을 확인한다. 


 [3] [로그서버] 네트워크 설정파일 접근

  ▶ [vi /etc/sysconfig/network-scripts/ifcfg-eth1] 명령어를 이용해서 eth1 인터페이스의 설정파일을 연다.


 [4] [로그서버] 네트워크 설정변경

  ▶ 인터페이스명인 eth1과 MAC주소를 맞게 넣고, ONBOOT 옵션을 yes로 변경한다.


 [5] [로그서버] IP주소 확인

  ▶ 로그서버의 주소는 172.16.100.36 임을 확인한다. 


 [6] [시스템서버] 로그 설정파일 접근

  ▶ [vi /etc/rsyslog.conf] 명령어로 로그 설정파일을 연다.


 [7] [시스템서버] 설정파일 변경

  ▶ 위 그림의 아래서 2번째 라인을 주석처리한다.

  ▶ 위 그림의 맨 아래줄에 [authpriv.*  @172.168.100.36] 내용을 추가한다.

  ▶ @하나는 UDP방식으로 전송하는 것을 의미하며, @@두 개는 TCP방식으로 전송하는 것을 의미한다.

  ▶ 인증관련 로그를 [5]에서 확인한 로그서버의 주소인 172.16.100.36으로 UDP방식으로 전송한다. 


 [8] [로그서버] 로그 설정파일 접근


 [9] [로그서버] 로그 설정파일 변경

  ▶ 위 그림의 아래서 2번째 라인의 주석을 해제한다.

  ▶ 위 그림의 맨 아래줄의 주석도 해제한다.

  ▶ imudp 플러그인을 사용하여 udp 포트인 514번을 오픈한다.

  ▶ 514번은 알려진포트로 취약할 수 있어서 기왕이면 포트를 변경해서 사용하길 권유한다.

  ▶ 필자는 처음에 설정을 하지 않아 그대로 진행하였다.


 [10] [외부접속] 시스템서버로의 접속시도

  ▶ 시스템서버에 접속을 시도하였다.


 [11] [로그서버] 시스템서버로의 접속기록 확인

  ▶ [tail -f /etc/log/secure] 명령어를 이용하여 추가된 로그가 있으면 출력한다.


 [12] [시스템서버] 로그관리 설정파일 접근

  ▶ [vi /etc/logrotate.conf] 명령어로 로그관리 설정파일을 연다.


 [13] [시스템서버] 로그관리 설정파일 변경

  ▶ 3라인의 daily는 매일 로테이션을 실시하는 것을 말한다.

  ▶ 6라인의 rotate 4는 백업로그를 4개 저장한다는 의미이다.

  ▶ 9라인의 dateext는 백업파일 이름에 날짜를 추가한다는 의미이다.


 [14] [시스템서버] 날짜 변경

  ▶ [date -s "2018-11-20"] 명령어를 이용하여 현재 날짜를 변경한다.


 [15] 확장된 패키지저장소 추가

  ▶ [yum install epel-release -y] 명령어를 이용하여 확장 패키지저장소를 추가한다.


 [16] swatch 설치

  ▶ [yum install swatch Perl-File-Tail] 명령어를 이용하여 swatch를 설치한다.

  ▶ Perl-File-Tail은 swatch가 Perl로 작성되어 Perl패키지도 함께 설치한다.


 [17] swatch 설정파일 접근

  ▶ [vi /root/.swatchrc] 명령어로 swatch 설정파일에 접근한다.


 [18] swatch 설정파일 작성

  ▶ watchfor /"패턴"/

  ▶ 액션

  ▶ 위 두 줄의 양식대로 작성하면 된다.

  ▶ "Accepted password"라는 문자열이 있다면 화면에 출력하라는 의미이다.


 [19] swatch 설정파일 적용

  ▶ [swatch -c /root/.swatchrc -t /var/log/secure] 명령어를 작성한다.

  ▶ -c옵션은 설정파일을 지정하고, -t옵션은 모니터링할 로그파일을 지정한다.

  ▶ [18]에서 작성한 설정파일을 /var/log/secure에 적용해서 패턴을 필터링하고 액션에 대한 동작을 한다.

  ▶ 현재는 [18]에서 설정한 패턴이 없기 때문에 아무런 내용도 출력되지 않는다.


 [20] 새로운 검색파일 접근

  ▶ [vi /root/.search] 명령어로 검색파일에 접근한다.

  ▶ 실제로 로그를 임의로 만들어서 테스트 해보려고 한다.


 [21] swatch 설정파일 작성

  ▶ "haha"문자열이 탐지되면 모니터에 출력한다.


 [22] swatch 설정파일 적용

  ▶ [21]에서 작성한 설정파일을 /var/log/secure에 적용해서 패턴을 필터링하고 액션에 대한 동작을 한다.


 [23] 로그파일에 임의의 문자열 추가

  ▶ [echo "my name is haha" >> /var/log/secure] 명령어로 임의의 로그를 추가한다.


 [24] swatch 탐지 후 분석

  ▶ 실제로 "haha" 문자열이 탐지된 라인을 출력해준다.


 [25] swatch 메일전송

  ▶ watchfor /(haha | happy)/

  ▶ echo

  ▶ main d4tai1@naver.com, subject="title"

  ▶ 위와 같이 설정파일을 작성 후 필터링에 걸리게 하도록 한 후 메일을 확인해본다.

  ▶ 대소문자 구분없이 필터링하고 싶은 경우 1라인 맨 뒤에 i를 붙이면 된다.


 [26] 메일서버

  ▶ MTA는 Mail Transfer Agent의 약자이며 다른 서버로 메일을 전송하는 서버용 프로그램으로 SMTP가 있다.

  ▶ MUA는 Mail User Agent의 약자이며 사용자가 메일을 송수신할 때 사용하는 클라이언트용 프로그램으로 POP3가 있다.

  ▶ 이 글은 메일서버를 다루기 위한 글이 아니기 때문에 이정도만 설명하고 넘어가려고 한다.


 [27] iptables

  ▶ [iptables -A INPUT -s 172.16.100.67 -j LOG] 명령어를 이용하여 송신자 IP주소가 172.16.100.67이면 로그에 기록하는 정책을 추가한다.

  ▶ [iptables -A INPUT -s 172.16.100.67 -j DROP] 명령어를 이용하여 송신자 IP주소가 172.16.100.67이면 차단하는 정책을 추가한다.

  ▶ 룰 체인이 위에서부터 적용되므로 로그를 기록한 후 차단한다.

  ▶ 차단만 해도 되지만 하지만 몇 번 접속을 시도했는지 모르기 때문에 로그를 남기고 차단한다.

  ▶ 부연설명으로 REJECT 정책은 거부하는 것을 말하며, DROP 정책은 차단하는 것을 말한다.

  ▶ 조금 자세히 설명하면 REJECT는 막고난 후 거부된 메세지를 전송하지만, DROP는 막고 메세지는 버린다.

  ▶ [service iptables save] 명령어는 iptables 설정을 저장한다.

  ▶ [iptables-save > /etc/iptables.tmp] 명령어는 설정파일을 따로 빼놓는다.

  ▶ [iptables-restore < /etc/iptables.tmp] 명령어는 다른 곳에서 가져온 설정파일을 그대로 적용한다.

  ▶ [service iptables restart; iptables -L] 명령어로 서비스를 재시작하고 확인 한다.


 [28] 결과 확인




'Linux > 서버 보안(CentOS)' 카테고리의 다른 글

네트워크 보안  (0) 2018.11.25
[Mini Project] 로그분석시스템  (0) 2018.11.23
디스크 암호화  (0) 2018.11.12
디스크 관리  (0) 2018.11.11
파일암호화[비대칭키]  (0) 2018.11.11

댓글