Skip to Content
05. Security09. Cisco IOS Telnet Server and Client

Cisco IOS Telnet 서버와 클라이언트

1. 구성

이 예제에서는 다음 토폴로지를 사용합니다.

01_Cisco IOS Telnet Server and Client_img_p02_01

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 local

login local 명령어를 사용해 라우터/스위치에게 인증을 위해 로컬 데이터베이스를 사용하도록 지시해야 합니다. 사용자 계정을 만들어 봅시다.

R1(config)# username admin password my_password

주의: login local을 먼저 적용한 뒤 사용자 계정을 만들기 전에 세션을 끊으면, 로그인할 계정이 없어 장비에 접근할 수 없게 됩니다. 가능하면 사용자 계정을 먼저 생성한 뒤 login local을 적용하거나, 콘솔을 통해 작업하세요.

이제 비밀번호가 있는 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 패킷입니다.

01_Cisco IOS Telnet Server and Client_img_p05_01 01_Cisco IOS Telnet Server and Client_img_p05_02

위에서 클라이언트에서 서버로 가는 Telnet 패킷을 볼 수 있습니다. Telnet이 TCP 목적지 포트 23을 사용하는 것을 확인할 수 있습니다.

평문으로 사용자 이름과 비밀번호를 보려면 전체 TCP 대화를 살펴봐야 합니다. Wireshark에서는 Analyze > Follow > TCP Stream 메뉴로 들어가서 확인할 수 있습니다.

이제 클라이언트와 서버 사이에 전송된 모든 내용을 볼 수 있습니다.

01_Cisco IOS Telnet Server and Client_img_p06_01

모든 클라이언트 패킷은 빨간색이고, 서버 패킷은 파란색입니다.

이제 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.255

R1이 이 루프백 인터페이스에 도달할 수 있도록 합시다.

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 host

VTY 라인의 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 ! end

R2

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 ! end

2. 결론

  • Telnet은 Cisco IOS 라우터 또는 스위치의 원격 관리에 사용할 수 있습니다.
  • Telnet은 모든 데이터를 평문으로 전송하기 때문에 안전하지 않습니다. SSH를 사용하는 것이 더 좋습니다.
  • Telnet을 사용한다면, access-list로 어떤 장치가 연결할 수 있는지 제한하는 것이 가장 좋습니다.
  • Telnet 클라이언트는 다른 포트에 연결하고, access-list 및/또는 라우팅을 테스트하는 훌륭한 도구입니다.

참고: Packet Tracer 같은 시뮬레이터는 telnet ... /source-interface 같은 고급 옵션을 지원하지 않을 수 있습니다. 실제 장비나 GNS3/EVE-NG 같은 에뮬레이터에서 테스트하세요.


출처: https://networklessons.com/cisco/ccnp-encor-350-401/cisco-ios-telnet-server-client