Dmz서버 에이전트 설치 관련의 건

Dmz존에 있는 에이전트를 dmz 포워더 서버에 연결하고자 합니다.

에이전트 생성은 분석서버에서 진행하였으며, 수동 설치 시 이슈사항은 없으나

자동 설치 시 403에러가 발생하며 설치가 되지 않습니다.

confdb확인 간 dmz서버에는 auth_token이 없어서 발생하는 문제가 아닌가 추측하고 있습니다

확인부탁드립니다

  • 설치는 ./logpresso install sentry 옵션으로 진행하였습니다.

센트리를 명령줄로 설치할 때 인증 토큰을 이용하여 패키지를 다운로드하거나 인증서를 다운로드하는 작업은 분석 서버에 접속하여 인증 토큰을 대조하기 때문에 전달 서버에 인증 토큰이 있는가 하는 점은 무관합니다. 403 에러를 어느 위치(분석 서버 로그? 센트리? 전달 서버? 웹 브라우저?)에서 확인하신 것인지 추가 정보를 올려주시면 답변 드리겠습니다. 센트리를 설치하는 서버는 분석 서버의 44300 포트에 접속 가능해야 합니다.

Dmz대역의 설치 에이전트의 cli에서 logpresso install sentry (이하옵션) 입력시 리턴값으로 확인하였습니다 설치 간 Deployer url과 센트리 연결 url 모두 dmz프록시 서버로 지정하였습니다.

상기처럼 설정한 이유는 dmz대역의 에이전트들의 내부망서버 통신을 지양하고자하여서입니다.

Dmz대역의 서버들을 내부통신없이 에이전트 연동을 진행하고자하면 기존 설치 방식대로 진행하는게 좋은지 궁금합니다(deployer, token 미설정)

추가로 웹에서 제공하는 자동설치 기능을 사용하지 않고, 패키지 업로드 후 콘솔에서 명령어를 사용한 이유는 1. centos, rockyos만 지원 2. 필수적으로 설치되어야하는 rpm 파일 존재 등의 이유로 logpresso install sentry를 사용해서 설치테스트하였습니다

재현

그렇다면 센트리 설치할 서버에서 아래와 같은 에러 로그를 보신 것 같네요.

$ sudo /opt/logpresso/logpresso install sentry -a https://DMZ전달서버IP:8443 -b DMZ전달서버IP -g 센트리GUID -t 인증토큰
creating log directory...
Unexpected error - IOException: java.io.IOException: Server returned HTTP response code: 403 for URL: https://DMZ전달서버IP:8443/deploy/cert?guid=센트리GUID&token=인증토큰
        IOException: Server returned HTTP response code: 403 for URL: https://DMZ전달서버IP:8443/deploy/cert?guid=센트리GUID&token=인증토큰

원인 설명

  • 인증서는 분석 서버에서 발급/파기를 관리하고 있으며 센트리 인증서는 분석 서버에서 다운로드해야 합니다. 불필요하게 수집 또는 전달 서버에 센트리 인증서를 동기화하여 노출하지 않도록 설계되어 있습니다.
  • 센트리 설치 패키지를 다운로드하거나 인증서를 다운로드하는데 사용되는 인증 토큰도 분석 서버에만 보관되며, 전달 서버에 동기화되지 않습니다.
  • 그런 상황에서 -a 옵션에 전달 서버 IP를 입력하면, 전달 서버는 인증서 배포 서비스를 제공하지 않기 때문에 403 상태 코드를 반환합니다. 이것은 인증 토큰이 confdb에 없어서 발생한 오류가 아니고, 설계 상 전달 서버의 기능과 책임은 센트리 자동 배포와 무관하기 때문에 발생하는 오류입니다.

해결 방향

본래 분석 서버에서 44300 포트를 분리한 것은 임의 위치에서 분석 서버의 웹 관리콘솔에 접속하지 못하도록 접근 통제하기 위하여 인증서 및 패키지 다운로드용 포트를 분리해둔 것입니다. 그럼에도 불구하고 말씀하신 것처럼 각 센트리에서 분석 서버의 44300 포트에 접속을 허용하는 것이 보안 정책 상 불가능한 상황일 때 표준적으로 권고되는 방법은 HTTP 프록시를 사용하는 것입니다.

DMZ 전달서버에서 분석 서버 44300/tcp 포트 방향의 방화벽 정책만 허용하면, 센트리는 DMZ 전달 서버를 경유하여 분석 서버의 44300/tcp 포트와 통신할 수 있습니다. 즉, 아래와 같은 통신 경로를 만들어야 합니다.

센트리 -> DMZ전달서버IP:44300 -> 분석서버IP:44300

