logrotate 설정파일 생성

# cd /etc/logrotate.d

# vi apache

==================================

/usr/local/httpd2/logs/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
    /usr/local/httpd2/bin/apachectl graceful 2> /dev/null || true
    endscript
    dateext
}

==================================

 * missingok : 로그파일이 없어도 에러처리하지 않는다.

 * notifempty : 로그파일 용량이 0일 경우 rotate 하지 않는다.

 * sharedscripts : postrotate / endscript 스크립트 한번 실행

 * postrotate / endscript : 순환작업 후 실행할 작업 설정

 * dateext : 로그파일에 YYYYMMDD 형식의 확장자 추가

 

테스트

# /usr/sbin/logrotate -d /etc/logrotate.conf

 

실행

# /usr/sbin/logrotate /etc/logrotate.conf

 

logrotate 정상실행 되지 않을 경우 (로그디렉토리가 /usr 일 경우)

logrotate 테스트시 정상적으로 실행되었다고 나오나, 실질적으로 logrotate가 되지 않는경우가 있습니다.

 * /var/log/syslog 에러로그 

Aug  7 00:00:02 www systemd[1]: logrotate.service: Main process exited, code=exited, status=1/FAILURE
Aug  7 00:00:02 www systemd[1]: logrotate.service: Failed with result 'exit-code'.
Aug  7 00:00:02 www systemd[1]: Failed to start Rotate log files.

 

# vi /lib/systemd/system/logrotate.service

 * 최하단에 로그경로 추가

==================================

ReadWritePaths=/usr/local/httpd2/logs

==================================

 

1. MaxMind 회원가입

https://www.maxmind.com/en/geolite2/signup

 * 계정 가입 후 로그인 -> 라이센스키 발급

  ※ 발급반은 라이센스 정보는 1회만 확인가능 별도 저장 필수

 

2. libmaxminddb 설치

# yum install epel-release

# yum install libmaxminddb libmaxminddb-devel

 

3. mod_maxminddb 설치

※ mod_maxminddb 모듈은 Apache 2.2 이상에서 사용 가능

 

# cd /usr/local/src

# wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz

# tar xvfz mod_maxminddb-1.2.0.tar.gz

# cd mod_maxminddb-1.2.0

# ./configure --with-apxs=/usr/local/httpd2/bin/apxs

# make; make install

 

※ 설치한 모듈 확인

# ls -lh /usr/local/httpd2/modules/

-rwxr-xr-x 1 root root  50K 2022-07-08 11:37 mod_maxminddb.so

# cat /usr/local/httpd2/conf/httpd.conf

LoadModule maxminddb_module   modules/mod_maxminddb.so

 

4. geoipupdate 설치

# cd /usr/local/src

# wget https://github.com/maxmind/geoipupdate/releases/download/v3.1.1/geoipupdate-3.1.1.tar.gz

# tar zxvf geoipupdate-3.1.1.tar.gz

# cd geoipupdate-3.1.1

# ./configure

----------------------------------------------------------------------------------------------------------------------------------------------

※ 아래 오류 발생시 조치방법

configure: error: curl header (curl/curl.h) not found. You may need to install a curl development package.

-> curl-devel 설치

# yum install curl-devel

----------------------------------------------------------------------------------------------------------------------------------------------

# make; make install

 

5. geoip 설정파일 설정

1) Geoip.conf (라이센스) 파일 등록

# cd /usr/local/etc; mv GeoIP.conf GeoIP.conf_org

# vi GeoIP.conf

---------------------------------------------------------

AccountID [MaxMind Account ID] 
LicenseKey [MaxMind 회원가입시 제공하는 LicenseKey]
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country

---------------------------------------------------------

 

2) GeoIP DB 파일 업데이트 진행

# /usr/local/bin/geoipupdate

# ll /usr/local/share/GeoIP

-rw-r--r-- 1 root root  7775027 2022-07-08 11:47 GeoLite2-ASN.mmdb
-rw-r--r-- 1 root root 67837494 2022-07-08 11:47 GeoLite2-City.mmdb
-rw-r--r-- 1 root root  5503746 2022-07-08 11:47 GeoLite2-Country.mmdb

 

3) Geoipupdate 스케쥴 crontab 등록

※ 원하는 업데이트 시간 조정하여 등록

# cat <<EEE>> /etc/crontab

00 06 * * 3 root /usr/local/bin/geoipudate

EEE

 

6. 특정 국가의 접근 차단

- 적용 예시로 서버환경에 맞게 변경필요

1) 한국, 미국에서의 접근만 허용

※ httpd.conf 에서 설정

