퇴근 후에 틈틈히 작성하는 삽질 일지-리눅스서버- 1. Rocky Linux 9 설치 및 SSH 관련 설정

제로·2022년 11월 3일
1

📌오늘의 목표

서버 설치 후, 이후 작업을 편하게 하기 위하여 SSH 설정을 정리하려고 한다.

일단 가장 처음 시작할 때 세운 방향성처럼 Rocky Linux 9 을 가상머신이 아닌 물리적 환경으로 직접 설치 하였다. 설치 진행 과정도 정리해두면 좋긴 하겠지만, 안타깝게도 캡쳐보드 같은 장비가 없어서 해당 진행과정을 찍어놓을 수가 없어서 원격으로 접속을 하기 전까지의 과정은 생략할 수 밖에 없다.


🧱 삽질

♟ Rocky Linux 설치

설정한 것을 대략적으로 정리하자면, 키보드레이아웃은 Ko-kr 101/104 호환, 언어는 영어로 설정을 했다.
루트계정은 비활성화하고, 관리자 계정을 추가하였다.
파티션은 서버환경에서는 하이버네이션을 사용하지 않을 것이고, 메모리를 16GiB 장착한 환경이기에 swap 크기를 8GiB 할당하였고, UEFI 부팅을 위해 /boot/efi를 efi포맷(vfat)으로 500MiB, /boot파티션을 xfs포맷으로 1GiB, 보안성을 위해 /tmp 파티션을 xfs포맷으로 50MiB 할당하여 분리하고, /를 xfs로 나머지를 모두 할당하여 파티셔닝을 하였고, /tmp 파티션의 마운트 옵션은 /etc/fstab에 nodev, nosuid, noexec 옵션을 추가하였다.
서버 유형은 'minimal server' 로 지정하여 설치하였다.

	/boot/efi	efi		500MiB
	/boot		xfs		1GiB
	/tmp		xfs		50MiB
	swap		swap	8GiB
	/			xfs		나머지
Rocky Linux 9 서버 파티셔닝

🩹 설치 후

rsnapshot

위 내용을 참고하여 백업 솔루션인 rsnapshot 까지 설치 하였다.


🛠 ssh 설정 - 포트변경

원격에서 관리할 때, 보안성을 높이기 위하여 SSH 접근 포트를 변경하려고 한다.

서버에서 작업을 해야 할 것은

  1. /etc/ssh/sshd_config 설정 변경
  2. SELinux 정책변경
  3. sshd 재시작

이 되겠다.

우선 /etc/ssh/sshd_config 의 다음 내용을 수정한다.

	(중략)

	line 21		#Port 22

	(중략)

/etc/ssh/sshd_config 변경 전
	(중략)

	line 21		#Port 22
	line 22		Port 2022

	(중략)

/etc/ssh/sshd_config 변경 후

변경 전의 코드를 그대로 주석으로 남겨두어서 다시 수정하기 쉽게 처리하였다.
물론 설정파일의 백업을 만드는 것도 나쁘지 않지만,
변경하는 부분이 많지 않으므로 백업파일 보다는 주석으로 남겨두는게 더 유리한 것 같기도 하다.

예전처럼 SELinux를 비활성화하고 쓰던 상황이라면 이상태로 sshd를 재시작하면 끝이지만,
SELinux가 기본으로 활성화되어 있는 지금은 sshd 재시작이 제대로 진행되지 않는다.
그렇다고 SELinux를 비활성화 하는 것은 보안적인 관점에서 권장하지 않는다.
SELinux는 화이트리스트로 동작하므로 필요한 서비스가 있을 때마다 정책을 허용해주면 될 것이다.


🔧 semanage 명령어를 활용하여 SELinux 정책 추가하기

semanage는 CLI로 편하게 SELinux 정책을 관리할 수 있는 명령어이다.

minimal server에서는 기본적으로 semanage 명령어를 사용할 수 있는 패키지가 설치 되지 않으므로 다음과 같이 설치한다.

sudo dnf install -y policycoreutils-python-utils

설치하고 나면 semanage 명령을 사용가능하다.

먼저 현재의 ssh 포트를 확인해보면 다음과 같이 나온다.

sudo semanage port -l |grep ssh
ssh_port_t		tcp		22

SElinux ssh 포트 정책을 추가한다.

sudo semange port -a -t ssh_port_t -p tcp 2022

다시 SElinux ssh 정책을 확인해보면 다음과 같다.

sudo semanage port -l |grep ssh
ssh_port_t		tcp		2022, 22

이상태로 sshd를 재시작하면 이상없이 잘 동작한다.

sudo systemctl restart sshd

✔ 방화벽 포트개방

다만 현재 sshd는 잘 동작하고 있지만 방화벽에서 sshd 포트를 아직 개방해주지 않아서 외부에서 ssh 접근은 되지 않는다.

현재 방화벽 정책을 확인해보면 다음과 같다.

sudo firewall-cmd --list-all

(중략)
service: cockpit dhcpv6-client ssh
ports:
(생략)

방화벽에 변경된 sshd 포트에 대한 정책을 추가한다.

sudo firewall-cmd --permanent --add-port=2022/tcp
success

방화벽 정책을 적용하기 위해 리로드 한다

sudo firewall-cmd --reload
success

다시한번 방화벽 정책을 확인해보면 다음과 같다.

sudo firewall-cmd --list-all

(중략)
service: cockpit dhcpv6-client ssh
ports: 2022/tcp
(생략)

이제 ssh로 원격 접속해보면 잘 되는 것을 확인할 수 있다.

(원격접속용 노트북)
ssh '서버사용자'@'서버주소' -p 2022

🚁 ssh 편리하게 접속하기

이대로 작업을 진행해도 좋지만 조금더 편하게 사용하기 위하여 키를 이용하여 ssh 접속 설정을 한다.

먼저 노트북에서 ssh 키를 생성한다.

(원격접속용 노트북)
ssh-keygen -t ed25519

ed25519 알고리즘은 RSA알고리즘보다 보안성이 더 올라간 암호화 알고리즘이라고 보면 된다.

공개키를 서버에 복사한다.

(원격접속용 노트북)
ssh-copy-id -i .ssh/id_ed25519.pub -p 2022 '서버사용자'@'서버주소'

개인키를 이용하여 ssh 접속을 해본다

(원격접속용 노트북)
ssh -i .ssh/id_ed25519 -p 2022 '서버사용자'@'서버주소'

매번 키와 포트를 지정하여 접속하는 것도 번거로운 일이기에 ~/.ssh/config 파일을 작성하여 접근을 간편하게 만든다.

	Host myserver
		HostName '서버주소'
    	User '서버사용자'
    	Port 2022
    	IdentityFile ~/.ssh/id_ed25519
    
노트북의 ~/.ssh/config

이후에 myserver로 ssh접속을 해보면 잘 되는 것을 확인할 수 있다.

(원격접속용 노트북)
ssh myserver

📝정리

오늘 작업에서 확인한 중요한 내용은 다음과 같다.
1. 포트를 사용하는 서비스는 SELinux 정책을 허용해줘야 서비스 시작이 정상적으로 진행된다.
2. 해당 서비스의 포트를 방화벽 정책에서 허용해줘야 외부에서 해당 서비스 접근이 가능하다.

다음부터는 ssh를 이용하여 원격작업을 할 것이므로 작업과정을 정리하는 과정이 더 수월할 것으로 보인다.

profile
늦었지만 그래도 다시 시작해보자

0개의 댓글