Cisco IOS Telnet 서버와 클라이언트
학습 목차
- 구성 1.1. Telnet 서버 1.1.1. 로컬 데이터베이스 1.2. 보안 1.3. Telnet 클라이언트 1.3.1. 포트 번호 1.3.2. 소스 인터페이스
- 결론
Cisco IOS 라우터 또는 스위치를 원격으로 관리하기 위한 두 가지 일반적인 프로토콜이 있습니다: Telnet과 SSH입니다.
Telnet은 구성하기는 쉽지만 더 이상 자주 사용되지 않습니다. 모든 데이터를 평문으로 전송하기 때문에 안전하지 않은 반면, SSH는 암호화를 사용합니다. 그러나 일부 오래된 장비는 Telnet만 지원할 수 있으므로 구성 방법을 알아두는 것이 좋습니다. 원격 관리 외에도 Telnet 클라이언트는 access-list, 라우팅, 그리고 특정 포트의 수신 여부를 테스트하는 데 매우 유용합니다.
이 강의에서는 Telnet에 대해 알아야 할 모든 것을 보여드리겠습니다.
1. 구성
이 예제에서는 다음 토폴로지를 사용합니다.
R1은 Telnet 서버 역할을 하고, R2는 Telnet 클라이언트로 사용됩니다.
1.1. Telnet 서버
라우터나 스위치는 일정 수의 VTY 라인을 가지고 있습니다. 이는 동시 접속 수를 정의하는 가상 터미널 라인입니다. 살펴봅시다.
R1(config)# line vty 0 ?
<1-924> Last Line number
<cr>이 라우터는 900개 이상의 VTY 라인을 지원하는데 매우 많은 편입니다. 더 작은 장비는 보통 4개 또는 16개의 VTY 라인을 가집니다. 처음 5개의 VTY 라인만 구성해 보겠습니다.
R1(config)# line vty 0 4
R1(config-line)# transport input ?
all All protocols
lapb-ta LAPB Terminal Adapter
lat DEC LAT protocol
mop DEC MOP Remote Console Protocol
none No protocols
pad X.3 PAD
rlogin Unix rlogin protocol
ssh TCP/IP SSH protocol
telnet TCP/IP Telnet protocol
udptn UDPTN async via UDP protocol
v120 Async over ISDN이 라우터는 여러 프로토콜을 지원합니다. 위에서 보듯이 Telnet과 SSH가 두 가지 지원되는 프로토콜입니다. 여러 프로토콜을 지원할 수 있지만, 라우터가 Telnet만 지원하도록 구성해 봅시다.
R1(config-line)# transport input telnet이제 라우터는 Telnet 연결을 받아들이지만, 인증 없이는 작동하지 않습니다. 비밀번호를 설정해 봅시다.
R1(config-line)# password my_password
R1(config-line)# login비밀번호는 “my_password”가 됩니다. login 명령어는 라우터에게 이 비밀번호를 확인하라고 지시합니다.
작동하는지 확인해 봅시다.
R2# telnet 192.168.12.1
Trying 192.168.12.1 ... Open
User Access Verification
Password:
R1>위에서 보듯이 R2에서 R1으로 Telnet에 성공했습니다. “open” 메시지가 나타나면 TCP 연결이 성공적으로 설정되었음을 알 수 있습니다.
1.1.1. 로컬 데이터베이스
단일 비밀번호를 사용하는 대신, 라우터나 스위치의 로컬 데이터베이스에 저장된 사용자 이름과 비밀번호를 사용할 수도 있습니다. 여러 사용자가 같은 비밀번호로 로그인할 수 있지만, 사용자 이름을 여러 개 사용하면 누가 장비에 접속했는지 더 쉽게 확인할 수 있습니다. 이렇게 하는 방법은 다음과 같습니다.
R1(config)# line vty 0 4
R1(config-line)# no password
R1(config-line)# login locallogin local 명령어를 사용해 라우터/스위치에게 인증을 위해 로컬 데이터베이스를 사용하도록 지시해야 합니다. 사용자 계정을 만들어 봅시다.
R1(config)# username admin password my_password이제 비밀번호가 있는 admin 사용자가 생겼습니다. 테스트해 봅시다.
R2# telnet 192.168.12.1
Trying 192.168.12.1 ... Open
User Access Verification
Username: admin
Password:
R1>이제 라우터는 사용자 이름과 비밀번호를 묻습니다.
1.2. 보안
앞서 설명했듯이, Telnet은 모든 데이터를 평문으로 전송하기 때문에 안전하지 않습니다. Wireshark로 캡처한 Telnet 트래픽을 살펴보면서 실제로 어떻게 보이는지 확인해 봅시다. 다음은 단일 Telnet 패킷입니다.
위에서 클라이언트에서 서버로 가는 Telnet 패킷을 볼 수 있습니다. Telnet이 TCP 목적지 포트 23을 사용하는 것을 확인할 수 있습니다.
평문으로 사용자 이름과 비밀번호를 보려면 전체 TCP 대화를 살펴봐야 합니다. Wireshark에서는 Analyze > Follow > TCP Stream 메뉴로 들어가서 확인할 수 있습니다.
이제 클라이언트와 서버 사이에 전송된 모든 내용을 볼 수 있습니다.
모든 클라이언트 패킷은 빨간색이고, 서버 패킷은 파란색입니다.
이제 Telnet이 안전하지 않다는 것을 확인했습니다. 그래도 여전히 사용하고 싶다면, access-list와 함께 사용해 적어도 어떤 장비가 라우터나 스위치에 연결할 수 있는지 제한하는 것이 좋습니다. 방법은 다음과 같습니다.
R1(config)# access-list 1 permit host 192.168.12.2
R1(config)# line vty 0 4
R1(config-line)# access-class 1 in먼저 192.168.12.2(R2)만 허용하는 access-list를 생성한 다음, access-class 명령어로 VTY 라인에 적용합니다. 테스트해 봅시다.
R2# telnet 192.168.12.1
Trying 192.168.12.1 ... Open여전히 접속할 수 있습니다. access-list는 일부 패킷이 매칭되었음을 보여줍니다.
R1# show access-lists
Standard IP access list 1
10 permit 192.168.12.2 (2 matches)이게 전부입니다.
1.3. Telnet 클라이언트
이전 예제에서 R2에서 R1으로 접속하는 데 Telnet 클라이언트를 어떻게 사용하는지 보여드렸지만, 이 클라이언트로 할 수 있는 일이 훨씬 많습니다. 모든 옵션을 살펴봅시다.
R2# telnet 192.168.12.1 ?
/debug Enable telnet debugging mode
/ipv4 Force use of IP version 4
/ipv6 Force use of IP version 6
/line Enable telnet line mode
/noecho Disable local echo
/quiet Suppress login/logout messages
/route: Enable telnet source route mode
/source-interface Specify source interface
/stream Enable stream processing
/terminal-type Set terminal type
<0-65535> Port number
bgp Border Gateway Protocol (179)
chargen Character generator (19)
cmd Remote commands (rcmd, 514)
daytime Daytime (13)
discard Discard (9)
domain Domain Name Service (53)
drip Dynamic Routing Information Protocol (3949)
echo Echo (7)
exec Exec (rsh, 512)
finger Finger (79)
ftp File Transfer Protocol (21)
ftp-data FTP data connections (20)
gopher Gopher (70)
hostname NIC hostname server (101)
ident Ident Protocol (113)
irc Internet Relay Chat (194)
klogin Kerberos login (543)
kshell Kerberos shell (544)
login Login (rlogin, 513)
lpd Printer service (515)
nntp Network News Transport Protocol (119)
onep-plain ONEP Cleartext (15001)
onep-tls ONEP TLS (15002)
pim-auto-rp PIM Auto-RP (496)
pop2 Post Office Protocol v2 (109)
pop3 Post Office Protocol v3 (110)
smtp Simple Mail Transport Protocol (25)
sunrpc Sun Remote Procedure Call (111)
tacacs TAC Access Control System (49)
talk Talk (517)
telnet Telnet (23)
time Time (37)
uucp Unix-to-Unix Copy Program (540)
whois Nicname (43)
www World Wide Web (HTTP, 80)
<cr>가장 중요한 두 가지 옵션은 소스 인터페이스 선택과 다른 포트 번호 지정입니다. 다른 포트 번호를 사용하는 것은 매우 유용한데, 특정 서비스가 실행 중인지, access-list가 작동하는지, 라우팅이 올바르게 구성되었는지 테스트할 수 있습니다.
1.3.1. 포트 번호
간단한 예제를 시도해 봅시다. R1에서 HTTP 서버를 활성화합니다.
R1(config)# ip http server이제 Telnet으로 HTTP 서버가 활성화되어 있는지 확인합니다.
R2# telnet 192.168.12.1 80
Trying 192.168.12.1, 80 ... Open연결되었습니다. HTML을 안다면 페이지를 요청해 볼 수도 있습니다.
GET / HTTP/1.0
HTTP/1.1 401 Unauthorized
Date: Tue, 12 Jul 2016 10:31:55 GMT
Server: cisco-IOS
Accept-Ranges: none
WWW-Authenticate: Basic realm="level_15_access"
401 Unauthorized
[Connection to 192.168.12.1 closed by foreign host]HTTP 서버에서 인가되지 않았기 때문에 R1이 연결을 끊어버렸지만, 이 예제로 HTTP 서버가 실행 중임을 증명할 수 있습니다.
1.3.2. 소스 인터페이스
Telnet 클라이언트에 다른 소스 인터페이스도 사용할 수 있습니다. 이를 테스트하기 위해 R2에 다른 인터페이스와 IP 주소를 추가하겠습니다. 루프백을 만들어 봅시다.
R2(config)# int loopback 0
R2(config-if)# ip address 2.2.2.2 255.255.255.255R1이 이 루프백 인터페이스에 도달할 수 있도록 합시다.
R1(config)# ip route 2.2.2.2 255.255.255.255 192.168.12.2빠른 ping으로 작동을 확인합니다.
R1# ping 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 3/4/5 ms좋습니다. R1이 2.2.2.2에 도달하는 방법을 알고 있습니다.
192.168.12.2만 R2에 연결되도록 access-list를 구성했던 것을 기억하시나요? 다른 소스 인터페이스를 지정해 검증할 수 있습니다.
R2# telnet 192.168.12.1 /source-interface loopback 0
Trying 192.168.12.1 ...
% Connection refused by remote hostVTY 라인의 access-list 때문에 연결이 허용되지 않습니다. 포트 번호와 소스 인터페이스를 결합할 수도 있습니다.
R2# telnet 192.168.12.1 80 /source-interface loopback 0
Trying 192.168.12.1, 80 ... Open보시는 것처럼, 루프백 인터페이스를 소스로 사용해 TCP 포트 80에 연결할 수 있습니다.
구성
직접 살펴보고 싶으신가요? 각 장치의 최종 구성은 다음과 같습니다.
R1
hostname R1
!
ip cef
!
username admin password 0 my_password
!
interface GigabitEthernet0/1
ip address 192.168.12.1 255.255.255.0
!
ip http server
ip route 2.2.2.2 255.255.255.255 192.168.12.2
!
access-list 1 permit 192.168.12.2
!
endR2
hostname R2
!
ip cef
!
interface Loopback0
ip address 2.2.2.2 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.12.2 255.255.255.0
!
end2. 결론
- Telnet은 Cisco IOS 라우터 또는 스위치의 원격 관리에 사용할 수 있습니다.
- Telnet은 모든 데이터를 평문으로 전송하기 때문에 안전하지 않습니다. SSH를 사용하는 것이 더 좋습니다.
- Telnet을 사용한다면, access-list로 어떤 장치가 연결할 수 있는지 제한하는 것이 가장 좋습니다.
- Telnet 클라이언트는 다른 포트에 연결하고, access-list 및/또는 라우팅을 테스트하는 훌륭한 도구입니다.
포럼 답글
vallia
다음 문장을 번역해 주세요: “Telnet is niet secure dus liever niet gebruiken…” (네덜란드어)
ReneMolenaar
안녕 Valli,
방금 이 부분을 제거했습니다. 제 초안의 일부였습니다(네덜란드어로 작성되어 있었음).
Rene
hroger
login local 명령어를 입력하기 전에 “user and password” 자격 증명을 먼저 만드는 것이 더 낫다고 생각합니다. 문제가 발생할 경우(제어를 잃어버린다면), 장비가 아직 만들지 않은 계정을 요구할 수 있기 때문입니다. 제 말이 맞나요?
lagapidis
안녕 Hugues,
네, 자격 증명을 만들지 않은 채 login local 명령어를 입력하고 로그아웃하면, 다시 로그인할 수 없게 됩니다.
Laz
m1dagne
안녕 Laz, 빠른 답변에 감사드립니다. 구체적으로 말씀드리면, 저는 CCNA Routing & Switching ICND1 100-105의 Unit 7 Network Management의 Telnet Server and Client 부분을 공부하고 있었습니다. Packet Tracer 7.1에서 다음을 발견했습니다:
R2#telnet 192.168.12.1 ?
<0-65535> Port number
<cr>보시는 것처럼 강의 노트에서 설명한 telnet 192.168.12.1 /source interface... 명령어 뒤에 소스 주소를 추가하는 옵션이 없습니다.
7개의 추가 답글이 있습니다. 커뮤니티 포럼을 방문해 질문하거나 토론에 참여하세요.
출처: https://networklessons.com/cisco/ccnp-encor-350-401/cisco-ios-telnet-server-client