본문 바로가기

네트워크/네트워크 좀 더 알아보기-공용

cisco 백업(FTP,TFTP)/Syslog/모니터링(netflow, SNMP, Accounting)/ACL 응용(named, time, rate-limit)

cisco에서 백업은 크게 두가지로 나뉨


1. local 백업 - 말그대로 현재 장비에 백업해두는 형태

2. Remote 백업 - 물리적으로 떨어져있는 서버와 같은 장비에 원격으로 전송하여 백업

2-1. TFTP - UDP, 빈번한 백업 필요 시 사용.

2-2. FTP - TCP, 보통 대용량 백업 시 사용





local 백업


R1#copy running-config flash:aa.txt

매우 간단하다 running config를 flash 메모리에 aa.txt라는 이름으로 백업한다는 뜻

Destination filename [aa.txt]? -> 확인(엔터)

Erase flash: before copying? [confirm] -> 확인(엔터)

Erasing the flash filesystem will remove all files! Continue? [confirm] -> 확인(엔터)


R1#more flash:aa.txt

제대로 저장되었는지 확인하는 명령어


R1(config)#hostname aa

 host name을 aa로 바꾸고

aa#configure replace flash:aa.txt
 다음 명령어로 롤백이 가능하다. 롤백을 해보자.
R1#
그러면 다시 hostname이 R1으로 돌아간 것을 확인 가능하다.






remote 백업 - tftp, ftp

R1#copy flash:aa.txt tftp:
현재 로컬 백업으로 저장되어있는 aa.txt를 tftp 전송을 한다.
Address or name of remote host []? 1.1.12.2  -> 목적지는 tftp 프로토콜이 구동중인 서버로 해준다.
Destination filename [aa.txt]? -> 원하는 파일 이름을 입력하면
다음과 같이 전송이 가능하다.

복원은 반대로만 해주면된다.

R1#copy tftp: flash:
이번엔 반대로 tftp를 앞에 써주고
Address or name of remote host []? 1.1.12.2 -> tftp 서버 주소를 입력해준다.
Source filename []? aa.txt -> 어떤 파일을 가져와서 복원할 것이지 정해주고
Destination filename [aa.txt]? aa.txt -> 가져온 백업 파일이 어떤 이름으로 다시 저장되는지를 정해준다.








간단한 파일들은 모두 tftp를 통해 전송하면 된다. 그러나 tftp는 UDP방식을 사용하기때문에 신뢰성이 있지는 못하다.
그렇기때문에 용량이 큰 파일들은 깨질 수도 있다. 따라서 용량이 큰 파일들은 모두 FTP로 보내야한다.

예시를 하나 들어보자.

R2#show tech-support
해당 명령어를 입력하면 몇분동안 계속해서 메시지가 지속적으로 나온다.
해당 명령어는 cisco 장비가 정상적으로 작동을 안할 시 해당 내용을 모두 복사하여 cisco에 보내는데 사용한다.
그러나 TFTP로 보내기에는 매우 부담되는 양이다.
이때 사용하는 것이 FTP이다.

R1#show tech-support | redirect ftp://aaa:aaa@10.1.10.11/R1-tech
간단하게 이런식으로 써주면 된다. 
| 기호는 show tech-support 명령어의 출력 내용을
redirect는 다시 전송해라
ftp 방식으로
아이디는 aaa 비밀번호도 aaa
ftp 서버 이름은 10.1.10.11이며
파일명은 R1-tech로 저장하라는 의미이다.

당연히 FTP 서버에는 aaa 계정이 존재해야한다.


Syslog
Cisco log는 0등급 부터 7등급까지 있다.
기본적으로 숫자가 낮을수록 더 중요한 메시지이며,
통상적으로 0 부터 4등급이 심각한 로그 메시지이며, 5등급 부터 7등급이 일반적인 로그 메시지이다.
 예를 들어보면 
%LINK-5-CHANGED: Interface FastEthernet0/1, changed state to up -> 해당 메시지는 특정 인터페이스에 no shutdown을 입력 시 나오는 로그
  이며, -5-라고 써있는 것을 보아  5등급 로그메시지이다.
이처럼 모든 로그 메시지는 모두 등급이 나누어져있다.
이러한 로그 메시지를 분석하여 해킹의 여부, 시스템 설정 상 문제 등을 확인 할 수 있다.
따라서 해당 메시지를 따로 로그서버에 저장해둘 필요가 있다.
이때 사용하는 프로토콜이 Syslog이다.
Syslog는 우선 Syslog 프로토콜이 구동중인 서버가 필요하며, 해당 서버로 모든 로그메시지가 전송된다.


Router(config)#logging on

Syslog를 사용하겠다는 명령어이다.

Router(config)#logging host 1.1.1.254 
Syslog 서버의 IP는 1.1.1.254라는 명령어다.

