카테고리 Archives: linux

웹서버 성능 측정 with wrk

일반 적으로 apache 성능 측정은 기존에 아파치 재단에서 배포하는 ab 테스트를 진행 했었다.

 

docker로 하다보니 apache 가 컨테이너 안에 있어서.. 어짜피 별도로 httpd를 호스트에 설치하거나 별도 벤치 프로그램을 설치해야 한다.

그리고 테스트 하려는 서버가 docker – nginx (캐시활성화) 이고, php-fpm 설정값 계산기를 만들어서 웹서버 부하 테스트가 필요 했기에… 별도의 툴을 찾다가 wrk 를 찾게 되었는데,

컴파일을 필요로 하지만 설치가 간단하고 결과 값 시인성이 좋은 듯 하다 ‘ㅅ’a

 

git 주소:  https://github.com/wg/wrk

 

2024-11-25_170259

주요 하게 볼 부분은 Latency, request, timeout, non-2xx-3xx responses 정도 일듯.

 

출처:  https://domdom.tistory.com/411

mobaxtrem 을 통한 원격지 서버에서 firefox 실행

서버에서 GUI환경이 필요가 있을 때 xwindows 를 설치하고 vnc 또는 xrdp 를 이용한 접속을 해서 사용할 수 있다.

다만 그렇게 할 경우 불필요한 많은 프로그램을 서버에 설치해야 하기 때문에 ssh 접속을 통해 X11-forwarding 기능을 이용해서

프로세스는 서버에 떠있고 GUI 화면은 접속한 컴퓨터에서 사용할 수 있다.

 

서버의 OS 는 OCI – oraclelinux 8 버전이다.

 

서버 sshd 설정 변경

sshd 재 시작

!!!!!주의!!!!!: sshd 관련 설정을 변경한 뒤 재 시작할 경우 이미 접속한 세션은 문제가 없지만 새로운 ssh 접속이 불가능 하다.

때문에 sshd를 재 시작한 경우 새로운 터미널 창으로 ssh를 접속해서 문제가 없는지 확인 해야 한다.

 

관련 프로그램 및 라이브러리 설치

설치되는  xterm 은 간단한 테스트를 위한 프로그램(GUI  터미널 프로그램) 이다.

mesa-* 은 firefox를 실행 하기 위한 그래픽 관련 프로그램 이다.

 

위와 같이 설치 후에 ssh 아래와 같이 xtrem 을 실행하면 아래와 같이 gui 터미널 창이 실행 되는 것을 확인 할 수 있다.

2024-10-10_112043

ssh 접속을 해서 GUI 터미널을 열은 쓸모 없는 짓(=_=)이지만 검증을 위해 사용한다.

 


 

mobaxterm 설정 변경 및 실행

2024-10-10_1055252024-10-10_113739

 

CVE-2024-6387 – regreSSHion 취약점

openssh 명령어의 취약점이 공개 되었다.

인터넷 진흥원 공지: https://www.krcert.or.kr/kr/bbs/view.do?searchCnd=&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=1&categoryCode=&nttId=71480

심각도가 high 이고 root 권한 탈취가 가능하기 때문에 외부에 ssh 가 공개되는 서버는 필히 업데이트를 하는것이 좋다.

 

영향을 받는 ubuntu 버전은 22.04 ~ 24.04 이며 RHEL 9 의 경우 업데이트가 필요 하다. (ssh -V 를 했을때 버전 8.5p1 ~ 9.8p1)

 

다른 방법 으로는 sshd_config 에서 LoginGraceTime 을 0으로 수정하는 방법이 있는데 DDOS 에 취약해지니까 가급적 패치를 하도록 한다.

 

Ubuntu 공지: https://ubuntu.com/blog/ubuntu-regresshion-security-fix

RockyLinux 공지: https://rockylinux.org/news/2024-07-01-openssh-sigalrm-regression

Docker 와 firewall-cmd 사용법

Rockylinux(OracleLinux) 8.x 에서 Docker 는 run/start/stop 을 할때
Docker-proxy 가 iptables 를 이용해서 DOCKER, DOCKER-USER, DOCKER-ISOLATION-STAGE-1, DOCKER-ISOLATION-STAGE-2 등의 Chain을
만들어 관리 하기 때문에 기존에 설정된 firewall 설정을 무시하고 호출이 가능한 상태가 된다.

