태그 Archives: Rocky Linux

RockyLinux 8 미사용 커널 삭제

Linux 상에서 dnf update 를 한  경우 보통은 새로운 업데이트 버전이 설치 되면서 기존 버전을 삭제 하게 되어있다.

다만 일반적인 범주를 벗어나는 java 라든가 python 은 기존 버전의 삭제 없이 다른 이름으로 설치 되어 alternatives에 의해 선택되어 사용 된다.

그리고 또 다른 하나의 경우는 kernel 이 업데이트 된 경우 인데 (8.5 -> 8.9) 이경우 /boot 파티션에 기존 부분 삭제없이 누적 되기 때문에

업데이트를 꾸준히 한경우 /boot 파티션의 용량이 부족한 경우가 발생한다.

 

요점은 /boot 폴더는 보통 용량이 작기 때문에 용량 확보를 위해서 기존 커널을 지워야 한다 ‘ ㅅ’a

손쉽게 삭제가 된다. 🙂

20240304_142946

OCI 구성 서버중 update를 많이 한 웹서버 용량이 73%를 쓰고 있어서 삭제 후 43% 으로 감소 하였음 :).

AWS 서버 발생 로그의 분리 보관 (amazon-cloudwatch-agent)

서버내 dbus -> rsyslogd 에 의해 수집된 시스템 로그는 /var/log 아래에 파일 형태로 저장 된다.

이는 /etc/logrotate.conf 설정에 따라 서버내에 보관이 된다.

 

다만 보관된 파일의 파일 형태로 저장되어 있기 때문에 구조만 알고 있다면 파일을 삭제 하거나 변조 할 수 있으므로

추후 추적을 용의 하게 하기 위해, 데이터 무결성을 보장하기 위해, 혹은 다중의 서버의 데이터를 모아서 보관 하기위해 log 콜렉팅을 하는것이 일반적인 보안 방법 이다.

 

단순한 rsyslogd 를 이용한 udp 푸시 및 graylog collecting 은 기존에 설명을 했지만

AWS 상에서는 CloudWatch Log 라는 기능을 제공 한다 이를 통해 지표 형태로 보거나 알람 설정등을 할 수 있다.

 

서버에서는 CloudWatch log 쪽으로 데이터를 넣어주는 프로그램을 설치해서 운용 하며 이후

Log 파일의 안전한 분리 보관, 보관 주기 설정, 알람 설정 등을 웹 콘솔상에서 편하게 진행할 수 있다.

 

기존에 centos 7 에서는 yum 을 이용하여 awslogs 라는 프로그램을 설치하여 같은 기능을 사용하고 있었으나

Rockylinux 8 에서는 dnf 패키지가 없는 관계로 RPM 설치를 필요로 한다.


AWS 웹콘솔 에서 IAM 메뉴의 Role (역할) 을 생성 하고 권한을 부여 한다. (중간에 권한은 지정하지 않고 생성 하고 추후 인라인 정책으로 생성 한다.)

2022-04-08_161452 2022-04-08_161613 2022-04-08_162326

 

인라인 정책을 생성 한다. (생성한 정책이 다른 계정 이나 역할에 공통으로 부여할 필요하 있으면 일반 정책 생성 후 연결 한다.)

2022-04-08_162608 2022-04-08_163101 2022-04-08_163232

위 json 정책은 ap-northeast-2 (서울) 리전에 로그 를 쌓는 기능만 허용 하는것으로 제한 하였다.

 

생성된 Role (역할) 을 필요한 EC2에 연결 한다.

2022-04-08_164417 2022-04-08_164648

 

위에서 이야기 했지만 yum(dnf) 설치가 RockyLinux 8 에서 되지 않는다. 때문에 AWS 에서 배포 하는 rpm 파일을 가지고 설치를 진행 한다. (amazon-cloudwatch-agent  설치 메뉴얼)

 

편리하게 사용하라고 대화식 명령어를 실행 하도록 되어 있다.
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

하지만 문답 형식의 영어를 읽기도 귀찮고(어렵고) Role (정책)을 부여하여 키없이 로그를 쌓게 하고자 했으나

스크립트에서는 필수적으로 Access Key/Secret Key 를 입력 해야 하는 부분이 있기 때문에 스크립트로 진행이 어렵다.

때문에 /opt/aws/amazon-cloudwatch-agent/bin/config.json 파일을 직접 수정 해 준다. (amazon-cloudwatch-agent 설정 메뉴얼)

