πΊ λͺ©μ°¨ πΊ(보μλ €λ©΄ μλ λ보기 λ₯Ό λλ¬μ£ΌμΈμ.)
μ·¨λ―Έλ‘ νλ‘κ·Έλλ°μ νλ©΄μ λ§λ λͺ κ°μ μΉμλΉμ€λ€μ λͺ κ°μ ν리ν°μ΄ μλ²μμ μ΄μνκ³ μμ΅λλ€.
κ·Έλ¬λ€λ³΄λ μλ²λ§λ€ νΈλν½μ μ΄λ μ λμΈμ§, μ μμ μλ μ΄λ μ λ λλμ§, μλ²λ μ£½μ§ μμλμ§ λ κΆκΈνμ΅λλ€. μμ μ νΈμ€ν μ μ΄μ©ν λ νΈλν½ μ΄κ³Όλ‘ μ μμ΄ μ°¨λ¨λ μ μ΄ μμκΈ° λλ¬Έμ λλ€. λꡬλ awsλ λ¬΄λ£ νΈλν½μ΄ μ΄κ³Όλλ©΄ μ¬μ© μκΈμ΄ λμ¬ν λκΉμ.
μνλ TVμμ 보면 μλ§μ λͺ¨λν°λ₯Ό ν΅ν΄ μλ² μ¬μ©λ, νΈλν½ λ±μ 체ν¬νλ λͺ¨μ΅λ€μ 보면 λλ κ·Έλ° κ²μ ν΄λ³΄κ³ μΆλ€λ μκ°μ ν΄λ³΄μμ΅λλ€. νμ§λ§, κ·Έλλ μ§μ μλ²λ₯Ό μ΄μνμ§ μμκΈ°μ λμ μκ΄μλ μ΄μΌκΈ°λΌ λκ²Όμ§λ§, μ¬ λ€μ΄ λͺκ°μ λ¬΄λ£ ν΄λΌμ°λ μλ²λ₯Ό ꡬμΆνκ² λμκ³ , μ΄μ λλ κ·Έλ° κ²λ€μ ν΄λ³΄κ³ μΆλ€λ μκ°μ ν΄λ³΄μμ΅λλ€.
κ·Έλμ λͺκ°μ§ λ¬΄λ£ λͺ¨λν°λ§ νλ‘κ·Έλ¨μ μκ² λκ³ , μ§μ μ€μΉλ₯Ό ν΄λ³΄μμ§λ§ λ²λ²ν μ€ν¨λ₯Ό νκ² λμμ΅λλ€. 리λ μ€ μ’ λ₯ λλ¬Έμ, λ²μ λλ¬Έμ, κΈ°ν μ¬λ¬ μ΄μ λλ¬Έμ μ½μ§ μμ μμ μ΄μμ΅λλ€. μ€ν¨νκ³ λμλ λ€μ μλ²λ₯Ό μμ ν μ²μλΆν° λ€μ μμ± λ° μ€μΉλ₯Ό λ°λ³΅νλ€λ³΄λ λ무 μκ°λ κ±Έλ¦¬κ³ μ΄λ €μ΄ μμ μ΄μμ΅λλ€.
κ·Έλ¦¬κ³ , νλμ ν¬κΈ°λ₯Ό νλ€κ°, dockerλ₯Ό μ΄μ©νλ λ°©λ²μ μκ² λμκ³ , μ λ§ μμ½κ² μ¬λ¬ νλ‘κ·Έλ¨μ μ€μΉνλ€, μ§μ λ€λ₯Ό λ°λ³΅ν΄ λ³Ό μ μμμ΅λλ€.
κ·Έλ¦¬κ³ , μ λ§ μ’μ κ²μ μ§μ μλ μλμ°μ¦ μ»΄ν¨ν°μμ λ컀λ₯Ό μ΄μ©νμ¬ μΆ©λΆν ν μ€νΈνμ¬ μ±κ³΅ν ν, ν΄λΌμ°λ μλ²λ‘ μ¬λ € μ€νμ ν΄λ³΄λ©΄ λλΆλΆ λ¬Έμ μμ΄ μ μ€νμ΄ λλ€λ κ²μ λλ€. κ·Έλ¬κΈ°μ, μ€μ μ λ§μλλ‘ μ΄λ κ² μ λ κ² μμλ² λ°κΎΈμ΄κ°λ©΄μ μμ£Ό μμ½κ²(?) 곡λΆλ₯Ό ν΄λ³Ό μ μμμ΅λλ€.
μ΄μ , μ§λ λ λ¬ κ°κΉμ΄ μ¬λ―Έμκ² ν μ€νΈ ν΄ λ³Έ λͺκ°μ§ λ¬΄λ£ μλ² λͺ¨λν°λ§ κ³΅λΆ λ΄μ©μ κΈ°λ‘μΌλ‘ λ¨κ²¨λ΄ λλ€.
λ€λ§, μ¬κΈ°μμ μκ°νλ λ΄μ©λ€μ λͺ¨λ docker-compose.yml μ μ΄μ©νμ¬ μ¬λ¬ νλ‘κ·Έλ¨λ€μ μμ£Ό μμ½κ² νλ²μ λͺ¨λ μ€μΉνλ λ°©λ²μ λλ€.
κ·Έλ¦¬κ³ , κΈ°λ³Έ μΉμλ² νλ‘κ·Έλ¨λ€μ μ΄μ κ²μκΈμμ μ¬μ©νμλ μ΅μ’ μμ€λ₯Ό μ¬μ©ν κ²μ λλ€.
https://github.com/mmssem/ModSecurityFail2ban/releases/tag/μ΅μ’ νμΌ
π΄ μ μμ€μλ dockerfileμ μ΄μ©νμ¬ μ΄λ―Έμ§λ₯Ό μ§μ μμ±νλ μ½λκ° λ€μ΄μμ΅λλ€. μ΄λ κ² νλ©΄ μκ°μ΄ λ¬΄μ² κ±Έλ¦½λλ€. λ°λΌμ, μ μμ€μμ λ± νμ€μ κΌ μμ νμ ν, μλ λ΄μ©μ ν μ€νΈ ν΄λ³΄μκΈ° λ°λλλ€. λ¬Όλ‘ μκ°μ΄ λ§μΌμλ€λ©΄ μ μμ€λ₯Ό κ·Έλλ‘ μ¬μ©νμ λ λ©λλ€. μμ€ μμ λ΄μ©μ μλ κ²μκΈμ μ°Έκ³ νμκΈ° λ°λλλ€.
Nginx + ModSecurity + Fail2ban + Docker => 5. Dockerhub μ΄λ―Έμ§ μ¬μ©
1. vnstat
1) vnstatλ μλ μ½μ κΈ°λ° λ€νΈμν¬ νΈλν½ λͺ¨λν°μ λλ€. κ°κ°μ μΈν°νμ΄μ€μ λν μκ°λ³, μΌλ³ λ° μλ³ νΈλν½ κΈ°λ‘μ λ³Ό μ μμ΅λλ€.
2) dockerλ₯Ό μ΄μ©νμ¬ μ€μΉλ₯Ό νλ©΄ μμ£Ό μμ½κ² μ€μΉλ₯Ό νμ¬ μ¬μ©ν μ μμΌλ©°, μμ£Ό κ°λ¨ν λ°©λ²μΌλ‘ μΉμμλ μμ½κ² λͺ¨λν°λ§ ν μ μμ΅λλ€.
μ°Έκ³ λ‘ vnstatμ λ컀 νλΈ μ΄λ―Έμ§λ μλμ κ°μ΅λλ€.
vergoh/vnstat - Docker Image | Docker Hub
3) docker-compose.yml μμ
#### μ λΆλΆ λμΌ ####
services:
front_nginx:
container_name: front_nginx_cname
image: mungkhs/nginxwaf:1.1 #π΄DockerHubμ μ¬λ €μ§ μ°λ¦¬μ μ΄λ―Έμ§λ₯Ό μ΄μ©ν¨.
restart: always
privileged: true
ports:
- "80:80"
- "81:81"
- "82:82"
- "8685:8685" #π΄ vnstatμ μν ν¬νΈ μΆκ° λΆλΆ
volumes:
#### κΈ°μ‘΄ docker-compose.yml νμΌ λ§¨ λ°μ μλ λ΄μ© μΆκ° ####
vnstat:
image: vergoh/vnstat:latest
container_name: vnstat
restart: unless-stopped
network_mode: "host"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- vnstatdb:/var/lib/vnstat
environment:
- HTTP_PORT=0
vnstati:
image: vergoh/vnstat:latest
container_name: vnstati
restart: unless-stopped
#ports:
# - "8685:8685"
expose:
- 8685 #μ¬κΈ°μλ nginxμ νλ‘μ κΈ°λ₯μ μ΄μ©ν¨.
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- vnstatdb:/var/lib/vnstat:ro
environment:
- HTTP_PORT=8685
- HTTP_LOG=/dev/stdout
- LARGE_FONTS=0
- CACHE_TIME=1
- RATE_UNIT=1
- PAGE_REFRESH=0
- RUN_VNSTATD=0
networks:
- mung_net
volumes: #μ vnstatμ vnstatiμμ μ¬μ©νλ volumes
vnstatdb: #μ΄ λ³Όλ₯¨ μμ κ³Όκ±° κΈ°λ‘κΉμ§ 차곑차곑 μ μ₯λ¨.
π΄ μλ²μμ μμ²λΌ μ¬μ©νλ €λ©΄ λ°λμ 8685 ν¬νΈλ₯Ό μ΄μ΄μ£Όμ΄μΌ ν©λλ€.
β μμμ portsλ₯Ό μ΄μ©νλ©΄, front_nginx μ 리λ²μ€ νλ‘μ κΈ°λ₯μ μ¬μ©νμ§ μκ³ μΈλΆμμ 8685 ν¬νΈλ‘ μ§μ μ μν μλ μμ΅λλ€. λν, μλ²μμ 8685 ν¬νΈλ₯Ό μ΄μ§ μκ³ , front_nginx μ 리λ²μ€ νλ‘μ κΈ°λ₯μ μ΄μ©νμ¬ μ€λ‘μ§ 80ν¬νΈλ§ μ΄μ΄λκ³ , νμ λλ ν 리λ₯Ό 8685 ν¬νΈλ‘ μ°κ²°νμ¬ μ¬μ©ν μλ μμ΅λλ€.
πΊ λ€λ§, μΆν λλ©μΈμ μ°κ²°ν ν κ·Έ νμ λλ©μΈμ μ΄μ©νλ€λ©΄, μ€λ‘μ§ 80ν¬νΈλ§ μ΄μ΄λκ³ , front_nginx μ 리λ²μ€ νλ‘μ κΈ°λ₯μΌλ‘ νμ λλ©μΈ μ€ νλλ₯Ό vnstatλ‘ μ°κ²°ν μ μκΈ°μ μ λ μ΄λ κ² μ€μ νλ κ²μ μ νΈν¨μ μ°Έκ³ νμκΈ° λ°λλλ€.
π΄β¨β¨π΄ μ΅κ·Όμ μκ² λμλ€μ. vnstatμμ μ€νμ€μΈ 컨ν μ΄λ μ€ λͺκ°κ° 보μ΄μ§ μλλ€λ μ¬μ€μμ. μ΄μ λ₯Ό νμΈν΄ 보λ, μ¬λ¬ 컨ν μ΄λκ° μμ±λ λ vnstat 컨ν μ΄λ μμ± μ΄νμ μμ±λλ λ€λ₯Έ 컨ν μ΄λλ€μ 보μ΄μ§ μλλ€λ μ¬μ€μμ. κ·Έλμ vnstat 컨ν μ΄λλ₯Ό 맨 λ§μ§λ§μ μμ±λλλ‘ νμλλ μ΄μ λͺ¨λλ€ μ 보μ΄λ€μ. depends_on λͺ λ ΉμΌλ‘ λ€λ₯Έ 컨ν μ΄λκ° λͺ¨λ μμ±λ νμ vnstatκ° μμ±λλλ‘ νμκΈ° λ°λλλ€.
https://mungkhs1.tistory.com/54 μ°Έκ³
(νκ°μ§ λ) 컨ν μ΄λλ€μ μ¬μμ± νκ²λλ©΄, vnstat μμλ μ΄μ 컨ν μ΄λλ€ κ²°κ³Όλ§ λ³΄μ¬ μ λλ‘ μλμ΄ λμ§ μμ΅λλ€. μ΄λλ 컨ν μ΄λ μ¬μμ± μ μ, vnstatμ λ³Όλ₯¨μΈ vnstatdbλ₯Ό λ¨Όμ μμ ν μ¬μμ±νμλ©΄ λ©λλ€.
4) docker/front/difault.conf μμ
#### μλΆλΆμ λμΌνλ©°, 맨 μλμͺ½μ μλμ κ°μ΄ server λΈλμ μΆκ°ν¨ ####
server {
listen 8685;
location / {
proxy_pass http://vnstati:8685;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
5) docker-compose.ymlλ‘ μ»¨ν μ΄λ μμ±ν ν, 8685 ν¬νΈλ‘ μ μμ ν΄λ΄ λλ€.
π΄ μ²μμλ μ μ₯λ κΈ°λ‘μ΄ μκΈ°μ μλμ κ°μ΄ λνλ©λλ€.
β μ΄λ μ λ μκ°μ΄ μ§λλ©΄ μλμ κ°μ νλ©΄μ λ³΄μ€ μ μμ΅λλ€.
β μμμ νΉμ νλͺ©μ λλ¬λ³΄λ©΄ μ’λ μμΈν λ΄μ©μ λ³΄μ€ μ μμ΅λλ€.
2. vnstatμ λ¨μ λ° ν΄κ²°
μμμ 보λ―μ΄ veth~~~~~ μ΄λ° μμΌλ‘λ§ λμ€κ³ , 컨ν μ΄λ μ΄λ¦μ΄ λμ€μ§ μμ΅λλ€. 컨ν μ΄λκ° μ μΌλ©΄ μκ΄μμ§λ§, μ‘°κΈ λ§λ€λ©΄ μ΄λκ² μ΄λ κ²μΈμ§ ꡬλ³νκΈ°κ° μ΄λ ΅μ΅λλ€. μ΄λ΄ κ²½μ° λͺκ°μ§ λͺ λ Ήμ ν΅ν΄ νμΈμ νκ³ , μ΄λ¦μ μ§μ ν΄ μ€ μ μμ΅λλ€.
μμΈν λ΄μ©μ μμ μ κΈ°λ‘ν΄ λμλ κΈμ μ°Έκ³ ν΄ μ£ΌμκΈ° λ°λλλ€.
https://mungkhs1.tistory.com/54
πΊπΊ μμ ν λͺ¨λ μμ€λ μλ λ§ν¬μμ νμΈνμ€ μ μμ΅λλ€. πΊπΊ
https://github.com/mmssem/ServerMonitoring