brunch

Nginx 마스터링-9

Nginx 1.29.3 다운로딩 및 설치

by Younggi Seo




해커들이 보통 해킹을 하면 가장 많이 뚫고 싶어 하는 리소스(서버)가 뭘까?


서버의 종류에는 DB(데이터베이스) 서버, 웹서버, 와스(WAS) 또는 개발서버 등 많이 있다. 그중에 가장 민감한 데이터가 보관되는 DB서버를 한 개 뚫으면 그 사이트의 인력 인사 정보를 볼 수 있으니, 나쁘지 않을 거 같다. 실제로 필자가 이전 프로젝트에서 모의해킹 시에 뚧은 서버가 Redis 웹캐시 서버와 Postgres DB 서버였다. 사이트의 담당자가 바로 백기를 들었다.


그럼에도 불구하고 해킹에서 가장 선호되는 서버는 웹서버다. 왜냐하면, 웹 서버는 봇넷(좀비 서버) 단으로 쉽게 활용이 가능하기 때문에, 서비스의 부하를 증가시키기 위한 DDoS(Distributed Denial-of-Service) 공격이 가능하다. 해커로서는 자신의 존재감을 과시하기 위한 수단으로 웹서버를 대량으로 뚧어서 중간의 에이전트 서버로 일시에 공격하는 서비스 마비 공격을 하기도 한다.


한국에서 초창기에 북한에서 금융권에 퍼부은 공격도 이 DDoS 공격이었다. 이 대란은 실제로 아는 지인(KISA DDoS공격 전문가)으로부터 듣기로 솔루션(해결책)은 없다고 한다. 대용량의 트래픽을 한 번에 막기는 모든 보안솔루션이 즉각적으로 대응하기가 힘들기 때문이다. 그래서 국내 정보보안 정부 기관인 KISA는 이런 서비스 가용성을 무너뜨리는 네트워크 공격을 대비하기 위해서 사이버 대피소(일종의 허니팟)라는 미봉책이라도 세웠다.


어쨌든 필자가 저번 세션에서 언급했던 대로 아래와 같이 웹서버 하나 만들어보자. Nginx 바이너리 파일을 직접 다운로드해서 필요한 모듈들을 설치해서 커스트마이징할 수도 있다. 컴파일 과정을 거치기 때문에 약간 복잡하다. 하지만 현재 가장 안정적인 버전으로 검색되는 Nginx 1.29.3을 아래 사이트를 보고 그대로 복사해서 명령어를 실행시키면 금방 설치된다. 그러면 이 브런치 표지 화면처럼 깔끔하게 설치된 것을 확인할 수 있다.


참고로 필자는 맥북 에어 Apple M4 실리콘칩이라서, 오라클 버추얼박스를 설치하고 여기에 우분투 서버 (데스크톱 버전과 달리 GNOME이라는 GUI 환경이 기본설치되지 않는다.) 24.04.3 LTS ARM (검색해 보니 맥북 실리콘 칩은 ARM 기반 64bit 아키텍처를 권장)을 배포했다. VM(가상머신) 설치 가이드는 아래 사이트를 참조하면 되고, 맥북에서도 자체 터미널에서 SSH 통신으로 우분투 VM에 접속할 수 있다.


1. 가상머신 설치 후 우분투 CLI(Command Line Interface) 커넥션

우분투 가상머신을 버추얼 박스에서 실행시키지(Headless) 않고도, SSH(Secure SHell) 프로토콜 암호화 연결을 하면 위와 같이 터미널(Zshell)에서 접속가능


일단 우분투 내부 통신을 위해 버추얼 박스에 배포한 우분투 가상머신의 네트워크 설정을 *브리지 어댑터로 변경한다.

*Bridge Adapter(브리지 어댑터) : VM을 호스트 컴퓨터(Macbook Air)와 동일한 2계층(Layer 2) 네트워크에서 연결한다는 뜻. 이 말은 브리지로 연결한 인터페이스는 다수의 MAC 주소(2계층 통신 네트워크 주소)에 대해 응답을 할 것이라는 의미이기도 함.