위 예제는 apache, php, nginx 등을 dnf(yum) 설치를 한경우 일반 적인 log 포멧의 timestamp를 인식 하도록 정리한 것이다. (secure, message 로그 및 apache, nginx, php-fpm 로그)

필요에 따라 수정을 해서 사용 하도록 한다.

 

이후 다음 명령어로 설정된 config.json 을 점검 하고 문제가 없다면 자동으로 서비스가 시작된다.

 

웹 콘솔 에서 Cloudwatch > 로그 그룹에서 보관 기간 을 설정 하고 로그 데이터가 잘 적재 되고 있는지 확인 한다.

2022-04-08_1810182022-04-08_1649512022-04-08_181557

Rocky Linuix(v8.5) – nginx(v1.20.1-6) – php-fpm(v8.0.14) 설정

Rocky Linux 8.5 버전에서 nginx – php – mariadb 설치 방법 이다.

 

먼저 OS의 기본적인 설정을 해야 한다.

NetworkManager 를 여전히 사용중이기 때문에 nmtui 명령어로 아래 화면에서 네트워크 설정을 할 수 있다.

2022-01-13_143039

Minimal 설치 기준으로 일반 적인 설정이라고 보면 되겠다 ‘ㅅ’a

  1. atd 데몬을 사용 중지 한다. (보안 취약점이 될 소지가 있다.)
  2. 서버 타임존을 설정한다.
  3. rsyslogd사 설치되어야 로그 감사를 통한 서버 이상을 확인하기 용이 하다. (vim 은 내 친구이기 때문에 설치한다 = =a)
  4. rsyslog를 실행한다.
  5. selinux 이슈 발생시 사유 추적을 위해 분석 스크립트를 설치 한다.

selinux 이슈 발생 추적은 아래 명령어로 진행 한다.

 


 

서버 목적에 따른 firewalld 를 설정 한다.

firewalld 의 경우 전통적인 iptable 를 사용하지 않고 nftable 이란것을 사용하기 때문에 일시 중지를 위해 iptable -F 명령어로 값을 모두 날려도 작동 하지 않으니 유의 하자 ‘ ‘a

기초 사용법은 아래와 같다.

 


 

epel 레포지토리를 설치 하고 업그레이드를 통해 최신화 한다. (리부팅이 필요할지도 ‘ ‘a)

 

php 의 버전 선택 설치를 위해 Remi 레포지토리를 이용 하여 php 8.0 버전을 선택해서 설치 한다. (nginx 역시 1.20 버전으로 선택함)

php-fpm 설치와 라이브러리 설치를 구분한 이유는 일반 php를 설치하게 되면 의존성으로 httpd 가 설치되고 php-fpm 을 설치해야 nginx가 의존 설치 되기 때문이다.

 

MariaDB 10.6 설치 (레포지토리 생성 URL) CentOS 가 아닌 RHEL8의 레포지토리를 사용하였음.

 

/etc/nginx/conf.d/virtual.conf 파일에 가상호스트를 생성하고 php-fpm 과 sock 으로 연결 한다.

일단 여기 까지 진행된 경우 nginx – php – mariadb 조합의 사용이 가능하다.

내부 공용으로 쓰이는 부분은 params 파일로 별도로 만들어서 include 하는편이 좋다. ‘ㅅ’a

 

사이트용 계정 및 phpinfo() 파일을 생성하고 브라우져로 접속하여 확인 해 본다 ‘ㅅ’a

 

WEB 디렉토리를 기본이 아닌 /free/home/계정 으로 진행 했기 때문에 아래와 같이 selinux 설정 하고 적용 한다.

selinux 는 어렵지만 활성화 해두고 쓰면 보안이 매우 강려크 하다.

문제가 발생한경우 setenforce 0 명령어로 감시모드로 전환 하고 sealert 명령어로 예외 추적 하고, context를 추가한 뒤에 다시 setenforce 1 으로 활성화 하는 습관을 가지는게 좋다.

설정된 t콘텍스트 는 ls -lZ /경로/경로 으로 확인할 수 있다.

 


 

snapd 및 certbot (let’s encrypt) 를 설치 한다.

 

certbot을 활용한 인증서 발급 명령어 (nginx acme-challenge 를 설정한 이유는 디렉토리를 고정 사용하기 위해서이다.)

 

nginx ssl 설정은 일반 server { } 설정 사이에 listen 값을 교체 및 ssl 설정을 추가 하면 된다.