본문 바로가기

리눅스

우분투에 Nginx와 ModSecurity 모듈을 설치하고 OWASP를 적용하는 방법-edit

728x90

우분투에 Nginx와 ModSecurity 모듈을 설치하고 OWASP ModSecurity Core Rule Set을 적용하는 방법

Nginx 설치

  • 설치되어 있는 nginx 삭제
sudo apt-get purge -y nginx nginx-* && sudo apt-get autoremove -y nginx nginx-*
  • nginx 저장소 삭제
sudo add-apt-repository -y --remove ppa:ondrej/nginx

nginx 설치 스크립트

sudo curl -fsSL https://raw.githubusercontent.com/anti1346/zz/main/ubuntu/nginx_install.sh | bash
더보기

---

nginx 저장소 추가

  • 안정적인 PPA
sudo add-apt-repository -y ppa:ondrej/nginx
메인라인 PPA
sudo add-apt-repository -y ppa:ondrej/nginx-mainline
sudo apt-get update
  • nginx 패키지 설치
sudo apt-get install -y nginx
$ nginx -v
nginx version: nginx/1.24.0

---

빌드 패키지 설치

sudo apt-get install -y gcc make build-essential libtool autoconf automake pkg-config
sudo apt-get install -y zlib1g-dev libcurl4-openssl-dev libxml2-dev libpcre3-dev libpcre2-dev ssdeep doxygen
sudo apt-get install -y libyajl-dev libgeoip-dev libmaxminddb-dev liblmdb-dev libfuzzy-dev lua5.3-dev
sudo apt-get install -y dpkg-dev uuid-dev
sudo apt-get install -y openssl libssl-dev

ModSecurity 다운로드 및 컴파일

작업 디렉토리로 이동

cd /usr/local/src

ModSecurity 소스 코드 다운로드

git clone --depth 1 -b v3/master --single-branch \
https://github.com/owasp-modsecurity/ModSecurity.git
cd ModSecurity
git submodule init
git submodule update
bash build.sh
./configure --with-lmdb --with-ssdeep
make -j4
make install

Nginx 커넥터 다운로드

sudo mkdir -p /usr/local/src/nginx
sudo chown _apt:nogroup /usr/local/src/nginx

작업 디렉토리로 이동

cd /usr/local/src/nginx

Nginx 커넥터 다운로드

git clone --depth 1 https://github.com/owasp-modsecurity/ModSecurity-nginx.git

Nginx 소스 코드 다운로드

더보기

---

ondrej-ubuntu-nginx-jammy.list 파일에서 deb-src 라인에 주석을 제거합니다.

sudo vim /etc/apt/sources.list.d/ondrej-ubuntu-nginx-jammy.list
deb https://ppa.launchpadcontent.net/ondrej/nginx/ubuntu/ jammy main
deb-src https://ppa.launchpadcontent.net/ondrej/nginx/ubuntu/ jammy main

(또는)

sudo sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list.d/ondrej-ubuntu-nginx-jammy.list

---

echo "deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu jammy nginx" \
>> /etc/apt/sources.list.d/nginx.list
sudo apt-get update
cd /usr/local/src/nginx

nginx 소스 코드 다운로드(nginx source code)

sudo apt-get source nginx
$ ls -l
total 1168
drwxr-xr-x 10 root root     183 Feb 26 21:48 nginx-1.24.0
-rw-r--r--  1 root root   72736 Feb 26 18:22 nginx_1.24.0-2+ubuntu22.04.1+deb.sury.org+3.debian.tar.xz
-rw-r--r--  1 root root    4012 Feb 26 18:22 nginx_1.24.0-2+ubuntu22.04.1+deb.sury.org+3.dsc
-rw-r--r--  1 root root 1112471 May 26  2023 nginx_1.24.0.orig.tar.gz
-rw-r--r--  1 root root     683 May 26  2023 nginx_1.24.0.orig.tar.gz.asc

소스 코드를 다운로드한 후에는 다운로드한 소스 버전이 설치된 Nginx 버전과 일치하는지 확인해야 합니다.

cd /usr/local/src/nginx/nginx-1.24.0
apt build-dep nginx
./configure --with-compat --with-openssl=/usr/include/openssl/ --add-dynamic-module=../ModSecurity-nginx
더보기

---

./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.24.0/debian/debuild-base/nginx-1.24.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' \
--with-openssl=/usr/include/openssl \
--add-dynamic-module=../ModSecurity-nginx

---

make modules

Nginx 모듈 활성화

sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/
$ ls -la /etc/nginx/modules/ngx_http_modsecurity_module.so
-rwxr-xr-x 1 root root 231632 Feb 27 15:13 /etc/nginx/modules/ngx_http_modsecurity_module.so

nginx 모듈 로드

vim /etc/nginx/nginx.conf
load_module modules/ngx_http_modsecurity_module.so;

ModSecurity 규칙 구성

sudo mkdir /etc/nginx/modsec
cd /etc/nginx/modsec
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsecurity/unicode.mapping

OWASP CRS 설치 및 활성

cd /usr/local/src

OWASP ModSecurity Core Rule Set 다운로드

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz

압축 해제

tar -zxf v3.3.5.tar.gz
mv coreruleset-3.3.5 /usr/local/.

설정 파일 복사

cp crs-setup.conf.example crs-setup.conf

설정 파일 편집

Nginx 설정 수정

vim /etc/nginx/modsec/main.conf
# Include the recommended configuration
Include /etc/nginx/modsec/modsecurity.conf

# A test rule
#SecRule ARGS:testparam "@contains test" "id:1234,deny,log,status:403"

# OWASP CRS v3 rules
/usr/local/coreruleset-3.3.5/crs-setup.conf
/usr/local/coreruleset-3.3.5/rules/*.conf

Nginx 재시작

sudo systemctl restart nginx

 

Nginx에 ModSecurity와 OWASP CRS가 추가되어 웹 애플리케이션의 보안이 강화됩니다. OWASP CRS의 보안 규칙이 적용되어 SQL 인젝션, 크로스 사이트 스크립팅 등과 같은 공격으로부터 보호됩니다.

 

 

728x90