graylog 를 통한 syslog 통합 감사(audit)

graylog 는 syslog 처리를 위한 빅데이터 분석 솔루션이다. 기본적으로야 syslog 를 한곳에 적재하여 로그 감사를 하는 목적으로 사용한다.

물론 syslog 뿐만 아니라 웹로그등을 수집하여 분석하는것 역시 가능하다.

Mongodb + elasticsearch + java 를 사용하여 운영 되며 노드를 추가하여 다중 노드에서의 분석 처리가 가능하다.

2018-05-18_111423 위와 같이 대쉬보드를 만들어 한눈에 볼수 있으며 alert 설정을 통해 중요 특정한 이벤트 발생시 손쉬운 확인이 가능 하다.

graylog 의 권장 사항은 4GB의 램을 필요로 하나 구축테스트를 해본 결과 1GB 에 2GB 수준의 swap 으로 정상적인 운영이 가능했다.

오픈소스이기 때문에 유료 프로그램인 kiwi syslog의 라이선스 비용 대비 40% 수준이면 클라우드에 구축하여 운영할 수 있다.
(t2.micro / 1 core – 1GB RAM) CentOS7 에서 graylog 를 설치 하는 방법을 설명한다.

 

1. 가상 서버를 준비하고 기본적인 업데이트 및 hostname 지정 등을 한 뒤에 리부팅 한다.

 

2. 시스템 메모리 및 네트워크 튜닝값을 적용 한다.

 

3.  swap 을 생성한다.(aws-centos7 의경우 swap 설정되어 있지 않다.)

  • 프로그램 초기 설치시 selinux 충돌을 방지 하기 위해 임의 setenforce 0 명령어로 selinux 를 permissive 모드로 변경 후 진행 한다.

  • 재부팅 후에 swap 이 자동 적용 될수 있게 fstab 을 수정한다. ~]# vi /etc/fstab

 

4. elasticsearch 설치

 

5. mongodb 설치

 

6. mongodb 설정

  • mongdb 의 data 파일을 /free/mongo_data 에 적재할 예정 이기 때문에 conf 파일을 수정 하고 selinux 설정을 추가 한다.

 

7. graylog 설치

 

8. graylog 설정

  • conf 파일을 수정하기 전에 pwgen 을 이용하여 secret 값을 생성 하고 shasum 을 이용하여 관리자 패스워드 값을 생성한다.

~]# vi /etc/graylog/server/server.conf     ## 각 값을 찾아서 수정한다.

 

9. graylog 시작 및 systemd 등록

 

10. nginx 설치

  • 여기서는 손쉬운 http/2 구축과 brotli 이미지 압축 등을 위해 codeit – nginx 을 설치 한다.

 

11. nginx 설정

  • DH 파라메터파일을 생성 한다.

  • /etc/nginx/nginx.conf 파일을 수정한다.

  • /etc/nginx/conf.d/default.conf 파일을 수정한다.

 

12. let’s encrypt 를 이용하여 인증서 발급을 진행하였음.  ( https://www.enteroa.com/2016/03/12/lets-encrypt-설치-및-운용centos )

  • nginx 에서 location 으로 let’s encrypt 설정을 /var/www 으로 했기 때문에 아래와 같은 명령어로 인증서 발급이 가능 하다.

 

13. selinux 설정

 

14. graylog 설정

  • graylog 서비스가 모두 정상적이라면 웹접근을 통해서 로그인을 할 수 있다. 2018-05-18_140231
  • 로그인 한 뒤에 먼저 대시보드를 생성한다.
    2018-05-18_142706
  • 이후 input 생성을 하기위해 아래와 같이 설정 진행을 한다. 2018-05-18_140445
  • 기본적으로 아래 다섯 항목을 설정 한다.
    2018-05-18_140416
  • 설정을 하게 되면 input 이 생성되고 곧 running 상태가 된다.2018-05-18_141255

 

15. linux – rsyslog 설정 (UDP 설정)

  • ~]# /etc/rsyslog.conf 파일의 맨밑에 삽입 한다. ( @=UDP / @@=TCP )

  • rsyslog 을 재시작 한다.

 

16.  생성된 input 의 show recived messages 버튼으로 이동하면 아래와 같은 화면을 볼 수 있다. (검색 화면과 같다.)

  • 검색 일자를 선택하고 대쉬보드 추가를 할 수 있다.
    2018-05-18_143141

 

17. L3 – syslog 설정 (cisco)

  • cisco 스위치의 경우 input 생성을 할때 RAW/Plaintest UDP 를 선택해서 진행해야 한다. ( RFC3414 표준이 아님 )
  • 아울러 스위치는 일반적으로 분배의 목적으로 한개의 gateway 밑에 존재하므로 각 스위치마다 별도의 input 을 만든다
  • input 을 만들때 override source 옵션을 통해 특정된 port 에 들어온 메세지의 소스 호스트 네임을 알기 쉽도록 Office-L3 와 같이 설정한다.
  • 일반적인 switch 장비의 log 설정 방법은 아래와 같다.

 

Let’s encrypt 에서 생성된 pem 인증서를 tomcat에서 사용 하기

Let’s encrypt 의 경우 일반적인 apache / nginx 에서 사용이 가능한 pem 파일을 생성 한다.

 

