๐บ ๋ชฉ์ฐจ ๐บ(๋ณด์๋ ค๋ฉด ์๋ ๋๋ณด๊ธฐ ๋ฅผ ๋๋ฌ์ฃผ์ธ์.)
1. Nginx + ModSecurity + Fail2ban + Docker => 1. ์ทจ์ฝํ ์น์ฌ์ดํธ
2. Nginx + ModSecurity + Fail2ban + Docker => 2. ModSecurity + Fail2ban ์ค์น
3. Nginx + ModSecurity + Fail2ban + Docker => 3. Fail2ban ์ค์ ๋ฐฉ๋ฒ
4. Nginx + ModSecurity + Fail2ban + Docker => 4. Nginx Limit req ์ค์
5. Nginx + ModSecurity + Fail2ban + Docker => 5. Dockerhub ์ด๋ฏธ์ง ์ฌ์ฉ
์ ๊ธ์์๋ fail2ban ์ผ๋ก ๊ณผ๋ํ ์์ฒญ์ ํ๋ ์์ดํผ๋ฅผ ์ฐจ๋จํ์์ต๋๋ค.
์ด๋ฒ์๋ Nginx ์์ฒด์์ ๊ณผ๋ํ request์ ์ ํ์ ๋ ์ ์๋ ๋ฐฉ๋ฒ๋ ์ดํด๋ด ๋๋ค.
1. nginx.conf ์์
docker/front/nginx.conf ํ์ผ์์ http ๋ธ๋ญ ์์ ์๋์ ๊ฐ์ด ํ ์ค์ ์ ๋ ฅํด ์ค๋๋ค.
limit_req_zone $binary_remote_addr zone=hello:10m rate=1r/s;

โ binary_remote_addr => ํด๋ผ์ด์ธํธ์ IP๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํํ๊ฒ ๋ค๋ ์๋ฏธ
โ zone=hello:10m => hello๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง 10๋ฉ๊ฐ์ง๋ฆฌ ์ฉ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณด (zone ์ด๋ฆ์ ๋ง๋๋ก ์ง์ ์ ์์.)
โ rate : 1 r/s => 1 request / second ์ ์๋ฏธ๋ก 1์ด์ 1๊ฐ์ request๋ง์ ํ์ฉํ๋ค๋ ๋ป (์์๋ก 1์ด๋น 1๊ฐ๋ฅผ ์ค์ ํ์์ง๋ง, ์ค์ฌ ์ด์์์๋ ์ํ ํ ์๋น์ค๋ฅผ ์ํด 10r/s ๋ฑ์ผ๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค.)
2. default.conf ์์
1) docker/front/default.conf ํ์ผ์์ server ๋ธ๋ญ ์์ location ๋ธ๋ญ ์์ ์๋์ ๊ฐ์ด ์ ๋ ฅํด ์ค๋๋ค.
limit_req zone=hello burst=5 nodelay;

โ zone=hello => nginx.conf ์์ ์ง์ ํ zone ์ด๋ฆ๊ณผ ๋์ผํ๊ฒ ์ ๋ ฅํจ.
โ burst=5 => 5๊ฐ์ ์์ฒญ๊น์ง๋ ์์ ํ์ ์ ์ฅ์ ํด๋ ํ ์์ฐจ์ ์ผ๋ก ํต๊ณผ๋ฅผ ์ํจ๋ค๋ ๋ป์ ๋๋ค. ์nginx.conf์์ rate=1r/s ๋ผ๊ณ ํ์๊ธฐ์, ๋ง์ฝ 1์ด์ 10๊ฐ์ request๊ฐ ๋ค์ด์จ๋ค๋ฉด, ํ๋๋ ๋ฐ๋ก ํต๊ณผ์ํค๊ณ , 2~6๋ฒ์งธ ์์ฒญ์ ํ์ ์ ์ฅ ํ ์์ฐจ์ ์ผ๋ก ํต๊ณผ์ํต๋๋ค. 7~10๋ฒ์งธ ์์ฒญ์ ๋ฐ๋ก ๋ฌด์๋์ด 503 ์ค๋ฅ๊ฐ ๋จ๊ฒ ๋ฉ๋๋ค.

โ nodelay => ์ด ๋ช ๋ น์ ๋ฃ์ง ์์ผ๋ฉด ๋ฐ๋ก ์ burst ์ค๋ช ์ฒ๋ผ 1์ด๋ง๋ค ์์ฐจ์ ์ผ๋ก ํต๊ณผ์์ผ 6๋ฒ์งธ ์์ฒญ์ 5์ด ํ์ ์คํ์ด ๋๊ธฐ์ ์๋น์ค๊ฐ ๋๋ฌด ๋๋ฆฐ ๊ฒ์ฒ๋ผ ๋๋ผ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์, nodelay ์ค์ ์ ์ถ์ฒํ๋ฉฐ, ํ์ ๋ค์ด์๋ ์์ฒญ์ ๋ํด ์๊ฐ ๊ฐ๊ฒฉ์ ๋์ง ์๊ณ ์ง์ฐ์์ด ๋ฐ๋ก ์ฒ๋ฆฌํด ๋ฒ๋ฆฝ๋๋ค.
2) ์ค๋ฅ ํ์ด์ง ๋ณ๊ฒฝ (503 -> 429 ๋ก ๋ณ๊ฒฝ)
limit_req_status 429;


3. log ํ์ธ
1) error.log ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ ํ์ ์ด๊ณผํ request๋ค์ ์๋ฌ ๋ก๊ทธ์ ํ์๋ฉ๋๋ค.

2) fail2ban.log ๋ฅผ ๋ณด๋ฉด [nginx-req-limit] ๊ท์น์ด ๋ณด์ ๋๋ค.

4. jail.conf
docker/fail2ban/jail.conf ํ์ผ์ ์ด์ด๋ณด๋ฉด [nginx-req-limit] ๋ถ๋ถ์ด ์์ต๋๋ค. ์ฌ๊ธธ ๋ณด๋ฉด error.log๋ฅผ ๊ฐ์ํ๊ณ ์์ผ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ findtime, bantime, maxretry ๊ฐ์ ์์ ํด์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.

๐บ๐บ ์์ ํ ๋ชจ๋ ์์ค๋ ์๋ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๐บ๐บ
https://github.com/mmssem/ModSecurityFail2ban/releases/tag/์ต์ข ํ์ผ
Release ์ต์ข ํ์ผ ยท mmssem/ModSecurityFail2ban
์ต์ข ํ์ผ
github.com