■ HTTP/2 ?

'HTTP/2'는 웹 브라우저와 서버간 통신하는데 사용되는 프로토콜로, 표준 프로토콜인 HTTP/1.1 보다 속도나 보안적으로 향상된 기능을 제공합니다. 

 

■ 설치 및 사용 조건

1) Apache 2.4.17부터 HTTP/2 를 지원하였지만 보안취약점이 발견된것으로 확인되며, 패치된 Apache 2.4.26 이상 버전에서 사용을 권장드립니다.

2) 해당 모듈을 사용하기 위해서는 openssl-1.0.2 버전 이상이 필요합니다. Centos 6은 oepnssl-1.0.1이 기본적으로 설치되므로, 별도로 설치 해줘야 합니다.

3) 현재 대부분 브라우저에서 HTTP/2 프로토콜 이용의 조건으로 TLS Handshake를 전제하고 있어, SSL 인증서를 사용하여야 합니다.

4) HTTP/2 프로토콜 사용은 위해서는 아파치 event mpm을 사용해야 합니다.
→ 현재 prepork mpm에서는 호환성 문제와 알려지지 않은 버그가 존재하여, 아파치 공식 홈페이지에서도 event 방식을 권장합니다.

 

■ libnghttp2 설치

Apache mod_http2를 설치하기 위해서는 libnghttp2 1.2.1 이상이 설치되어 있어야 합니다.

→ CentOS 6 에서도 yum 저장소에서 1.6.0 버전이 설치되어 http2 모듈 사용이 가능합니다.

# yum install libnghttp2 libnghttp2-devel
# rpm -qa |grep http2
libnghttp2-devel-1.33.0-1.1.el7.x86_64
libnghttp2-1.33.0-1.1.el7.x86_64


# Centos 6
# yum list |grep http2
libnghttp2.i686 1.6.0-1.el6.1 epel
libnghttp2-devel.i686 1.6.0-1.el6.1 epel

 

■ Apache 설치

컴파일 옵션에 아래와 추가하여 컴파일 합니다.

--enable-http2
mod_http2를 사용하기 위한 옵션으로 추가해줍니다.


--with-ssl=/usr/local/openssl
Openssl을 사용하기 위한 옵션으로, Centos7에서 기본 설치되는 Openssl 버전은 1.0.2k로 생략해도 되는 옵션입니다.
다만, Centos 6 같은 경우 openssl 을 업그레이드 해야므로 위 옵션을 추가해줘야 합니다.

# ./configure \

--prefix=/usr/local/httpd2 \
--enable-modules=all \
--enable-charset-lite \
--enable-so \
--with-included-apr \
--with-mpm-shared=all \
--enable-http2 \
--with-ssl=/usr/local/openssl \
--with-mpm=event


# make
# make install

 

■ HTTP/2 활성화

# httpd.conf 파일에 추가 및 확인
LoadModule http2_module modules/mod_http2.so

ProtocolsHonorOrder On
Protocols h2 h2c http/1.1


ProtocolsHonorOrder : 'Protocols' 에 나열한 순서대로 우선순위를 결정한건지 선택하는 옵션 (on|off)
Protocols : 호스트에서 지원되는 프로토콜 목록을 지정하는 옵션.

 

HTTP/2는 SSL 인증서를 설치 후 사용 가능합니다.

아파치 웹로그로 예시를 보여드립니다.

# SSL 인증서 미사용
SEKK.hktest.shop 8323 - - [06/Dec/2021:10:24:35 +0900] "GET / HTTP/1.1" 200 6 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"


SSL 인증서 사용
SEKK.hktest.shop 8959  - - [06/Dec/2021:10:27:19 +0900] "GET / HTTP/2.0" 200 6 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"

 

■ HTTP/2 활성화 테스트 방법

1. openssl를 이용한 확인 ( openssl 1.0.2 이상 )

# http2 프로토콜 활성화 했을경우 리턴값
# openssl s_client -alpn h2 -connect SEKK.hktest.shop:443 | grep ALPN

verify return:1
ALPN protocol: h2


# http2 프로토콜 활성하지 않았을 경우 리턴값
# openssl s_client -alpn h2 -connect SEKK.hktest.shop:443 | grep ALPN
verify return:1
ALPN protocol: http/1.1

 

2. httpd2.pro 를 이용한 확인

# http2 프로토콜 활성화 했을경우

# http2 프로토콜 활성하지 않았을 경우

 

'Linux > Apache' 카테고리의 다른 글

GeoIP2(MaxMind) Apache Module 설치 및 DB 업데이트  (0) 2022.03.23
Apache 2.4.52 설치  (0) 2022.03.23