때문에 tomcat 에서 사용을 하기 위해서는 jks 로의 변환을 해서 org.apache.coyote.http11.Http11NioProtocol 프로토콜로 사용을 하거나

apr 및 tomcat-native 설치 하여 org.apache.coyote.http11.Http11AprProtocol 을 사용할 수 있다.

 

먼저 pem 파일을 jks 로 만드는 스크립트 이다. 중요한 부분은 18~22 줄이다.

이후 server.xml 설정에서 아래와 같이 설정하여 https 를 활성화 할 수 있다.


다른 방법으로 Http11AprProtocol 프로토콜을 사용하여 pem 파일을 jks 로 변환 없이 사용할 수 있다.

또한 apr 프로토콜을 사용할하고 tomcat 8.5 혹은 tomcat 9 의 경우 http/2 를 지원 한다.

활성화 하기 위해서는 tomcat-native 을 설치해야 한다.

server.xml 에서는 아래와 같이 설정 한다.

 

취약점 패치 CVE-2017-5715, CVE-2017-5753, CVE-2017-5754

Intel cpu 의 Meltdown,

Intel, AMD, ARM 등 대부분의 cpu 취약점인 Specter 가 발견 되어 운영 중인 모든 컴퓨터 ( PC, 서버, 핸드폰 등등 ) 의 업데이트가 필요 하다.

시스템의 느려짐 ( 특히 I/O 속도 ) 이 발생한다고 하나..

간단한 자바스크립트 정도로 cpu의 시스템 에서 생성한 정보확인이 가능하다고 하니 꼭 진행하는 편이 좋다.

 

  • 서버 ( centos, ubuntu )

리눅스의 경우 커널 업데이트 이기 때문에 커널 업데이트 후에 시스템 재시작이 필요하다.

1.CentOS

2. Ubuntu

2018-01-10_14-35-57

위 스크린샷 화면은 ubuntu 설치할때 업데이트 설정에 따라 나오지 않을수도 있습니다.

 

  • 윈도우

1. 윈도우 10 사용자는 자동 패치 (KB4056892) 가 된다.

2018-01-10_15-48-59

2. 윈도우7 :  http://www.catalog.update.microsoft.com/Search.aspx?q=KB4056897

3. 윈도우8 :  http://www.catalog.update.microsoft.com/Search.aspx?q=KB4056898

 

PS. 아이폰의 경우 IOS 11.2.2 버전이 관련 패치 이며 가급적 패치 진행을 하는것이 좋을듯 ‘ㅅ’a

kernel 의 change log 를 확인하여 패치가 되었는지 확인한다.

Let’s enctypt 를 의 발급/갱신을 단순화 하기 위한 방법

Let’s encrypt 는 발급/갱신을 할때 http://도메인/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxxxx 를 호출 한뒤 호출에 성공한경우 도메인 소유권이 있는것으로 판단하여 발급/갱신이 이루어 진다.

다만 이경우 .htaccess 를 쓰는 워드프레스 라던가 XE 라던가 혹은 개인 설정에 의해 .htaccess 에서 리다이렉트 운용을 할 경우 발급/갱신이 어려워 질 수 있다.

 

때문에 아래와 같이 apache 의 Alias 설정 해서 좀더 효율적인 인증을 할 수 있다.

 

위 설정을 하고 난뒤에 발급 명령어는 아래와 같다.

webroot를 /var/www/html 에 고정을 하고  6번째 줄만 맞게 수정을 해서 사용하면 됩니다 ‘ㅅ’b

 

/var/www 폴더는 selinux 에서 파일컨텍스트가 허용된 폴더로 selinux 를 사용하더라도 별도의 허용처리를 할 필요가 없어서 좋음 🙂

webtatic 저장소를 이용한 php 7 설치

php 는 httpd 의존이기 때문에 php를 설치하는것만으로 httpd 가 설치 된다.
즉 httpd 먼저 설치하고 php를 설치해야 한다.

webtatic의 php 는 기본적으로 nts 이며 apache 가 prefork mpm 이 아닐 경우(worker, event) zts 모듈이 로딩이 되므로 매우 편리하게 사용할 수 있다.
아울러 yum을 이용한 설치이기 때문에 더 훌륭하다 =3=b

 

레포지트리 설치

 

php7 설치

 

httpd 의 mpm 방식은 아래와 같이 확인한다.

httpd -V 의 값에서 MPM 이 worker 로 확인 되었기 때문에 cron 등에 등록을 하려면 zts-php 명령어를 써야 한다.
worker 방식은 메모리를 적게 쓰지만 다종의 웹솔루션을 운영하기엔 적합하지 않다.
다만 apache 2.4.27 에서 부터 http/2 를 지원하는데 있어서 profork 방식을 더 이상 지원하지 않는다.

 

서버에서 php 명령어 실행은 아래와 같이 한다.

 

httpd를 worker MPM 으로 설치 하고 webtatic 제공의 php 를 설치한 서버에서 오라클 접속을 사용하기 위해 oci8 익스텐션 설치 진행은 아래와 같이 진행 했다.
phpize, config-php 역시 각각 zts-phpize, zts-php-config 의 것을 사용한다.

 

설치된 oci8 은 웹문서에서 phpinfo(); 로 호출하거나 리눅스 쉘에서 아래와 같이 확인이 가능하다.

 

PS. webtatic 에서는 php70w-odbc를 제공 하므로 yum 설치로 odbc를 이용할 수 있다.