OCI 에서는 인스턴스에 시큐리티 리스트에서 아이피/포트를 관리할 수 있으나
스위치의 access_list 처럼 같은 서브넷에 속한 모든 서버가 영향을 받기 때문에 firewall 에서
설정한 포트만 오픈을 하고자 할때 사용할 수 있는 방법이다.(OCI 안에서 여러 인스턴스를 운영하거나 로컬에서 Docker 서버를 운영할때..)

AWS 의 보안 그룹은 각 인스턴스 별로 작동하기 때문에 불필요 하다.


  1. 먼저 도커의 iptables 사용 옵션을 끄고 docker 를 재시작 한다.
  2. firewalld 에서 설정된 값을 모두 초기화 한다.
  3. Docker 의 네트워크 정보를 확인 한다.
  4. Container 에서 호스트롤 통해 outbound 를 위한 설정을 추가 한다. (첫번째줄에 Docker의 네트워크 정보를 입력해서 실행 해야 한다.)
  5. inbound 를 위한 설정을 추가 한다.
  6. 필요에 따라 아래와 같이 inbound 설정을 추가 한다. (nginx-docker 를 위한 80(tcp), 443(tcp/udp) 을 연다.)

 

마지막에 여는 명령어를 보면 알겠지만 열려고 하는 컨테이너의 IP를 알아야 한다.

때문에 Container 으로 진입해서 ifconfig 를 보면 알 수 있겠지만 매우 귀찬은 관계로 스크립트를 작성 하였다.

실행하면 아래와 같이 나오는데 필요한 Container 부분만 실행을 해서 사용하면 된다.

20240620_131234


출처: https://firewalld.org/2024/04/strictly-filtering-docker-containers

Docker 를 이용한 데이터베이스(mariadb) 사용법

Web / Was 만 도커를 이용해 배포하는 이유는 Mysql, MariaDB 등의 공식 도커가 너무 잘되어 있어서 이다.

그래서 이용하는 법만 알면 되는데.  ‘ㅅ’a

공식 소개 페이지에 잘 나와 있긴 하지만 docker 사전 지식 없이 사용을 하기엔 설명을 건너 뛴 부분이 많다.

 

여기서는 MariaDB 공식 도커이미지를 가지고 간단히 DB를 띄우는 방법에 대한 부분만 설명 한다.

사용할 버전은 10.11 버전이다. 10.11을 사용하는 이유는 LTS 이기 때문에 지금 당장은 가장 오랜 업데이트가 지원될 예정이기 때문이다. (https://endoflife.date/mariadb)

– 2024-09-19 추가 : 현재 11.4 가 마지막 Long Term Support 버전이다. ‘ㅅ’a –

 

사용할 도커 이미지: mariadb – Official Image | Docker Hub

 

1. 이미지 pull 및 run을 한다.

 

2. mysql을 이용 한다. = _ =..

 

3. 그냥 글을 마무리 하기 심심하니.. 데이터베이스 생성, 유져 생성 쿼리…

 


 

PS. docker run 에 대한 옵션에 대한 설명.

--restart unless-stopped : stop 명령을 내린게 아니라면 (재 부팅 또는 도커 데몬을 스탑 한경우..) 자동으로 시작 하는 옵션.

-v /etc/mysql/mariadb.conf.d/:/etc/mysql/mariadb.conf.d/ : my.cnf 수정이 필요한 DB 튜닝의 경우 /etc/mysql/mariadb.conf.d/custom.cnf 파일을 만들고 내용을 넣고 컨테이너를 재시작 하면 적용 된다.

-v /var/lib/mysql:/var/lib/mysql : mysql 의 데이터 폴더를 마운트 한다.

docker를 이용한 데이터베이스 사용은 업데이트를 편하게 하기 위함이기 때문에 container 를 다시 run 하면 안의 내용을 모두 유실 하게 된다. 때문에 이와 같이 주요 폴더는 호스트OS 와 연결 하여 사용 하면 된다.

-e TZ=Asia/Seoul 만들려는 인스턴스의 timezone을 Seoul(+9) 으로 설정 한다.

-e MARIADB_ROOT_PASSWORD=루트패스워드 run 할때 루트패스워드를 지정해서 생성 한다.(미지정시 랜덤 생성)

 


 

연결할 WEB / WAS 구현은 아래 글을 확인합니다 ‘ㅅ’a

OCI arm 인스턴스에서 docker로 web, was 사용