원격 접속 프로토콜: Telnet과 SSH
Overview
Rocky Linux에 네트워크를 연결하고 원격 접속 프로토콜 Telnet과 SSH을 통해 Client에서 Server로 원격 접속을 수행했습니다. 원하는 패킷 로그를 수집하기 위해 firewalld
를 사용하였으며 통신 프로토콜 및 포트를 허용하고 관리하기 위해 tcpdump
를 사용했습니다.
네트워크 연결 확인
Deskytop Rocky Linux 8에서 네트워크를 구성하기 위해 랜선을 사용하여 Ethernet 연결을 수행했습니다. Ethernet이 연결 되었는지 확인하기 위해 네트워크 인터페이스의 State를 확인합니다.
네트워크 인터페이스 | 이름 | 설명 |
---|---|---|
lo | Loopback | 자기 자신에게 보내는 데이터를 처리하기 위한 가상 인터페이스 장치명 |
enp6s0 | Ethernet Network Adapter Identifier | 이더넷 네트워크 인터페이스 |
virbr0 | Virtual Bridge Interface | 가상 머신이 네트워크 서비스에 접근할 수 있도록 NAT를 사용하여 가상 네트워크 환경 제공 |
아래 명령어를 통해 네트워크 인터페이스 enp6s0의 연결 상태가 connected
인지 확인합니다.
1
nmcli d
네트워크 구성
Server와 Client는 같은 사설 네트워크에 위치해 있습니다. Server는 Desktop Rocky Linux OS를 사용하고 있고 Client는 Window11 OS를 사용하고 있습니다. 해당 글에서는 Client에서 Server로 원격 접속을 시도하는 상황을 설정하였습니다.
사용 도구
1. tcpdump
tcpdump는 CLI 환경에서 동작하는 Packet analzer 입니다. 이는 서버의 특정 포트로 송수신되는 패킷을 확인할 수 있습니다.
- 설치 명령어
1
yum install tcpdump
- 예시 명령어
- enp6s0 인터페이스(이더넷 포트)를 통해 송수신 되는 패킷 캡쳐
1
tcpdump -i enp6s0
- ICMP 프로토콜을 사용하는 패킷을 캡쳐
1
tcpdump -i enp6s0 icmp
- 특정 Host(192.168.0.107)에서 Port22로 오가는 TCP 패킷을 최대 1500 바이트 캡처하여 파일로 저장
-w tcpdump.log
: 캡처한 패킷을 tcpdump.log 파일에 저장-s 1500
: 이더넷의 MTU 값 1500에 따라 캡쳐할 패킷의 스냅샷 길이를 1500 바이트로 설정tcp
: TCP 프로토콜 사용하는 패킷 캡쳐port 22
: TCP 포트 22를 사용하는 패킷 캡처 (Port 22: well-known port of SSH)host 192.168.0.107
: IP 주소 192.168.0.107을 포함하는 패킷만 캡처
1
tcpdump -w tcpdump.log -s 1500 tcp port 22 and host 192.168.0.107
- enp6s0 인터페이스(이더넷 포트)를 통해 송수신 되는 패킷 캡쳐
2. firewalld
firewalld는 Linux 환경에서 방화벽을 설정하는데 사용할 수 있습니다.
- start/enable 명령어
1 2
sudo systemctl start firewalld sudo systemctl enable firewalld
- 예시 명령어
- 현재 firewalld 기본 zone 확인
1
firewall-cmd --get-default-zone
- 허용된 service 목록 확인
1
firewall-cmd --list-service
- 현재 firewalld 설정 정보 확인
1
firewall-cmd --list-all
- 현재 firewalld 기본 zone 확인
Telnet / SSH
- Telnet
- Application Layer Protocol
- well-known Port: 23
- 데이터 전송 중 정보가 암호화되지 않아 보안에 취약합니다.
- SSH(Secure Shell)
- Application Layer Protocol
- well-known Port: 22
- Telnet에 보안 기능이 추가된 프로토콜입니다.
Telnet
Linux에서 Telnet 사용
Server에서 Telnet을 사용 및 허용할 수 있도록 설정해야합니다.
1. xinetd, telnet-server: 서비스 설치 및 실행
- xinetd, telnet-server 서비스를 설치합니다.
1
sudo yum install xinetd telnet-server
- xinetd, telnet-server 서비스를 시작합니다.
1 2
sudo systemctl start xinetd sudo systemctl start telnet.socket
- xinetd, telnet-server 서비스가
active
상태인 지 확인합니다.1 2
sudo systemctl status xinetd sudo systemctl status telnet.socket
2. firewall: telnet 서비스 추가 및 포트 허용
- Telnet 서비스 추가
- 허용할 서비스(telnet)가 지원하는 서비스 목록에 존재하는 지 확인합니다.
1
firewall-cmd --get-service
- public zone에 telnet 서비스를 추가합니다.
1
firewall-cmd --permanent --zone=public --add-service=telnet
- 허용할 서비스(telnet)가 지원하는 서비스 목록에 존재하는 지 확인합니다.
- Telnet 포트 허용
- 허용 포트 리스트를 확인합니다.
1
firewall-cmd --list-port --zone=public
- public zone에 telnet 포트 추가합니다.
1
firewall-cmd --permanent --zone=public --add-port=23/tcp
- 추가된 포트 적용을 위해 방화벽 재시작합니다.
1
firewall-cmd --reload
- 허용 포트 리스트를 확인합니다.
3. 설정 확인 및 서비스 재시작
- 변경된 사항이 적용되었는지 방화벽 설정을 확인합니다.
1
firewall-cmd --list-all
- 서비스 재시작합니다.
1
sudo systemctl restart xinetd
4. tcpdump: 로그 수집
Client에서 telnet을 사용하여 Server에 원격 접속하는 상황의 로그를 수집합니다.
1
sudo tcpdump -i enp6s0 -W tcpdump.log port 23 -A
5. tcpdump: ASCII모드로 수집된 LOG 내용 확인
1
tcpdump -Xqnr tcpdump.log
Windows11에서 Telnet 클라이언트 사용
Client는 Windows11 OS를 사용하고 있으므로 Windows 11에서 Telnet 클라이언트를 사용할 수 있도록 설정해야합니다.
- 설정: 제어판 > 프로그램 및 기능 > Windows 기능 켜기/끄기 > Telnet 클라이언트 옵션 켜기
- 원격 접속: 터미널에서 Telnet을 사용하여 Server에 원격 접속합니다.
SSH
- Linux
- 설정파일 위치: /etc/ssh/sshd_config
- 해당 설정 파일에서 SSH 포트 번호 변경 가능합니다.
- 서비스 시작 명령어
1
sudo systemctl restart ssh
- 설정파일 위치: /etc/ssh/sshd_config
- Window
- ssh 명령어를 통해 Server에 원격 접속합니다.
회고
이번 글에서는 원격 접속 프로토콜 Telnet과 SSH을 설정 및 수행해보았습니다. 이 과정에서 서버 보안을 위해 허용 프로토콜 및 포트를 관리하고 로그를 수집하는 것의 중요성에 대해 이해할 수 있었습니다. 다음 글에서는 수집한 로그 파일을 분석하고, 여러 Case에서의 패킷 내용을 확인해보겠습니다!
Telnet 프로토콜은 암호화되지 않은 통신을 사용하므로, 보안을 위해 다시 비활성화하였습니다.