본문 바로가기

네트워크/네트워크 기초실습

ACL, NAT

ACL(ACcess List)이란?  접근을 허가하고 제어하는 기준이 되는 리스트

-특정 사용자의 접근 제한(IP 기반)

-특정 서비스 이용을 제한(포트 기반)

-라우팅 경로의 조정(Dynamic 방식 사용 시)


ACL의 두가지 Type

-Standard

출발지 주소만을 확인하여 필터링

Ex) 출발지가 192.168.10.1인 패킷을 모두 차단해라


-EXtended

출발지 주소 뿐 아니라 목적지, 포트번호, 프로토콜까지 확인하여 필터링

상세한 트래픽 필터링이 가능


ACL 특징

-순서가 중요하다.(작은 범위가 제일 위쪽에)

  ex)만약 첫번째에 192.168.10.0/24 대역을 차단하라란는 명령어를 두번째에 192.168.10.1 호스트를 허용해라 입력 시

     -> 첫번째에 차단하라는 명령어를 기준으로 밑에 것 무시 즉, 192.168.10.1을 차단한다.

-암묵적으로 마지막에는 all deny 명령어가 숨어있다.

-인바운드 방식과 아웃바운드 방식 존재

인바운드: 패킷이 들어올 때 필터링

아웃바운드: 패킷이 나갈 때 필터링


ACL 설정 방식


-Standard

  : access-list [1~99] {permit or deny} [출발지 ip] [wild card]


*wild card는 다음과 같은 경우 생략이 가능하다.

1.특정 IP대역 하나를 지정

  ex)192.168.10.1 0.0.0.0  ->   host 192.168.10.1로 바꿔서 쓰는 것 가능

2. 모든 IP 지정

  ex)0.0.0.0 255.255.255.255  -> any로 바꿔서 쓰는 것 가능

 

-Extended

  : access-list [100~199] {permit | deny} [protocol] [출발지 IP] [wild mask] [출발지 포트] [목적지 IP] [wild mask] [목적지 포트]

각 명령어 부분적 설명

[protocol] -> tcp인지 udp인지 혹은 IP , ICMP등의 통신 방식을 지정해주는 프로토콜 지정

[출발지, 목적지 포트] -> 서비스 내용을 지정, 보통 앞에 eq를 붙인다.

ex) 웹서비스를 차단하고 싶다. -> eq www 혹은 eq 80 형태로 지정.


access-list 명령어로 access-list 생성 후

원하는 인터페이스로 들어가서

ip access-group [number] { in | out }  ->  inbound로 사용 할 것인지 outbound로 사용 할 것인지 지정