<IfModule maxminddb_module>
        MaxMindDBEnable On
        MaxMindDBFile COUNTRY_DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
        MaxMindDBFile CITY_DB /usr/local/share/GeoIP/GeoLite2-City.mmdb
        MaxMindDBFile ASN_DB /usr/local/share/GeoIP/GeoLite2-ASN.mmdb
        MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
        SetEnvIf MM_COUNTRY_CODE ^(KR|US) AllowCountry
        <Location />
                Deny from all
                Allow from env=AllowCountry
        </Location>
</IfModule>

 

2) 중국에서의 접근 차단

※ httpd.conf 에서 설정

<IfModule maxminddb_module>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBFile CITY_DB /usr/local/share/GeoIP/GeoLite2-City.mmdb
MaxMindDBFile ASN_DB /usr/local/share/GeoIP/GeoLite2-ASN.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
SetEnvIf MM_COUNTRY_CODE ^(CN) BlockCountry
<Location />
Deny from env=BlockCountry
</Location>
</IfModule>

 

3) 도메인별 설정

※ httpd.conf 에서 설정

<ifmodule maxminddb_module>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBFile CITY_DB /usr/local/share/GeoIP/GeoLite2-City.mmdb
MaxMindDBFile ASN_DB /usr/local/share/GeoIP/GeoLite2-ASN.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code

</IfModule>

 

※ vhosts.conf 에서 설정

<VirtualHost *:80>
DocumentRoot /home/test/docs
ServerName test.com
CustomLog logs/test.com-log geoip

<IfModule maxminddb_module>
SetEnvIf MM_COUNTRY_CODE ^(US) AllowCountry
<Location />
Deny From all
Allow from env=AllowCountry
</Location>
</IfModule>
</VirtualHost>

 

4) 로그 설정

※ httpd.conf 에서 수정

 - 접근하는 IP의 국가확인이 가능

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{MM_COUNTRY_CODE}e" geoip

"GET / HTTP/1.1" 200 16157 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" KR

1. Apache 설치를 위한 패키지 설치

Apache HTTP Server 소스 설치를 위한 패키지 

 - gcc

 - gcc-c++

 - pcre-devel

 - expat-devel

 

패키지 yum 설치

 # yum install -y gcc gcc-c++ pcre-devel expat-devel

2. Apache 설치를 위해 필요한 설치파일

Apache HTTP Server 설치를 위해 필요한 설치파일

 - apr 

 - apr-util

 - pcre (Perl Compatible Regular Expressions)

 - httpd

 

설치파일 다운로드

 # wget https://dlcdn.apache.org/apr/apr-1.7.0.tar.gz

 # wget https://dlcdn.apache.org/apr/apr-util-1.6.1.tar.gz

 # wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz

 # wget https://dlcdn.apache.org/httpd/httpd-2.4.53.tar.gz

 

설치파일 압축해제

 # tar xvfz apr-1.7.0.tar.gz

 # tar xvfz apr-util-1.6.1.tar.gz

 # tar xvfz pcre-8.45.tar.gz

 # tar xvfz httpd-2.4.53.tar.gz

 

3. 컴파일 설치

3.1. PCRE 컴파일 설치

 # cd /usr/local/src/pcre-8.4.5

 # ./configure --prefix=/usr/local/pcre

 # make

 # make install

 

3.2 Apache HTTP Server (httpd) 컴파일 설치

  • apr, apr-util 디렉토리를 httpd 디렉토리로 옮긴 후 컴파일 설치 진행

 # mv /usr/local/src/apr-1.7.0 /usr/local/src/httpd-2.4.53/srclib/apr
 # mv /usr/local/src/apr-util-1.6.1 /usr/local/src/httpd-2.4.53/srclib/apr-util 

 # cd /usr/local/src/httpd-2.4.53

 # ./configure --prefix=/usr/local/httpd2 \
--enable-modules=all \
--enable-so \
--with-included-apr \
--with-mpm-shared=all

# make

# make install

  • 각 컴파일 옵션 설명

--enable-modules=all : 모든 모듈 컴파일 
--endable-so : mod_so가 제공하는 DSO 기능 사용
--with-mpm-shared=all : MPM 모듈 세가지 event, prefork, worker를 다이나믹 모듈로 컴파일 
※ apache 2.4 부터 event 모듈 제공, 이전버전은 prefork, worker 2가지 모듈만 사용

※ apache 2.4 부터 mpm 옵션을 주지 않을 경우, default는 event

 

  • make 에러 

 1) fatal error: expat.h: No such file or directory

  -> expat-devel 설치 확인

 # yum install expat-devel

 

4. 실행 및 버전 확인 

 # /usr/local/httpd2/bin/apachectl 

 -> 실행 테스트로 이상없을 경우 Syntax OK 메세지 발생

 # /usr/local/httpd2/bin/apachectl start

 # /usr/local/httpd2/bin/apachectl -V

+ Recent posts