앞서 네트워크 연결을 마친 후에 포트 번호를 변경해주려 한다.
포트 변경에 앞서 SSH에 대해 간략히 정리해보자면,
Secure Shell, SSH는 원격 호스트에 접속하기 위한 네트워크 보안 프로토콜이다.
이는 퍼블릭 네트워크를 통해 다른 컴퓨터에 접속할 때 보안상 안전하게 통신하기 위해 사용되고, 대표적인 사용 사례로는 데이터 전송과 원격 제어가 있다.
Telnet vs SSH
기존에 사용했던 Telnet을 들어본 적 있을 것이다. 이 또한 원격 시스템 제어를 위해 사용하는 프로토콜이고, 표준 포트는 23번이다. SSH와의 핵심 차이점은 암호화가 되지 않는다는 것이다.
Telnet의 경우 데이터를 평문으로, 암호화하지 않고 보내기 때문에 패스워드와 같은 중요한 내용 모두 쉽게 노출된다. 그러나 SSH는 암호화된 통신으로, 식별할 수 없는 문자열로 패킷이 전송되기 때문에 보안상으로 훨씬 안전하다.
리눅스 SSH의 표준 포트는 22번이고, 표준 포트를 사용하여 통신하는 것보다 임의의 포트번호로 변경하여 통신하는 것이 보안상 더 안전하기 때문에 포트 변경의 절차를 거치는 것이다.
포트 변경, 방화벽 설정, SELinux 설정의 총 세 가지 단계를 거쳐 진행한다.
🛳 포트 변경
그럼 어떤 포트번호로 변경해주는 것이 좋을까?
사실 자유지만, 아래와 같이 잘 알려진 포트 목록이 존재한다. 강제적으로 지정된 것은 아니고 다른 번호로 사용될 수도 있다.
그러나 혹시나 포트가 겹쳐 발생할 수 있는 이슈를 방지하기 위해 9999와 같이 큰 값으로 변경해주기도 한다.
이 글에서는 포트 번호를 9999로 변경한다고 가정하고 아래 명령어를 작성할 것이니, 각자의 포트 번호에 맞게 변경해줘야 한다!
출처: 위키백과
✨ 리눅스상의 port 설정파일에 들어가 변경하고자 하는 port 번호를 추가해주면 된다.
설정파일은 /etc/ssh/sshd_config에 위치해있고, 네트워크 연결 설정과 마찬가지로 root 권한으로 편집해야 한다.
vi /etc/ssh/sshd_config
기본적으로 22번으로 설정되어 있고, 그 아래에 Port {변경하고자 하는 포트번호} 로 설정해주면 된다.
🧱방화벽 설정
다음 방화벽 설정이다. 이것이 참 중요하다,,
처음 설정할 때 방화벽은 생각하지 못해서 포트 변경하고 그대로 재시작해줬는데 당연하게도 막혔고, 그 이유를 파헤치지 못해서 VM을 5번은 죽였던 것 같다 ^^.. 그래서 인턴에게 사수는 생명인가보다..
1. firewall zone을 확인한다.
firewall-cmd --list-all
2. 방화벽의 해당 zone에 Port 번호를 추가한다.
firewall-cmd --permanent --zone=public --add-port=9999/tcp
3. firewall reload 해준다.
firewall-cmd --reload
reload 후 success가 뜨면 성공적으로 재구동된 것이고, 다시 1번의 명령어를 입력하면 ports에 추가된 것을 확인할 수 있다.
🧚🏻♂️SELinux가 켜져 있을 때
SELinux는 리눅스의 보안을 강화해주는 보안 강화 커널로, buffer overflow와 같은 어플리케이션 취약점으로 인한 해킹을 방지해주는 핵심 구성 요소이다. SELinux에서 port를 제어하기 때문에 SELinux가 enable 상태라면, 하나의 명령어를 더 실행해줘야 한다.
semanage port -a -t ssh_port_t tcp 9999
여기까지가 포트 변경과 방화벽 설정, SELinux 설정까지의 여정아닌 여정이다..⛱
✚ SELinux는 보안 강화 장치이기 때문에 해제하는 것을 권장하지 않지만, 실습을 위해 진행하는 거라던가 보안 따위 냅다 던질 수 있다면,,
/etc/sysconfig/selinux 파일에서 활성화되어 있는 SELinux를 disabled로 변경해주면 된다. 이것도 root 권한으로 진행한다.
업무에 사용되지 않고 실습 용도로 사용했던 VM에서는 SELinux를 아예 비활성화 시키고 진행했으나, 실제 업무에 들어가는 경우에는 설치 요구사항에 따라 맞춰 진행했다!
✚ 그리고 정말 마지막으로 네트워크 포트 번호를 확인할 수 있는 명령어가 있는데 바로 netstat -tnlp 이다.
근데 net-tools 패키지가 설치되어 있지 않으면 'command not found'와 같은 메시지가 뜰 것이다.
그럴 땐 대신 ss -atnlp 명령어를 입력해주면 확인할 수 있다.
netstat, ss 뒤의 (a)tnlp는 옵션으로, 해당 의미는 다음과 같다.
a(all): 수신 연결된 모든 포트
t(tcp): tcp로 연결된 포트
n(number): 프로세스의 포트 번호
l(listen): 프로세스의 연결 상태
p(PID): 프로세스를 사용하는 서비스명
'Linux' 카테고리의 다른 글
[Linux][CentOS] 네트워크 연결하기 (0) | 2022.10.14 |
---|
댓글