여기서 [number[는 앞서 지정해준 access-list 번호 


PC 0과 PC 1 모두 게이트웨이를 각각 192.168.10.2, 192.168.20.2로 지정한다.

또한 R1과 R2에 EIGRP를 구동한다면 R1의 S0/0으로 핑이 가능하다.

EIGRP는 간단하게 다음과 같이 설정한다.


R1(config)#router eigrp 1

R1(config-router)#network 10.0.0.0


R2(config)#router eigrp 1

R2(config-router)#network 10.0.0.0

R2(config-router)#network 192.168.10.0

R2(config-router)#network 192.168.20.0


핑이 되는 것을 확인하고 access-list로 PC 0만 통신을 차단해본다. 설정은 R2에서 진행한다.


R2(config)#access-list 10 deny 192.168.10.1 0.0.0.0

출발지 IP가 192.168.10.1인 패킷을 모두 차단하겠다.

R2(config)#access-list 10 permit any

나머지 패킷은 모두 허용하겠다.

R2(config-if)#ip access-group 10 out

int s0/0에서 진행한다. 패킷이 해당 인터페이스를 통해 나가므로 out으로 지정하였다.


위에서 앞서 언급했던 ACL의 특징 두 가지를 볼 수 있다.

우선 작은 범위부터 먼저 쓴다는 것.

만약 access-list 10 permit any을 먼저 썼다면?

모든 패킷이 허용이 우선 적용되어 뒤에 deny 명령어가 와도 차단 시킬 수 없다.

두 번째 마지막에는 암묵적으로 deny any가 들어간다. 고로 패킷을 허용하고 싶다면 permit any를 꼭 써준다.




PC>ping 10.10.12.1

Pinging 10.10.12.1 with 32 bytes of data:


Reply from 192.168.10.2: Destination host unreachable.

Reply from 192.168.10.2: Destination host unreachable.

Reply from 192.168.10.2: Destination host unreachable.

Reply from 192.168.10.2: Destination host unreachable.


다음과 같이 도달 할 수 없다는 메시지가 뜨면서 차단이 된 것을 확인 할 수 있다.



이번에는 Extended ACL로 웹서비스만 차단해보는 것을 진행하겠다.

우선 진행하기에 앞서 이전에 설정했던 acl을 삭제한다.


R2(config-if)#no ip access-group 10 out

R2(config-if)#no access-list 10


우선 웹서비스 사용하는 법을 알아보자.


1. pc0-web browser를 클릭


1

2. http://10.10.12.1을 주소창에 입력하면 다음과 같은 문구가 뜬다. 다음 문구가 뜨면 웹전송을 하고있다는 뜻!!


웹에서 정보 전송은 80번 포트를 이용한다. 고로 access-list로 80번 포트를 막아보자.


R2(config)#access-list 101 deny tcp host 192.168.10.1 host 10.10.12.1 eq 80

웹은 tcp로 통신한다. 따라서 프로토콜을 tcp로 지정해주고 eq 80으로 80번 포트를 지정해준다.

R2(config)#access-list 101 permit ip any any

역시 암묵적으로 any deny가 되어있기메 모두 허용을 해준다.

R2(config)#int s0/0

R2(config-if)#ip access-group 101 out



해당 설정을 완료한 후 아까와 같이 들어가보면


잠시 대기하다가 위와 같은 문구가 뜨는 것을 확인 할 수 있다.





NAT(Network Address Translation)

:IP주소를 변환 시켜주는 기술, 현재 스마트폰과 같은 가정기기들의 스마트화로 IP가 부족한 상황이다. 모든 스마트 기기에 공인 IP를 할당해 줄 수 없다. 고로 개인이 직접 만든  사설 IP를 사용한다. 문제점은 사설 IP는 인터넷을 사용하지 못한다는 것. 따라서 인터넷 사용을 위해 공인 IP로 바꿔 줄 필요가 있다. 이 때 사용하는 기술이 NAT이다.


Static NAT

mapping IP를 하나하나 직접 입력

사설 IP와 공인 IP를 1:1 맵핑 시켜준다.

따라서 IP를 절약하는 기술이 아니다.(어차피 하나의 공인 IP를 하나의 디바이스가 사용하기때문에)

IP 절약보다는 보안에 더 신경쓴 방식.

주로 외부에서 접근해야하는 웹서버 같은 곳에 위와 같은 방식을 사용한다.


Dynamic NAT

각각 Basic Dynamic NAT와 PAT로 나누어진다.

     Basic Dynamic NAT: 여러개의 사설 IP가 하나 이상의 공인 IP와 맵핑, 즉 하나의 공인 IP를 여러 사설 IP에 맵핑이 불가능하다.

                                만약 특정 사설 IP가 특정 공인 IP로 변환 돨 시 일정 시간동안 해당 공인 IP를 사용중으로 돌려놓는다.

    내 옆에는 인터넷을 해도 공인 IP가 부족하기에 나는 인터넷을 못하는 사태가 발생한다.

PAT(Port Address Translation): 일반적으로 쓰는 인터넷에 사용하는 기술, 여러개의 사설 IP가 하나의 공인 IP에 맵핑 가능

                                   IP만 보고서는 어떤 사설 IP가 해당 공인 IP로 변환되어 나간 것인지 알 수 가 없다.

따라서 IP뒤에 포트번호를 붙여서 각 사설 IP들을 식별한다.


설정 방식

Static은 비교적 간단.

ip nat inside source static [사설 ip] [공인 ip]


Dynamic은 비교적 복잡하다. 여러개의 IP를 맵핑시키는 것이므로 직접 IP를 지정하는 것이 아닌 IP범위를 지정한다.


사설 IP범위지정 -> access-list(Standard) 사용

access-list {1~99} permit [source-ip] [wildcard]

 ex) access-list 10 permit 192.168.10.0 0.0.0.255 -> 192.168.10.0/24 대역을 사설 IP 대역으로 지정, 해당 IP 대역들을 공인 IP 대역으로 바꾸겠다.


공인 IP범위 지정 ->  pool 사용

ip nat pool [name] [start ip] [end ip] [netmask netmask | prefix-length prefix]

 ex)ip nat pool netdream [1.1.1.1] [1.1.1.254] [255.255.255.0] -> 바꿔주는 공인 IP 대역은 1.1.1.1 ~ 254, 1.1.1.0/24 대역이다.