다시 접속해 보니, 프로세스 개수가 108개에서 100개(필자가 변경함?)로 그리고 IP address가 변경된 것을 확인


우분투 24.04.2 LTS의 코드명인 Noble과 같은 우분투 프롬프트에서 나와서 첨부한 링크의 가이드대로 ssh에 keygen 명령을 통해 (SHA 256) 암호키를 생성함
본래 버추얼박스에서 우분투를 직접 실행하면 위와 같이 CLI 텍스트가 꾸리 하다.
우분투 내부 아이피를 확인하고 바로 끄고, 다시 맥 터미널에서 접속하자.
잘 보면, 버추얼 박스를 실행시키지도 않은 상태에서, 맥 터미널에서 우분투로 바로 접속이 가능하다.


2. Nginx 설치 완료 후 통신 확인

바이너리 다운로드 해서 컴파일하는 수고로움을 덜 수 있는 그냥, 바로 설치한다
본인한테(웹서버 Nginx) cURL 명령으로 통신시도 시 200(커넥션 OK) HTTP 응답이 온 걸 확인가능
프로세스도 nginx의 마스터 프로세스 1개와 워커 프로세스 2개가 실행 중인 것을 확인가능
모든 소프트웨어 명령의 기본 옵션은 -h(elp)다. 그리고 내장 명령어는 man(ual) [명령어명]으로도 상세 매뉴얼을 확인할 수 있다. 엔지니어의 기본기다.


3. Nginx를 시스템 서비스로 추가하기

1) 추가 전 알아야 할 지식

각 리눅스 시스템(Ubuntu, Debian, Rocky(구 레드햇 오픈리눅스 CentOS))마다 처음 실행할 때 돌아가는 Runlevel이 다르다. Nginx를 자동 스케쥴링하는 것은 리눅스 시스템을 시작할 때 함께 실행하고, 끌 때(Shut down, 미연방 정부의 셧다운처럼) Nginx도 함께 종료되는 방식이다. 그래서 각 리눅스마다 처음 시스템이 부팅할 때, 기본적으로 돌아가는 컴퓨터 상태에 해당하는 런레벨(UNIX의 System-V 스타일의 init daemon)이 있다.


2) 우분투는 런레벨 2를 사용

시스템(우분투)이 시작할 때 두 개의 레벨 단에서 특정 리눅스 OS(정확히는 커널)의 표준을 반영한 스크립트(init script 또는 SysV script)가 돌아간다. 이때 각종 서비스가 시스템 런레벨을 시작하기 위해 스케쥴링되어야 하는데, 이때 돌아가는 데몬이 init이며, init script의 인자(argument)들이 시작(호출)된다. 거기에 Nginx 서비스도 포함시켜야 우분투를 재시작할 때마다 함께 실행시킬 수 있다.


그래서 아래와 같이 테스트해 보자

$ sudo service httpd start
$ sudo /etc/init.d/httpd start
service라는 커널 명령어를 통해 /etc/init.d/ 디렉터리 내부의 서비스를 독점적으로 실행할 수 있으나, 안된다.
먼저 /etc/init.d 디렉터리 하위에 있는 nginx를 실행시킬 수 있는 속성의 파일로 바꾼다.
그리고 service nginx start 명령으로 실행시킬 수 있다. 그리고 rc.d 파일에 ngnix 서비스를 디폴트로 추가한다.
위의 명령으로 시스템 재부팅하면 지금부터 Nginx도 시스템이 시작할 때마다 함께 실행된다. 콜?



그리고 아래 팟캐스트를 들으면서 연사로 나온 Cloudflare라는 CDN(콘텐츠 전송 네트워크) 솔루션의 Erick Seidel 엔지니어가 왜 네트워크 접속을 위해 Edge Router에 가까울수록 속도가 더 빠르다는 건지 확인해 보자. 이 정도 영어는 알아먹어야지 DDoS 공격에 실무적으로 대비할 수 있지 않을까?



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