스플렁크를 무료 버전으로 사용은 가능하지만 여러가지 기능 제약이 존재합니다.
무엇보다 인증, 접근제어, 암호화 통신(https)을 적용 할 수 없는 부분이 가장 큽니다.
이 세가지는 되지 않음에 따라 아무나 스플렁크로 접속 후 모든걸 제어 할 수 있는 문제가 발생합니다.
사실상 Naked 상태로 운영이 되므로 사용을 하기가 어렵습니다.
완벽하지는 않지만 아래와 같이 구성하면 Naked 상태 보다 안전하게 사용 할 수 있습니다.
1.스플렁크를 Reverse Proxy 방식으로 구성합니다.
스플렁크 web 의 접속 형태는 https://ip주소:8000 이고, spunkd 데몬을 통해 직접 구동합니다.
이 방식을 Reverse Proxy 로 변경하고 Nginx 또는 Apache 를 경유 후 스플렁크로 접속 되도록 구성 합니다.
그림으로 표현하면 다음과 같습니다.

위 그림에서 Web Server A/B 부분이 splunkd 데몬이 됩니다.
>> "사용자 > 리버스 프록시 <> 스플렁크" 로 연결 되도록 구성 하면 됩니다.
리버스 프록시는
1) Nginx 를 사용 하고, 2) 여기에 HTTPS 를 적용하고, 3) HTTP Basic 인증을 적용 하여
"인증, 접근제어, 암호화 통신" 까지의 모든 사항을 해결 하도록 하겠습니다.
2.세가지의 준비물이 필요 합니다.
필요한 준비물은 아래 세가지만 있으면 됩니다.
번호 | 이름 | 내용 | 비고 |
1 | NGINX | 리버스 프록시로 사용함 | rpm 패키지로 설치 |
2 | htpasswd | HTTP Basic 인증 처리용 | 스플렁크 접속시 ID/PW 인증 용도 |
3 | SSL 인증서 | HTTPS 통신을 하기 위한 SSL 인증서 | 공인/사설 구분 없으나, 공인이 좋겠지? |
3.구성 방법
3.1.Nginx 가상 호스트 만들기
아래는 https://splunk.uncools.com 으로로 접속하면, 스플렁크가 설치된 서버의 웹UI (tccp 8000) 으로 연결 하는 설정입니다.
같은 서버에 스플렁크와 Nginx 가 설치된 구성입니다.
다른 서버에 스플렁크를 설치한 경우 upstream 구문을 해당 IP로 변경 합니다.
# vim /etc/nginx/conf.d/splunk.uncools.com.conf
upstream splunk {
server 127.0.0.1:8000 fail_timeout=0;
keepalive 15;
}
# default vhost-server
server {
listen 80 default_server;
listen 443 default_server ssl;
error_log /var/log/nginx/http.ip.error.log;
access_log /var/log/nginx/http.ip.access.log main;
ssl_certificate /etc/nginx/conf.d/cert/wadizcorp.com_ssl.crt;
ssl_certificate_key /etc/nginx/conf.d/cert/wadizcorp.com_ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:MEDIUM:!aNULL:!MD5:!EXPORT:!RC4:!eNULL:!DES:!3DES;
location / {
# deny all;
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl;
server_name splunk.uncools.com;
error_log /var/log/nginx/splunk.uncools.com.error.log;
access_log /var/log/nginx/splunk.uncools.com.access.log main;
ssl_certificate /etc/nginx/conf.d/cert/uncools.com_ssl.crt;
ssl_certificate_key /etc/nginx/conf.d/cert/uncools.com_ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:MEDIUM:!aNULL:!MD5:!EXPORT:!RC4:!eNULL:!DES:!3DES;
location / {
proxy_pass http://splunk;
auth_basic "WARNING AREA";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
가장 마지막에 location / 구문을 통하여 스플렁크 웹UI 로 연결 하되 > auth_basic 으로 인증 (ID/PW 입력)을 하도록 적용 합니다.
SSL 설정을 완료 하고 Nginx 의 config 테스트를 수행 합니다.
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
3.2.가상 호스트 접속 시 HTTP Basic 인증용 계정 생성하기
nginx 의 구성은 완료되었습니다.
이제 HTTP Basic 인증을 하기 위한 설정을 추가 합니다.
1) HTTP Basic 인증용 htpasswd 도구 설치 합니다.
# yum install httpd-tools
2) httpd-tools 설치 하였다면 htpasswd 커맨드를 이용하여 계정을 생성합니다.
1. 계정 생성
-c (소문자) 옵션은 처음 .htpasswd 파일을 만들때 한번만 사용
-5 를 꼭 붙이고 해야 해 (sha512 로 패스워드 해시)
-5 를 안붙히면 패스워드 해시가 md5가 되므로, 취약해지게 돼
# htpasswd -c5 /etc/nginx/.htpasswd uncools
New password:
Re-type new password:
Adding password for user uncools
2.생성된 계정 패스워드 해시 확인
- 패스워드 해시 $6 (안전한 패스워드 해시 알고리즘) 인것 꼭 확인!
$ cat /etc/nginx/.htpasswd
uncools:$6$ddy8JfIEPMd9EZJH$t..생략../
3. 사용자 추가 생성
-c 빼고 하면 됨
# htpasswd -5 /etc/nginx/.htpasswd uncools2
New password:
Re-type new password:
Adding password for user uncools2
4. 생성된 계정 확인
# cat /etc/nginx/.htpasswd
uncools:$6$ddy8JfIEPMd9EZJH$tDvCs..생략..6qB6ZaKr4/
uncools2:$6$kvlQfmrkXGtLuwNJ$ZIs..생략..l6s1H0.1
5. 계정 삭제
# htpasswd -D /etc/nginx/.htpasswd splunk1
Deleting password for user splunk1
3) .htpasswd 이 안전하도록 파일 권한을 변경 합니다.
계정 생성을 하였다면 .htpasswd 파일이 보안에 안전하도록 권한을 변경하자.
- nginx 프로세스(worker 계정) 계정 .htpasswd 파일을 읽을 수 있어야해
- 따라서 파일 소유자는 worker 계정 / 퍼미션은 400으로 설정함
# chmod 400 .htpasswd
# chown nginx:nginx .htpasswd
3.3.Nginx 를 재시작하고 접속 합니다.
nginx 를 시작 합니다.
# systemctl start nginx
이후 Listen 포트를 확인 하여 Nginx 와 스플렁크가 구동 중인 사항 확인 합니다.
# netstat -anlpt | grep -i "LISTEN"
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN 69900/splunkd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 88730/nginx: master
tcp 0 0 0.0.0.0:8191 0.0.0.0:* LISTEN 70053/mongod
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 69900/splunkd
tcp 0 0 127.0.0.1:8065 0.0.0.0:* LISTEN 70258/python3.7
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 88730/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1432/sshd
tcp6 0 0 :::22 :::* LISTEN 1432/sshd
https://ip주소:8000 이 아닌 Nginx 로 접속 합니다.
https://splunk.uncools.com 등 세팅한 도메인으로 접속
접속시 아래 처럼 ID/PW 입력 창이 나옵니다. 여기에 htpasswd 로 생성했던 계정을 입력 합니다.