HTTP 프록시 설치 방법

아래의 과정을 거쳐서 DMZ 전달 서버에 HTTP 프록시 서버를 새로 설치할 수 있습니다.

  1. GitHub에서 Logpresso HTTP Proxy를 다운로드하여 DMZ 전달 서버의 사용자 디렉터리에 업로드합니다. DMZ 전달 서버에서 GitHub 통신이 허용된다면 wget 명령을 사용해도 됩니다.

  2. DMZ 전달 서버에서 아래 명령어를 입력하여 Logpresso HTTP Proxy 서버를 설치합니다.

    $ tar xzf logpresso-http-proxy-1.1.0-linux.tar.gz
    $ sudo mkdir -p /opt/logpresso-http-proxy
    $ sudo mv logpresso-http-proxy /opt/logpresso-http-proxy/
    $ sudo /opt/logpresso-http-proxy/logpresso-http-proxy install
    Wrote 91 bytes to /opt/logpresso-http-proxy/logpresso-http-proxy.conf
    Wrote 311 bytes to /lib/systemd/system/logpresso-http-proxy.service
    
  3. /opt/logpresso-http-proxy/logpresso-http-proxy.conf 파일을 열어서 8443 포트를 44300으로 변경하고 [allowlist] 항목에 분석 서버 44300 포트에 대한 프록시 접속만 허용합니다.

    # Logpresso HTTP proxy config file
    port 44300
    [allowlist]
    # host:port
    # logpresso.watch:443
    분석서버1IP:44300
    분석서버2IP:44300
    
  4. 이제 서비스를 시작합니다. 만약 이 단계에서 Logpresso HTTP Proxy 서비스가 정상적으로 시작되지 않는다면, 기존 전달 서버 데몬이 44300 포트를 점유하고 있지 않은지 확인하시기 바랍니다.

    $ sudo systemctl start logpresso-http-proxy
    
  5. DMZ 전달 서버의 호스트 방화벽에 44300 외부 접속을 허용하도록 설정을 변경합니다. 만약 센트리 설치 서버에서 DMZ 전달 서버 44300 포트 통신 구간에 네트워크 방화벽이 존재한다면 해당 방화벽에도 허용 정책을 추가합니다.

    $ sudo firewall-cmd --permanent --add-port=44300/tcp
    $ sudo firewall-cmd --reload
    

    이 단계를 누락하면 센트리 설치 서버에서 /logpresso install sentry 명령 실행할 때 아래와 같이 타임아웃이 발생합니다.

    Unexpected error - IOException: java.net.SocketTimeoutException: connect timed out
            SocketTimeoutException: connect timed out
    

센트리 설정 수정

이제 logpresso install config 명령 시 생성된 설정 파일 /opt/logpresso/etc/logpresso.conf 을 열어서 JAVA_OPTS 설정 예제 아래에 아래와 같이 추가합니다.

JAVA_OPTS="-Dhttps.proxyHost=DMZ전달서버IP -Dhttps.proxyPort=44300"

센트리 자동 설치

이제 아래와 같이 인증서를 자동 설치할 수 있습니다.

$ sudo JAVA_TOOL_OPTIONS="-Dhttps.proxyHost=DMZ전달서버IP -Dhttps.proxyPort=44300" /opt/logpresso/logpresso install sentry -a https://분석서버가상IP:44300 -b DMZ전달서버IP -g 센트리GUID -t 인증토큰
Picked up JAVA_TOOL_OPTIONS: -Dhttps.proxyHost=DMZ전달서버IP -Dhttps.proxyPort=44300
creating log directory...
Installed CA certificate to /opt/logpresso/data/logpresso-sentry/ca.jks
Installed sentry certificate to /opt/logpresso/data/logpresso-sentry/sentry.pfx

진행 중에 다른 문제가 있으면 댓글 달아주시기 바랍니다.

1개의 좋아요

감사합니다 정상적으로 되는것 확인하였습니다

DMZ 전달 서버에 logpresso-http-proxy 데몬을 두개 사용 가능할까요?

분석 > DMZ 통신 구간에서 이미 http proxy 데몬이 있을 경우에는 어떻게 사용해야 할까요?

이미 전달 서버에서 HTTP 프록시 서버를 운영하고 있었다면 위의 구성에서 -Dhttps.proxyPort를 기존 HTTP 프록시 포트로 지정하시고, HTTP 프록시 설정 파일의 allowlist에 추가하시면 됩니다. 44300은 기억하기 쉽게 편의상 지정한 것이므로 반드시 프록시 포트가 44300일 필요는 없습니다.

1개의 좋아요