■ GeoIP

- MaxMind 에서 제공하는 모듈과 IP정보 DB 를 통해서 웹에 접근하는 IP의 국가별로 확인할 수 있도록 도와주는 솔루션 입니다. 해외에서의 불필요한 접근을 차단하기 위해 자주 사용합니다.

- 2022년 5월 말에 GeoIP Legacy DB (.dat 확장자) 업데이트가 중단될 예정이며, 이에 따라 MaxMind 사에서 제공하는 GeoIP2(MaxMind) Apache Module 를 설치하여 사용하는것을 권장합니다.

 

■ libmaxminddb 설치

mod_maxminddb를 설치하기 위한 라이브러리 설치.

# yum install libmaxminddb libmaxminddb-devel

 

■ mod_maxminddb 설치

mod_maxminddb 모듈은 Apahce 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 zxvf mod_maxminddb-1.2.0.tar.gz
# cd mod_maxminddb-1.2.0
# ./configure --with-apxs=/usr/local/httpd2/bin/apxs
# make; make install

# 설치한 모듈 확인

-rwxr-xr-x 1 root root 49732 2021-11-23 14:23 mod_maxminddb.so
# cat /usr/local/apache/conf/httpd.confLoadModule maxminddb_module modules/mod_maxminddb.so

 

■ geoipupdate 설치

 geoipupdate를 사용하기 위해서는 maxmind 홈페이지에서 회원가입 후, 라이센스를 발급받아야 합니다.

회원가입 및 라이센스 발급 방법은 추후 업데이트 하도록 하겠습니다.

# 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
# make ; make install


# GeoIP.conf (라이센스) 파일 등록
# cd /usr/local/etc
# cat GeoIP.conf
AccountID 
LicenseKey 
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country


# GeoIP DB 파일 업데이트 진행.
# /usr/local/bin/geoupdate
# ll /usr/local/share/GeoIP
-rw-r--r-- 1 root root 7485474 2021-11-23 14:40 GeoLite2-ASN.mmdb
-rw-r--r-- 1 root root 74189738 2021-11-23 14:41 GeoLite2-City.mmdb
-rw-r--r-- 1 root root 6000017 2021-11-23 14:41 GeoLite2-Country.mmdb


# geoipupdate 스케쥴 등록
# cat <<EEE>> /etc/crontab
# GeoIP DB Update
00 06 * * 3 root /usr/local/bin/geoipupdate/geoipupdate
EEE

 

■ 특정 국가에서의 접근 설치

아래는 적용 예시입니다. 서버환경에 맞게 변경이 필요합니다.

 

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

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. 베트남에서의 접근 차단

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 ^(VN) 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>


<VirtualHost *:80>
DocumentRoot /home/SEKK/docs
ServerName SEKK.hktest.shop
CustomLog logs/SEKK.hktest.shop-log geoip

<IfModule maxminddb_module>
SetEnvIf MM_COUNTRY_CODE ^(US) AllowCountry

<Location />

Deny From all
Allow from env=AllowCountry
</Location>

</IfModule>

</VirtualHost>

 

4. 로그 Format 설정

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


- - [23/Nov/2021:17:50:26 +0900] "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

'Linux > Apache' 카테고리의 다른 글

Http2 Apache Module 설치  (0) 2022.03.23
Apache 2.4.52 설치  (0) 2022.03.23

 

■ apr, apr-util 설치

# cd /usr/local/src/; wget https://dlcdn.apache.org//httpd/httpd-2.4.52.tar.gz
# tar zxvf httpd-2.4.52.tar.gz

# cd /usr/local/src; wget https://dlcdn.apache.org//httpd/httpd-2.4.52.tar.gz
# tar zxvf httpd-2.4.52.tar.gz

#cd /usr/local/src; wget https://dlcdn.apache.org//apr/apr-1.7.0.tar.gz
# tar zxvf apr-1.7.0.tar.gz

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

■ Apache 설치

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

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


# make
# make install

■ lua 설치

# cd /usr/local/src/; wget https://www.lua.org/ftp/lua-5.3.4.tar.gz
# cd lua-5.3.4
# make linux
# make install

■ pcre 설치

# cd /usr/local/src; wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz/download
# cd pcre-8.45
# ./configure --prefix=/usr/local/pcre --enable-shared
# make
# make install


'Linux > Apache' 카테고리의 다른 글

Http2 Apache Module 설치  (0) 2022.03.23
GeoIP2(MaxMind) Apache Module 설치 및 DB 업데이트  (0) 2022.03.23

+ Recent posts