이후 스플렁크 화면이 보인다면 리버스 프록시 구성 작업이 완료 되었습니다.
마지막으로, 우회 접속(https://ip 주소:8000) 을 차단하기 위해 방화벽 설정을 진행 합니다.
아래는 iptables 를 이용한 예시 입니다.
4.우회 접속 차단을 위한 방화벽을 설정 합니다.
리버스 프록시 구성이 되어서 https:// 형태로 접속이 가능하지만
여전히 스플렁크 웹UI (tcp 8000) 으로 직접 연결 (http://192.168.100.10:8000 등) 하면 접속이 가능 합니다.
http://192.168.100.10:8000 연결은 127.0.0.1 로 만 허용 되도록 방화벽에서 적용합니다.
# 모든 인바운드 연결을 허용하는 규칙
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
# TCP 8000으로 연결되는 인바운드는 127.0.0.1 만 접근 가능하도록 허용하는 규칙
iptables -A INPUT -p tcp --dport 8000 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 8000 -j DROP
이후 스플렁크 접속은 https://splunk.uncools.com 등 세팅한 도메인으로만 접속 됩니다.
끝
'Guide & Tips' 카테고리의 다른 글
[squid 프록시] Squid에 나가는 아웃바운드 소스 IP,PORT 설정 방법 (0) | 2023.09.14 |
---|---|
[SNI 차단우회] 토렌X등 차단 사이트 접속 방법(완결) (0) | 2023.09.03 |