brunch

Nginx 마스터링-8

기본 설치부터 스크립트(init)를 이용한 자동화 배포

by Younggi Seo





클라우드 보안팀에서 서비스 지연 공격이 웹상의 방화벽에서 탐지가 되는지 테스트해 본 적이 있다. 마이크로소프트의 클라우드, 애저(Azure)에서 사용하는 웹방화벽(WAF)의 정책 유효성을 테스트하기 위함이었다. 이를테면, 쇼핑사이트로 들어가는 트래픽이 잘게 쪼개져서 서비스 관문에 일시에 몰린다? 온라인 쇼핑몰 이용자의 웹페이지 뜨기가 지연되고, 이 서비스 거부(DoS) 공격이 먹힌 거다. 그래서 방화벽에서 이를 탐지해서 해당 통신 기류를 차단시키거나, 다른 데로 흘러 보내는 우회(Bypass) 정책이 미리 설정되어야 한다.


당시 필자가 국내 블로그를 참고해서 파이썬으로 자동화 공격 스크립트를 만들었다. 세 가지 종류의 대용량 트래픽 공격에 따라, 클라우드에 배포한 웹서버의 공인 아이피**만 입력하면 앞 단의 웹방화벽을 통해서 이 DoS(Denial of Service) 공격을 탐지할 수 있는지 말이다.


필자가 레드팀(공격) 역할을 수행했다면, 같은 팀의 한 구성원이 블루팀(방어) 역할을 맡아서 본인이 난사한 네트워크 패킷을 '와이어 샤크(Wire shark)*'라는 패킷 분석 툴로 확인해 보았다. 그런데 공격 스크립트를 만들어서 팀 구성원 전부에게 공유해 줬는데도 불구하고, 이 팀원은 자꾸 본인에게 공격을 또 해달라고 졸라댔다(요청한 팀원들 대부분이 최소 두 번은 했다). 한두 번이면 모르지, 패킷을 까서 공격 패턴 판별여부까지 확인시켜 줬는데, 또 조르는 거였다.


이럴 때, 필요한 게 자동화 스크립트다. 파이썬이라는 프로그래밍 언어는 커맨드단(OS)에서 실행할 수 있는 라이브러리를 쉽게 가져올 수 있기 때문에, 리눅스에 내장된 펄(Perl)이나, Vim(내장 쉘 스크립트 에디터) 보다 더 간편한 IDE 환경(Visual Studio)에서 작성할 수 있다. 어쨌든 자동화 스크립트로 실행이 잘 안 되어 문의해 온 팀원에게는 코드를 디버깅해서 똑바로 만들어 배포해 줄 뿐만 아니라 수동으로 공격해줘야 했다. 하지만, 아까 그 팀원처럼 본인이 만든 스크립트 킷을 사용 한 번 안 해보고, 무작정 공격 개시를 요청하는 유형은 공격을 예방하기 위해 뭔가 대응책을 마련하기보다는, 해킹 사고가 또 본인이 생각하는 공격의 유형으로 터지기를 바라는 것과 다름없다고 생각한다.






여하튼 지금까지 이론으로만 알아본 Nginx를 실제로 배포할 때, 자동화 스크립트로 처리해서 배포가 가능하다. init 스크립트를 생성해서 이 파일을 통해 시스템 부트 시퀀스***를 수정해서 원하는 타이밍에 Nginx 서비스를 스케쥴링시킬 수 있다. 방법은 다음 편부터 다루겠다.


참고로 아파치와 Nginx 웹서버의 비교는 이 매거진의 앞선 섹션을 통해서 확인할 수 있는데, ChatGPT가 요약해 준 수준을 완전히 뛰어넘는 사이트의 글이 있어서 아래에 링크 걸었다. 영어를 온전히 학습해야 하는 까닭은 아직까지 인터넷의 70퍼센트 이상은 이렇게 영어로 파악이 가능하기 때문이다. 오른쪽 마우스 클릭해서 한국어로 번역이 가능하더라도(발번역), 이 또한 아까 말한 팀원과 같이 내가 갈구하는 IT 용어에 대한 개념이 영미권 테크 구루에 의해서 작성되기를 기다리는 것과 다름없다고 생각한다.




* 와이어 샤크 : 네트워크에서 캡처한 데이터(패킷 페이로드)를 이해하게 해주는 도구다.


** 웹서버의 공인 아이피 : 웹방화벽 뒷단에 있는 웹서버의 리얼 IP를 말한다. 공격을 할 때 웹방화벽을 목적지로 하지 않고, 대상 서버(VM)의 아이피를 목적지 주소로 하지, 웹방화벽의 정책을 테스트한다고, 웹방화벽 아이피(가상 IP)를 공격 아이피로 입력하지는 않는다.


*** 시스템 부트 시퀀스 : 컴퓨터가 시작할 때, OS(Linux Kernel 가정) 내부에서 제일 먼저 시작되는 과정으로, systemd가 부팅 프로세스를 초기화하고 실행한다.


keyword
매거진의 이전글Nginx 마스터링-7