추가적인 옵션 명령어로는
R2(config)#logging trap 7
앞서 말한 로그 등급이 0등급 부터 7등급까지 모두 전송하겠다는 뜻이다.
R2(config)#no logging console   
해당 명령어를 사용 시 라우터에서 더이상 log메시지가 뜨지 않는다.
debug ip packet detail 등의 명령어를 사용하면 엄청난 로그메시지가 뜬다. 메시지가 너무 많이 뜰 시 라우터 관리가 불가능하다.
따라서 해당 명령어와 같은 명령어와 동시에 사용하는 명령어이다.

Router(config-if)#no sh

특정 인터페이스에 들어가서 로그 메시지를 생성해본다.

%LINK-5-CHANGED: Interface FastEthernet0/1, changed state to up -> 다음과 같은 로그 메시지가 뜨는 것을 확인 가능하다.


실제로 Syslog 서버에 가면


다음과 같이 로그 메시지가 전송된 것을 확인 가능하다.




모니터링-accounting
show ip accounting 명령어를 사용하면 해당 라우터를 지나가는 모든 패킷 통계를 모두 볼 수 있다.

구성이 R1--R2--R3 다음과 같은 구성일 때

R2(config)#int f0/0
R2(config-if)#ip accounting
R2(config)#int f0/1
R2(config-if)#ip accounting
우선 패킷 accounting을 원하는 인터페이스에 해당 명령어를 써 ip accounting을 enable 시켜준다.


그리고
R2#show ip accounting
   Source           Destination              Packets               Bytes

위와 같이 아무 목록도 생성되지 않는다.

이번엔 R1에서 R3로  핑을 때리고
R1#ping 1.1.23.3

해당 명령어를 입력 시
R2#show ip accounting
   Source           Destination              Packets               Bytes
 1.1.23.3         1.1.12.1                         5                 500
 1.1.12.1         1.1.23.3                         5                 500

다음과 같이 R1과 R3의 패킷 정보가 출력되는 것을 확인 가능하다.


모니터링-netflow
현재는 모니터링에 있어서 accounting 보다는 cisco에서 제공하는 기술인 netflow를 많이 사용한다.
netflow는 해당 인터페이스를 모니터링 하는 기술이다.

R1(config)#int f0/0
특정 인터페이스에 들어가
R1(config-if)#ip flow ingress
들어오는 패킷과
R1(config-if)#ip flow egress
나가는 패킷을 모두 netflow를 on 시켜준다.
R1(config)#ip flow-capture fragment-offset
R1(config)#ip flow-capture icmp
R1(config)#ip flow-capture ip-id
R1(config)#ip flow-capture ttl
R1(config)#ip flow-capture vlan-id
모니터링 할 목록들을 입력해주고

R1#show ip cache verbose flow
해당 명령어로 모니터링을 해준다.


모니터링-SNMP
현재 가장 많이 사용하고 있는 모니터링 방식은 SNMP 프로토콜이다. SNMP 역시 특정 인터페이스의 트래픽을 분석하는 기술이다.
현재 여러 네트워크 모니터링 프로그램과 연동하여 패킷들을 그래픽 환경에서 모니터링 할 수 있게 해준다.

특정 서버에 모니터링 프로그램을 깔아놓고 라우터에 다음과 같은 설정을 해주면된다.

R1(config)#snmp-server community cisco rw
SNMP 환경을 만들어주며, 해당 SNMP 환경에 접속하기 위한 key는 cisco, 서로 간의 통신 방식은 RW이다.
R1(config)#snmp-server host 10.1.10.1 version 2c cisco
SNMP server를 지정해준다. 사실 SNMP는 일반적인 Server/client 모델이라기 보단 Manager/Agent 모델을 취하고 있다. Manager가 마치 서버와 같은 역할을 한다고 생각해주면된다. Manager로 지정한 10.1.10.1은 모니터링 프로그램이 깔려있는 서버이며, 해당 서버에서 모니터링 프로그램을 통해 인터페이스 모니터링을 GUI 환경에서 가능하다.
R1(config)#snmp-server enable traps
trap를 활성화 시켜준다. trap이란 Agent들이 긴급한 상황 발생 시 Agent들이 Manager에게 긴급 메시지를 전송하는 것을 뜻한다.
R1(config)#snmp-server ifindex persist
SNMP 통신을 하기 위해서 인터페이스 인덱스라는 것이 필요하다. 그러나 인터페이스 인덱스는 재부팅 할 때마다 값이 바뀌게 된다. 따라서 해당 명령어를 통해 인터페이스 인덱스 값을 고정시켜주자.
R1(config)#int f0/0
R1(config-if)#snmp ifindex persist
특정 인터페이스로 들어가서도 인덱스값을 고정시켜준다.


namde ACL

이전에 네트워크 기초에서 ACL에 관해 짚고 넘어간 적이 있다. 여기서는 ACL이 다양하게 응용되는 환경에 대해서 배우겠다.
우선 기존에 배웠던 ACL은 특정 ACL 다음에 숫자가 나온다. 이 숫자로 표준 ACL, 확장 ACL의 구분이 가능하다.
여기서는 숫자가 아닌 이름을 사용한 ACL에 대해서 배우겠다.
named ACL의 가장 큰 특징은 추가, 삭제, 수정이 가능하다는 것이다.
기존의 ACL은 삭제 시 해당 ACL 전부가 삭제된다. 또한 마지막 추가가 아닌 중간 지점에서의 추가가 불가능하며 수정 또한 불가능하다.
그러나 named ACL은 추가, 수정, 삭제 전부 다 가능하다.


