본문 바로가기

CentOS

SSH 포트 변경하기

ssh의 default port는 22번이다.

 

ssh의 default port number

너무나 잘 알려진 port이기에 외부에서 접근 시도가 너무 많다. 그래서 임의의 다른 포트로 변경한다. (포트를 바꾸는 게 능사는 아니지만, 안 하는 것보단 낫다.)

 

1. sshd

ssh로 통신이 가능하게 만들어주는 데몬이다. 우선 변경하려는 포트번호를 다른 프로세스가 사용중인지 체크해보자.

# netstat -anp | grep XXXX

LISTEN 중인 프로세스가 보인다면 다른 포트번호를 고르자. 그리고 혹시 사용중인 포트가 아니더라도 해당 포트번호를 즐겨 사용하는 프로그램/서비스가 있는지 체크해보자.

# fgrep -i 'XXXX' /etc/services

혹시 어떤 프로그램이나 서비스가 검색되더라도 내가 쓸 프로그램이나 서비스가 아니라면 무시해도 된다.

 

적당한 포트번호를 골랐다면 sshd 의 설정 파일을 열어보자.

# vi /etc/ssh/sshd_config

그리고 아래 Port 설정 부분을 찾아보자.

...

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...

친절하게도 SELinux 의 포트를 변경하는 방법에 대한 안내도 있다. 일단 port번호를 먼저 변경한다. Port앞의 #을 지우고 22 대신 새 포트번호를 지정한다.

...
Port XXXX
...

지금은 port만 변경하지만 sshd의 바인딩 어드레스를 변경하려면 ListenAddress의 #을 지우고 설정한다. 예를 들어 서버의 네트워크 인터페이스가 2개 이상이고 각각의 인터페이스에 서로 다른 IP가 할당되어 있다든가, 하나의 인터페이스에 두 개 이상의 IP가 설정되어 있다든가, 그런 상황에서 특정 IP로만 SSH에 접근할 수 있도록 설정 가능하다. 보통 내외부망을 분리해서 운영할 때 내부에서만 접근 가능하도록 설정해서 사용한다.

 

저장을 했다면 sshd를 재시작 해줘야 하지만! 우선 selinux와 firewalld에게 변경된 port를 알려줘야 한다.

2. SELinux

sshd config파일에 친절하게 SELinux에 대한 설명이 적혀있다. 그대로 실행한다.

# semanage port -a -t ssh_port_t -p tcp XXXX

CentOS 8을 기준으로 minimal install을 설치했다면 semanage가 없다. 그래서 yum으로 policycoreutils-python-utils를 설치해줘야 한다.

# dnf install policycoreutils-python-utils

설치가 끝났다면 semanage 위 semanage 명령으로 다시 변경된 port 번호를 알려주고, 제법 긴 시간이 기다려 작업이 완료된다면 확인해본다.

제대로 설정된 화면

 

3. Firewalld

firewalld에는 ssh 서비스에 대해선 기본적으로 포트가 열려있다. 하지만 firewalld는 ssh의 포트를 22로 인식하고 있다. ssh의 포트를 바뀐 포트번호로 알려주든지, 새로 바뀐 포트를 열어주든지 선택을 하면 된다. 여기선 ssh의 포트번호를 바뀐 포트번호로 알려주는 방법을 사용한다.

# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml

우선 firewalld의 default ssh 설정값을 복사하고 복사된 파일을 수정한다.

# vi /etc/firewalld/services/ssh.xml
<port protocol="tcp" port="22"/>

여기서 port 부분만 수정하고 저장한다.

 

이제 서비스들을 재시작해주면 된다.

 

4. 서비스 재시작

우선 sshd를 먼저 재시작해줘야 한다. firewalld를 먼저 재시작하면 서버에 디스플레이를 직접 연결해서 로컬 터미널 환경에서 작업해야 한다. sshd를 재시작하지 않았기 때문에 22번 포트를 listening 하는데 firewalld는 기존의 22번 포트를 막아버리고 바뀐 포트번호를 열어주기 때문이다.

# systemctl restart sshd

이제 netstat으로 확인해보면 sshd의 포트번호가 바뀐 것을 확인할 수 있다.

 

listen 중인 포트번호가 변경되었다.

하지만 이미 established 된 SSH 커넥션은 그대로 살아 있기 때문에 창을 닫지 말고 계속 작업해야 한다. 현재 상태에선 22번으로도, 변경된 포트로도 SSH 접근이 불가능하다.(SSHD는 변경된 포트번호를 LISTEN 하고 있고, 방화벽은 변경 전의 포트번호만 허용해주고 있기 때문이다.)

 

이제 firewalld를 재시작하면 변경된 포트번호로 접속할 수 있다.

# systemctl restart firewalld

 

'CentOS' 카테고리의 다른 글

MariaDB Trouble Shooting  (0) 2020.02.29
MariaDB 설치하기  (0) 2020.02.28
SNMP 설치하기  (0) 2020.02.28
JAVA 설치하기  (0) 2020.02.27
git 설치하기  (0) 2020.02.27