개요
AWStats는 웹 로그 분석 도구입니다. HTTPS로 제공하면 전송 중 데이터를 보호하고 인증서 기반 신뢰를 제공합니다. 이 문서는 자체 서명(자체 발급) 인증서를 만들어 Apache에 연결하는 절차와 AWStats 업데이트 자동화, 성능 최적화 및 보안 권장사항을 설명합니다.
중요: 자체 서명 인증서는 브라우저에서 경고가 발생합니다. 운영 환경에서는 신뢰 가능한 CA에서 발급받은 인증서를 권장합니다.
인증서 생성
OpenSSL이 서버에 설치되어 있어야 합니다. CentOS 또는 RHEL5 등 RPM 계열 서버에서 예시 명령을 사용합니다. 먼저 cert 디렉터리로 이동합니다.
yum install mod_ssl
서버용 RSA 개인 키 생성:
# openssl genrsa -des3 -out server.key 1024
생성 출력 예:
Generating RSA private key, 1024 bit long modulus
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
키 정보 확인:
# openssl rsa -noout -text -in server.key
Enter pass phrase for server.key:
서버의 RSA 개인 키로 Certificate Signing Request(CSR) 생성:
# openssl req -new -key server.key -out server.csr
프롬프트 예시(필드 일부는 비워도 됨):
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank. For some fields, there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [GB]:JO
State or Province Name (full name) [Berkshire]:State
Locality Name (eg, city) [Newbury]: Your Location
Organization Name (eg, company) [My Company Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:ns.somewhere.com
Email Address []: [email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: If you hit enter here, it will be empty
An optional company name []:
CSR에 서명하여 인증서 생성(자체 서명):
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=JO/ST=State/L=Your Location/O=My Company/CN=ns.somewhere.com/emailAddress= [email protected] Getting Private key
Enter pass phrase for server.key:
생성된 파일을 적절한 위치로 복사:
# cp server.crt /etc/pki/tls/certs/
# cp server.key /etc/pki/tls/private/
# cp server.csr /etc/pki/tls/private
권한 설정:
# chmod go-rwx /etc/pki/tls/certs/server.crt
# chmod go-rwx /etc/pki/tls/private/server.key
# chmod go-rwx /etc/pki/tls/private/server.csr
Apache 설정(httpd.conf, CentOS 예시)에 아래 라인 추가:
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
서버가 포트 443에서 수신(listen) 중인지 확인하여 HTTPS가 활성화되었는지 검증합니다. 웹 루트로 이동하십시오.
netstat -aunt
예시 출력:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
Apache에서 AWStats를 SSL로 구성
웹 페이지 접근 시 http:// 대신 https://를 사용합니다. 자체 서명 인증서의 경우 브라우저에 인증서 수락을 요청하는 창이 나타납니다. 수락 요청이 없으면 설정을 다시 확인하세요.
.htaccess에 AWStats로의 리디렉션을 추가(설치 경로에 맞게 수정):
# redirect awstats to https
RewriteCond %{REQUEST_URI} ^/awstats(.*)
RewriteRule ^/rawe/awstats(.*)$ https://example.com/awstats$1 [R,L]
awstats.site.conf에서 HTTPS 링크를 사용하도록 설정(awstats 버전 4.0+):
UseHTTPSLinkForUrl
Version : 4.0+
# When AWStats build HTML links in its report pages, it starts thoose link
# with "http://". However some links might be HTTPS links, so you can enter
# here the root of all your HTTPS links. If all your site is a SSL web site,
# just enter "/".
# This parameter is not used if ShowLinksOnUrl is 0.
# Example: "/shopping"
# Example: "/"
# Default: ""
#
UseHTTPSLinkForUrl=""
필요 시 UseHTTPSLinkForUrl에 “/“(사이트 전체가 HTTPS인 경우) 또는 https 루트 경로를 설정하세요.
AWStats 업데이트 자동화(Cron)
수동 업데이트를 피하기 위해 크론 작업을 만듭니다. 트래픽이 많은 사이트는 서버 부하를 줄이기 위해 일간 실행을 권장합니다.
$ crontab -e
VIM이 열리면 insert 모드(i)로 진입하여 다음 라인을 추가합니다. (설치 경로는 환경에 맞게 조정하세요.)
45 9 * */usr/bin/awstats_updateall.pl now -confdir="/etc" -awstatsprog="/var/www/awstats/awstats.pl"
이 크론은 매일 오전 9시 45분에 AWStats를 업데이트합니다. -confdir=”/etc”는 AWStats 설정 파일 위치를 가리킵니다.
crontab 파일 마지막에 빈 줄이 있는지 확인하세요. 저장 후 VIM에서 [Escape]를 누르고 :x 또는 ZZ로 종료합니다.
로그 로테이트를 이용한 설정 예시(간편하고 효과적): /etc/logrotate.d 편집
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
prerotate
/var/www/awstats/awstats.pl-update -config=somesite.net
postrotate
/etc/init.d/httpd reload > /dev/null 2>&1 || true
endscript
다수의 설정 파일을 위한 크론
설정 파일이 많은 경우 개별 크론을 여러 개 만드는 대신 awstats_updateall.pl을 사용하면 편리합니다. 한 줄 예시:
15 4 * * * perl $HOME/awstats/tools/awstats_updateall.pl now -awstatsprog=$HOME/awstats/cgi-bin/awstats.pl -configdir=$HOME/awstats/cgi-bin/
awstats_updateall.pl은 지정된 디렉터리에서 모든 설정 파일을 찾아 awstats.pl을 호출하여 업데이트를 실행합니다. 이때 권한 확인이 필요합니다:
$ chmod 504 awstats/cgi-bin/awstats.pl
이 권한은 사용자와 크론이 awstats.pl을 실행할 수 있게 합니다.
AWStats용 애드온 구성: GeoIP
기본적으로 호스트명 조회는 DNS를 통해 수행되며 Apache가 dns.txt에 정보를 기록하고 AWStats가 이를 사용해 방문자 위치를 해석합니다. 트래픽이 많은 사이트에서는 DNS 조회로 인한 오버헤드가 성능 저하를 유발할 수 있습니다. 이 경우 GeoIP 모듈 같은 애드온을 사용하면 오버헤드를 줄이고 속도를 개선할 수 있습니다.
참고: GeoIP 구현 방법 및 파일 설치 등 자세한 내용은 GeoIP 관련 문서를 참고하세요.
보안 하드닝 권장사항
- 운영 환경에서는 자체 서명 인증서 대신 공인 CA에서 발급한 인증서 사용을 권장합니다. Let’s Encrypt 같은 무료 CA도 고려하세요.
- 개인 키 파일(server.key)은 엄격한 권한으로 보호하세요(chmod 600 또는 위 예시와 같은 go-rwx).
- Apache의 SSL 프로토콜/암호 모음 설정을 검토하여 취약한 암호화 스위트를 비활성화하세요.
- AWStats와 관련된 CGI/스크립트에 불필요한 쓰기 권한이 없도록 설정하세요.
중요: 크론이나 스크립트에 패스워드가 평문으로 들어가지 않도록 주의하세요.
프라이버시 및 규정 준수 노트
- AWStats는 서버 로그를 처리합니다. 로그에는 IP, URL, 타임스탬프 등이 포함됩니다. 개인정보보호 규정(GDPR 등)을 따르려면 보관 정책, 익명화(예: IP 마스킹), 접근 통제 및 보존 기간을 문서화하세요.
- 사용자 동의가 필요한 경우 프라이버시 고지를 업데이트하세요.
검증 체크리스트
- Apache가 443 포트에서 LISTEN 상태인지 확인
- [ ] 브라우저에서 https://yourdomain/awstats 로 접속하여 인증서 경고 또는 수락 프롬프트 확인
- AWStats 리포트의 링크가 HTTPS로 생성되는지 확인(UseHTTPSLinkForUrl 설정)
- 크론 로그나 /var/log/awstats 로그에서 업데이트 성공 여부 확인
- 권한이 적절히 설정되어 있는지 확인(server.key, awstats.pl 등)
역할별 체크리스트
- 운영팀: 인증서 갱신(자동화 포함), 포트/방화벽 설정 확인, 로그 보관 정책 운영
- 보안팀: SSL 설정 검토(프로토콜/암호화), 키 관리, 취약점 스캔
- 분석팀: AWStats 설정 검토, 필요한 ExtraSections 및 리포트 커스터마이즈
간단한 운영 절차(SOP)
- 인증서 갱신(공인 CA 사용 권장): 갱신 30일 전 알림 설정
- staging 환경에서 SSL·AWStats 구성 테스트
- 운영 환경에 적용 후 /var/log/httpd 및 AWStats 출력 확인
- 크론 성능 로그 모니터링(업데이트 시간·오류 확인)
- 문제 시 이전 로그 백업 후 설정 롤백
간단한 롤백 절차
- 문제 발생 시 Apache 설정에서 추가한 SSLCertificateFile과 SSLCertificateKeyFile 라인을 주석 처리하고 서비스를 재시작하여 이전 상태로 복원합니다. 인증서 관련 파일을 삭제하지 말고 보관하세요.
1줄 용어집
- SSL/TLS: 전송 계층 암호화 프로토콜
- CSR: 인증서 서명 요청(Certificate Signing Request)
- GeoIP: IP 기반 지리 위치 정보 데이터베이스
추가 팁 및 한계
- 자체 서명 인증서는 내부 테스트용으로만 사용하세요. 외부 사용자 경험과 보안 요구사항을 충족시키지 못합니다.
- 트래픽이 매우 많은 사이트는 AWStats 대신 빅데이터용 로그 분석(예: ELK 스택)을 고려할 수 있습니다. AWStats는 설치 및 유지가 간단한 반면 대규모 실시간 분석에는 한계가 있습니다.
마무리 요약
AWStats를 HTTPS로 제공하면 전송 보안과 신뢰성을 개선할 수 있습니다. 이 가이드는 자체 서명 인증서 생성, Apache 연동, AWStats 업데이트 자동화 및 GeoIP 도입을 통해 성능과 보안을 균형 있게 관리하는 방법을 제시합니다. 운영 환경에서는 공인 CA 사용, 권한 및 로그 보관 정책, 그리고 정기적인 검증을 권장합니다.