ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OpenVAS Nagios Plugin Anatomy
    Linux 2015. 12. 13. 16:50



    * 비공개 팀 블로그에 작성했던 사항을 그대로 복사해 왔습니다 *


    OpenVAS를 쓰고 있다면, 주기적으로 돌아가는 태스크 결과를 확인하는 것이 쉽지는 않음을 알고 있을 것이다.


    만약 모니터링 시스템인 Nagios까지 활용중이라면 이를 관리하기 위한 좋은 플러그인이 있다.



    아래는 OpenVAS Nagios 플러그인의 Greenbone 공식 설명 페이지 주소이다.

    http://www.greenbone.net/learningcenter/nagios.html



    이 플러그인은 Nagios에서 OpenVAS의 Task를 모니터링하고, 그 결과값에 따라 Warning 또는 Critical을 반환한다.



    각 Task들의 Severity 값을 가지고 Nagios에서 보이는 값이 바뀌는데, 기준은 아래와 같다.


    OK: Severity가 Log거나 Low

    Warning: Severity가 Medium

    Critical: Severity가 High


    OpenVAS Nagios Plugin을 잘 활용한 최종 아키텍쳐는 아래와 같다.


    Task가 Schedule대로 (Daily, Weekly...) 돌아갈 때, Nagios Plugin은 Task 상태를 계속 모니터링 하다가 값이 Warning 이상으로 변경되면 알람을 날려주게 되는 것이다.

    (OpenVAS Plugin Config에서도 Nagios Host의 alive를 체크하는 부분이 있으나 어차피 Nagios의 check_ping 프로그램을 이용하고, Nagios를 쓰고 있다면 그 부분은 이미 되어 있을것이라 생각해 넣지 않았다.)




    이제 설치 방법에 대해 알아보자.


    1.    일단 Plugin을 다운받는다.

    http://www.greenbone.net/download/tools/check_omp


    플러그인은 C로 짜여져 있으며, Greenbone 공식 홈페이지에서 소스를 제공하므로 혹시 변경이 필요하다면 수정해서 사용하여도 무방 할 것 같다.



    2.    다운받은 플러그인을 Nagios의 플러그인 폴더로 옮긴다.

    플러그인 폴더는 Nagios의 버전 또는 설치 방법마다 다를 수 있으나, 보통 Nagios의 resource.cfg 를 확인하면 알 수 있다.

    resource.cfg 파일 내에 $USER1$이라는 변수로 선언되어 있으므로 해당 주소를 파악하고 안에 넣어준다.



    3.    omp 설정 파일을 다운받는다.

    http://www.greenbone.net/download/misc/nagios_omp_example-v1.cfg


    이 파일을 nagios의 설정 파일 폴더 내로 복사한 후, 원하는 이름으로 변경한다.

    여기서는 공식 설명대로 my_omp.cfg로 변경한걸로 가정한다.



    Nagios 플러그인 설치가 그렇듯이 매우 간단하다.


    이제는 my_omp.cfg를 내 입맛대로 변경해야 정상적으로 돌아갈 것이다.




    my_omp.cfg 구조에 대해 알아보자.





    위 구조가 my_omp.cfg의 전부이다.


    잘 보면 Command에서 옅은 녹색의 PING과 그 이후로 죽 이어진 Service의 PING, Host Groups의 all-servers가 존재한다.


    이 PING은 사실 my_omp.cfg가 아니라 Nagios 기본 컨피그 파일에 정의된 check_ping이라는 command이다.


    하지만 Nagios를 잘 활용하고 있다면 이런 항목들은 기본으로 존재 할 것이다.


    쓰고 싶다면 말리진 않겠지만, PING을 막아 놓는 서버도 있을 뿐더러 이중으로 체크되는 귀찮음을 느끼게 될 것이다.


    따라서 PING을 제거한 아래 구조를 설명하도록 하겠다.





    1.    Command

    그림에서 짙은 녹색인 check_omp, check_thretlevel, check_threatlevel_overrides 로 구성되어 있다.


    위 3개의 커맨드는 Plugin 설치 시 다운 받았던 check_omp라는 프로그램을 이용한다.


    하나 하나 분석 해 보자.


    check_omp

    define command{
            command_name    check_omp
            command_line    $USER1$/check_omp -H $HOSTADDRESS$ --ping
            }
    

    OpenVAS 서버의 Health 상태를 체크해 준다.


    정확히 얘기하면 openvas-manager의 Health 상태를 체크해 준다.


    즉, 이 커맨드를 가지는 서비스는 OpenVAS 서버의 Host에 넣어 줘야 한다.



    check_threatlevel, check_threatlevel_overrides

    define command{
            command_name    check_threatlevel
            command_line    $USER1$/check_omp -H $USER20$ --status -u $USER21$ -w $USER22$ -T $ARG1$ --last-report -F $HOSTADDRESS$
            }
    
    define command{
            command_name    check_threatlevel_overrides
            command_line    $USER1$/check_omp -H $USER20$ --status -u $USER21$ -w $USER22$ -T $ARG1$ --last-report --overrides=1 -F $HOSTADDRESS$
            }

    OpenVAS 서버의 Task 상태를 체크한다.


    커맨드를 잘 보면, T 옵션 뒤에 $ARG1$ 이라는 인자를 하나 받게 되어 있다.


    나머지 USER 인자는 서버 정보가 들어가는 매크로이다.


    이 USER 값을 넣는 방법에 대해서는 뒤에 설명하도록 하자.


    check_threatlevel과 check_threatlevel_overrides의 차이는 아래 포스팅을 참고해 주시기 바란다.

    check_threatlevel VS Check_threatlevel_overrides


     

    2.    Service


    3개의 서비스는 my_omp.cfg 내의 example-service라는 서비스를 상속 받는다.


    하지만 이를 굳이 상속 받을 필요는 없고, 기존에 쓰고 있던 서비스를 상속 받는 것이 더 나을 것이다.


    그리고 example-service를 설명하는 것은 Nagios 구조에 대한 이야기가 많아 질 것이기 때문에 넘어간다.


    OMP Ping

    define service{
            use                     example-service ; Inherit values from a template
            hostgroup_name          gsm-appliances  ; The name of the host group the service is associated with
            service_description     OMP Ping        ; The service description
            check_command           check_omp       ; The command used to monitor the service
            }
    

    gsm-appliances라는 host group에 속해 있으며, check_omp 커맨드를 사용한다.


    필요한 인자는 없는 듯 하다.



    Last GSM Scan Results

    define service{
            use                     example-service
            hostgroup_name          scanned-hosts
            service_description     Last GSM Scan Results
            check_command           check_threatlevel!nagios-omp-test
            max_check_attempts      1               ; The result reported by the GSM is definite so no re-attempting is needed.
            }
    

    scanned-hosts라는 host group에 속해 있으며, check_threatlevel 커맨드를 사용한다.


    command 설명에서 인자가 하나 필요하다고 했던 것 같은데 역시나 nagios-omp-test라는 인자가 쓰여져 있다.


    이 인자는 OpenVAS에서의 Task 이름이다.


    아래 사진에서, Test-Task와 같은 Task 이름을 넣어주면 된다.

    (임의로 스크린샷을 수정해서 넣었으므로 어색할 수 있으나 양해 바람)




    Last GSM Scan obeying Overrides

    define service{
            use                     example-service
            hostgroup_name          scanned-hosts
            service_description     Last GSM Scan obeying Overrides
            check_command           check_threatlevel_overrides!nagios-omp-test
            max_check_attempts      1
            }
    

    check_threatlevel_overrides 커맨드를 호출한다.


    나머지는 check_threatlevel 과 동일하다.



    3.    Host Groups


    gsm-appliances와 scanned-host가 존재한다.


    특별한 설정은 없으므로 자세한 설명은 생략한다.



    4.    Host


    Service와 비슷하게 example-host라는 기본 호스트를 상속받는다.


    역시 변경해도 관계없다.


    OpenVAS Server용 host 설정

    define host{
            use             example-host                    ; Inherit default values from a template
            host_name       gsm.example.com                 ; The name we are giving to this host
            hostgroups      all-servers, gsm-appliances     ; Host groups the host is a member of
            alias           Greenbone Security Manager      ; A longer name associated with the host
            address         198.51.100.42                   ; IP address of the host
            }
    


    host_name:     host 이름. 변경해도 관계없다.

    hostgroups:    본인의 경우 all-servers는 제거하였다.

             이 경우 gsm-appliances host group에 할당되어 있는 OMP Ping 서비스가 실행된다.

    address:        OpenVAS Server IP를 입력해야 한다.


    OpenVAS Target (Client)용 host 설정

    define host{
            use                     example-host
            host_name               host1.example.com
            hostgroups              all-servers, scanned-hosts
            alias                   First Example Host
            address                 198.51.100.101
            }
    

    host_name:     host 이름. 변경해도 관계없다.

    hostgroups:    역시 본인의 경우 all-servers는 제거하였다.

       이 경우 scanned-hosts에 할당되어 있는 Last GSM Scan Results와 Last GSM Scan obeying Overrides 서비스가 실행된다.

    address:        OpenVAS Target (Client) IP를 입력해야 한다.




    my_omp.cfg를 원하는대로 변경했다면, 이제 매크로 값을 넣어야 한다.


    잘 기억나지 않는다면 command config를 다시 한번 살펴보자.

    define command{
            command_name    check_threatlevel
            command_line    $USER1$/check_omp -H $USER20$ --status -u $USER21$ -w $USER22$ -T $ARG1$ --last-report -F $HOSTADDRESS$
            }
    


    command_line에 $USER20$, $USER21$, $USER22$ 라는 User Defined Macro를 이용하고 있으나, 정의 해 준적은 없다.


    이를 위해서는 resources.cfg 파일을 찾아야 한다.


    해당 파일은 보통 NAGIOS_HOME/private 폴더 아래 위치한다.

    (NAGIOS_HOME 이란 Nagios가 설치 된 폴더를 말한다)


    resources.cfg 파일을 열고, 아래 내용을 추가하자.


    $USER20$=<SERVER_IP>
    $USER21$=<USER_ID>
    $USER22$=<USER_PW>
    


    <SERVER_IP>에는 OpenVAS 서버의 IP를,

    <USER_ID>에는 감시 할 Task가 등록되어있는 OpenVAS 유저의 ID를,

    <USER_PW>에는 해당 유저의 비밀번호를 입력해야 한다.



    완료했다면, 여태까지 작성했던 my_omp.cfg를 nagios에 등록시키는 일만 남았다.


    nagios.cfg 파일에 넣어야 하는데, 이는 NAGIOS_HOME 폴더 아래에 위치한다.


    nagios.cfg 파일을 열고 아래 내용을 추가하자.


    # OpenVAS (OMP)
    cfg_file=/etc/nagios/objects/omp.cfg
    

    omp.cfg 파일의 위치에 따라 /etc/nagios/objects/omp.cfg 내용은 변할 수 있다.



    자, 정말 끝났다.


    이렇게 구성이 완료 되었다면 컨피그에 문제가 없는지 검사를 진행해 보자.


    검사 방법은 아래와 같다.


    nagios -v nagios.cfg
    


    만약 nagios가 PATH에 설정이 되어 있지 않아 바로 명령이 되지 않는다면, nagios 파일이 있는 위치를 직접 넣어야 한다.

    ex) /usr/sbin/nagios -v /etc/nagios/nagios.cfg


    에러가 발생하지 않았다면 문제가 없는 것이다.


    nagios 서비스를 재 시작하고 OpenVAS 플러그인 상태를 지켜 보도록 하자.

Designed by Tistory.