[내가 경험했던 시스템 구축기] 기본 OS 환경 설정

Spark Kim·2021년 10월 16일
0

보안 셋팅

특정 이유가 있는 경우 이외에는 전부 CentOS 7 기준으로 구축을 진행했다. 일부는 Ubuntu를 이용해 진행을 했었다. 따라서 본 글에서는 CentOS 7, Ubuntu 두가지 버전으로 셋팅 방법을 작성했다.

방화벽 설정

현업 회사에서 항상 강조하는 것은 보안인데, 시스템에서 보안의 가장 첫 걸음은 방화벽일 것이다.
Cloud 환경의 물리방화벽도 존재하지만 OS 레벨에서의 방화벽 설정도 필요하다.
방화벽은 아래 명령어를 통해 enable 할 수 있다.
CentOS 7

systemctl enable firewalld
systemctl start firewalld

Ubuntu

sudo ufw enable

물론, 외부와 통신하는 데에 필요한 포트 작업도 필요하다. 포트 오픈은 아래 명령어를 통해 진행할 수 있다.

CentOS7

firewall-cmd --permanent --zone=public --add-port=8080/tcp  # tcp 예시
firewall-cmd --permanent --zone=public --add-port=9090/udp  # udp 예시
firewall-cmd --reload

Ubuntu

sudo ufw allow 8080/tcp  # tcp 예시
sudo ufw allow 9090/udp  # udp 예시

root 권한 로그인, password 기반 로그인 disable

외부에서 root 사용자에 대하여 로그인을 하는 것을 막고, 서버에 등록된 ssh-key를 가진 사용자에 대해서만 접근 허용을 한다면 보다 보안이 강력해질 것이다.
우선 서버의 ssh-key를 생성하자.

ssh-keygen -t rsa
cat .ssh/id_rsa.pub > .ssh/authorized_keys

.ssh/authorized_keys 파일에 본인의 ssh pub key를 등록하면 된다.

그 후 root 권한으로 변경 접속하여 sshd_config 파일을 수정한다.

su root
vi /etc/ssh/sshd_config

root 사용자 로그인, password 기반 로그인을 막기 위해 수정해야할 부분은 아래 내용을 참조한다.

...
PermitRootLogin no
...
PubkeyAuthentication yes
...
PasswordAuthentication no
...

종종 파일 읽기 권한 문제로 ssh 기반 로그인이 실패하는 경우도 있으므로, 안전하게 아래와 같이 권한 변경을 진행한다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub  
chmod 644 ~/.ssh/authorized_keys

그 후 ssh daemon을 다시 재실행시켜주면 끝이다.
CentOS 7

systemctl restart sshd

Ubuntu

sudo service ssh restart

fail2ban 활용

fail2ban은 무작위로 ssh 로그인을 시도할 경우 로그인을 시도한 IP에 대해 커널 방화벽에 등록하여 차단을 해주는 역할을 한다. 물론 특정 IP 대역에 대해서만 물리방화벽을 오픈하도록 설정을 하였으나, 좀 더 높은 보안 수준을 유지하기 위해 설치를 진행하는 것을 추천한다.

설치는 아래 명령어로 진행한다.
CentOS 7

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y fail2ban fail2ban-systemd

Ubuntu

sudo apt install fail2ban

경우에 따라 개별적으로 설정을 할 경우 /etc/fail2ban/jail.local을 수정한다.
나는 아래와 같이 설정을 진행했었다.

[DEFAULT]
 
## 차단하지 않을 IP. 내부 서버끼리는 통신이 가능하도록 내부 IP  허용
ignoreip = 127.0.0.1/8 ::1 172.27.0.0/16 
 
# 차단 작동시 해당 IP에 대한 차단 시간
bantime  = 12
 
# 아래 시간동안 maxretry 만큼 실패시 차단
findtime  = 10m
 
# 최대 시도 허용 횟수
maxretry = 5
 
# 메일 수신자, 다중 수신자는 지원 안 함. 개인정보때문에 실제 메일주소는 기재하지 않았으나, 실제로는 메일주소를 설정하였음.
destemail = testmail@mail.com
 
# 메일 보낸 사람
sender = root@<fq-hostname>
 
# 메일 전송 프로그램
mta = sendmail
 
 
# 차단시 whois 정보와 관련 로그를 첨부하여 메일 전송
action = %(action_mwl)s
 
# sshd 서비스 차단
[sshd]
enabled = true
port     = ssh

이후 fail2ban을 아래 명령어를 통해 실행시켜주면 된다.
CentOS 7

systemctl enable fail2ban
systemctl restart fail2ban

기타 설정

기타 설정의 경우 CentOS 7 기준으로만 우선 작성하였다. (Ubuntu 기준 작성은 추후 고려 예정이다.)
여기서는 ntp 설정, disk 마운트 설정, 커널 버전 고정을 다뤄보겠다.

ntp 설정

서버시간 동기화를 위해서는 ntp 설정이 필요하다.
ntp를 설치한다.

yum install ntp

/etc/ntp.conf 파일에서 기존 서버리스트를 주석처리하고, 동기화할 서버주소로 설정해준다.

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server kr.pool.ntp.org iburst
server time.bora.net iburst
server time.kornet.net iburst

ntp 서비스를 사용하기 위해 아래 명령어를 통해 방화벽을 설정한다.

firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

ntp를 아래 명령어를 통해 실행시키면 완료 된다.

systemctl start ntpd

Disk 마운트 설정

Disk나 NAS를 특정 디렉토리에 마운팅 시켜줘야할 때는 다음과 같이 진행한다.
우선 file system을 만들어 줘야하는데, file system 종류 선정은 상황에 맞게 한다. 나는 지원 환경상 ext4 로 진행해야 했었다.
아래 명령어와 같이 file system을 초기화 해준다.

mkfs.ext4 /dev/xvdb

이후 /etc/fstab 파일에 마운트가 될 수 있도록 기재해준다.
예시는 아래와 같다.

/dev/xvdb               /data                     ext4    defaults       0 0

그리고 적용이 되도록 아래 명령어를 실행한다.

mount -a

커널 버전 고정

다른 곳도 비슷한 상황인지는 모르겠으나, Cloud 벤더사가 지원하는 Hypervisor의 버전에 따라 안정적인 운영 지원이 되는 Linux 커널 버전이 한정되어있는 경우가 있는 것 같았다. 아무 생각 없이 yum update를 했다가는 커널 버전이 업데이트가 되고, VM 재부팅 이후 접속이 안되는 경험을 해본 나로서는 커널 버전 고정은 중요 이슈였다.

현재 커널 정보는 아래 명령어를 통해 확인이 가능하다.

grub2-editenv list

커널 고정은 아래 명령어를 통해 수행 가능하다.

grub2-set-default 커널버전

물론 이 외에도 환경을 잡자면 범주는 더 넓을 것이나, 기본 보안 셋팅과 기타 몇몇 작업들 정도로 OS 환경 설정글을 마무리를 하고자 한다.

profile
성장 지향 백엔드 개발자

0개의 댓글