R1(config)#ip access-list standard netdream
R1(config-std-nacl)#permit 1.1.1.1 0.0.0.0
R1(config-std-nacl)#permit 2.2.2.2 0.0.0.0
R1(config-std-nacl)#permit 3.3.3.3 0.0.0.0
R1(config-std-nacl)#permit 4.4.4.4 0.0.0.0
R1(config-std-nacl)#exit
R1(config)#int f0/0
R1(config-if)#ip access-group netdream in

여기서 

R1(config-std-nacl)#permit 1.1.1.1 0.0.0.0   -> 10
R1(config-std-nacl)#permit 2.2.2.2 0.0.0.0   -> 20
R1(config-std-nacl)#permit 3.3.3.3 0.0.0.0   -> 30
R1(config-std-nacl)#permit 4.4.4.4 0.0.0.0   -> 40
각각 이렇게 숫자가 암묵적으로 할당된다고 생각하면된다.

R1(config)#ip access-list standard netdream
R1(config-std-nacl)#no 10
10번라인, 즉 permit 1.1.1.1 0.0.0.0을 삭제해라
R1(config-std-nacl)#10 permit 1.2.1.1 0.0.0.0
해당 명령어를 통해 1.1.1.1을 1.2.1.1로 수정했다.
R1(config-std-nacl)#15 permit 12.12.12.12 0.0.0.0
10과 20사이에 15라는 이름으러 12.12.12.12를 추가했다.






ACL과 여러가지 옵션이 합쳐져서 특정 상황에서의 접근 제한을 구현 할 수 있다.

ACL + 속도 
특정 속도 이상일 시 해당 패킷을 drop 할 수 있다. 과도한 resource를 소모하는 패킷을 방어할 때 사용한다.


R1(config)#access-list 10 permit 1.1.12.2 0.0.0.0
특정 ACL을 작성 후
R1(config)#int f0/0
R1(config-if)#rate-limit input access-group 10 8000 1500 2000 conform-action transmit exceed-action drop
위와 같이 작성해주면 된다.
해당 명령어를 풀어서 설명하면 다음과 같다.
rate-limit access-group 10 -> 앞서 작성한 access-list 10에 속도 제한을 걸겠다.
8000 -> bps를 뜻한다.
1500 -> 버퍼 크기를 뜻한다. 일반적으로 bps/8*1.5(tcp인 경우만 1.5를 곱해준다.)로 지정해준다.
2000 -> 버퍼 크기를 1500으로 잡아도 트래픽이 너무 빠르기때문에 초과할 수 있다. 그럴때를 대비해서 잡아주는 값이다. 
일반적으로 버퍼크기 * 2의 값을 지정해주지만, 여기서는 2000만 지정해주었다.
conform-action transmit exceed-action drop -> 해당 범위에 들어오는 패킷의 경우 허용, 해당 범위를 초과하는 패킷의 경우 드랍시켜준다.


 


ACL + 시간

특정 시간에만 통신을 허용/거부하고 싶을 때 사용한다.


R1(config)#time-range Test

우선 시간에 의한 ACL을 위해서는 time-range를 만들어줘야한다. Test라는 이름의 time range를 만들어주자.

R1(config-time-range)#periodic weekend 18:00 to 18:05

test라는 time-range의 시간대를 설정해준다. 위의 경우 주기적으로 주말 6시부터 6시 5분까지라고 지정해주었다.
R1(config)#access-list 100 deny ip any any time-range Test
앞서 정한 시간대( 주말 6시부터 6시 5분까지)동안 모든 통신을 거부한다는 명령어
R1(config)#access-list 100 permit ip any any
나머지 시간대에는 통신을 허용한다는 명령어
R1(config)#int f0/0
R1(config-if)#ip access-group 100 in
인터페이스에 적용을 시켜주면 이제 해당 인터페이스는 주말 6시부터 6시 5분동안 어떠한 통신도 불능상태가 된다.


nat 외부 접근 시 차이
이전에 언급했듯이 nat는 총 3가지가 존재한다. -> static, dynamic, pat
만약 외부에서 특정 사설 IP로 접근을 하고싶다면 어떻게 해야할까? 각각의 방법마다 접근 방법이 다르다.

우선 static의 경우
static은 말 그대로 1:1을 지정해주는 것, 외부에서 공인 IP를 입력하면 바로 접근이 가능하다.
dynamic은 n:m으로 지정해주는 것이다. 즉 어떤 사설 IP가 공인 IP와 매칭될지 알 수 없다. 따라서 한번 이상 내부에서 먼저 외부로 접근을 해서
nat table에 사설 IP와 공인 IP list를 입력해주어야한다.
pat는 포트번호를 다르게 해서 접근하는 것이기 때문에 다른 프로그램의 보조가 필요하다.