ip nat inside source list [ACL-number] pool [pool-name] overload

해당 ACL-number에 해당하는 사설 IP 대역들을 pool-name에 지정해준 공인 IP로 변환시켜주겠다.

맨 마지막 overload가 없다면 basic dynamic, 있다면 PAT에 해당.


지정 후 인터페이스에서 도메인을 설정한다.

ip nat inside -> 해당 인터페이스는 NAT 내부 도메인, 내부 도메인에서는 출발지 IP가 변경된다.

ip nat outside -> 해당 인터페이스는 NAT 외부 도메인, 외부 도메인에서는 목적지 IP가 변경된다.


위의 토폴로지에서 192.168로 시작하는 대역(PC 0, PC1)은 모두 10번대 대역으로 변환하는 것 실습


R2(config)#access-list 10 permit 192.168.0.0 0.0.255.255

사설 IP 대역을 192.168로 시작하는 모든 대역으로 지정

R2(config)#ip nat pool netdrea 10.10.12.2 10.10.12.30 netmask 255.255.255.0

공인 IP 대역은 10.10.12.2 /24부터 10.10.12.30 /24으로 지정

R2(config)#ip nat inside source list 10 pool netdrea overload

list 10에 지정한 사설 IP를 netdrea에 지정한 공인 IP로 바꿔주겠다. 이때 바꾸는 방식은 overload(PAT)


R2(config)#int f0/0

R2(config-if)#ip nat inside

int f0/0은 출발지 IP가 변환되는 인터페이스.

R2(config-if)#int f0/1

R2(config-if)#ip nat inside

int f0/1 또한 출발지 IP가 변환되는 인터페이스.

R2(config-if)#int s0/0

R2(config-if)#ip nat outside

int s0/0은 목적지 IP가 변환되는 인터페이스.



pc0에서 핑을 한 후

show ip nat translations로 nat 테이블 확인 가능


R2#sh ip nat translations 

Pro  Inside global     Inside local       Outside local      Outside global

icmp 10.10.12.2:47     192.168.10.1:47    10.10.12.1:47      10.10.12.1:47

icmp 10.10.12.2:48     192.168.10.1:48    10.10.12.1:48      10.10.12.1:48

icmp 10.10.12.2:49     192.168.10.1:49    10.10.12.1:49      10.10.12.1:49

icmp 10.10.12.2:50     192.168.10.1:50    10.10.12.1:50      10.10.12.1:50


192.168.10.1을 10.10.12.2로 바꿨다고 나옴.

*만약 nat설정을 수정하고 싶다면 우선 nat 테이블의 내용을 지워야한다. 고로 clear ip nat translation 명령어로 nat 테이블 먼저 삭제해주자.