bxm's IT Story

방화벽 GNS3 본문

Network/Firewall (KEDU)

방화벽 GNS3

bxmsta9ram 2021. 7. 13. 10:16

방화벽개론.pdf
0.15MB

CentOS Win701 Win2016 Win702
3 1 2 4

공통]

en

conf t

no ip domain lookup

 

line c 0

  logg sy

  exec-timeout 0

  exit

 

line vty 0 4

  pass cisco

  exit

 

hostname ##


## 1세대 방화벽 Packet Filtering ##

SW1]

no ip routing

 

HQ]

## VTP가 없으므로 바로 트렁킹

conf t

int f0/0

  no shut

  ip add 100.1.1.254 255.255.255.0

  exit

 

int f0/1

  no shut

  ip add 1.1.100.1 255.255.255.252

  end

wr


IOS_FW]

conf t

int f0/0

  no shut

  ip add 1.1.100.2 255.255.255.252

  exit

 

int f0/1

  no shut

  ip add 1.1.100.5 255.255.255.252

  end

wr


BB (BackBone)]

conf t

int f0/0

  no shut

  ip add 1.1.100.6 255.255.255.252

  exit

 

int f0/1

  no shut

  ip add 1.1.100.9 255.255.255.252

  end

wr


Branch]

conf t

int f0/0

  no shut

  ip add 1.1.100.10 255.255.255.252

  exit

 

int f0/1

  no shut

  ip add 200.1.1.254 255.255.255.0

  end

wr


## OSPF ##

HQ]

conf t

router ospf 13

  router-id 1.1.1.1

  network 100.1.1.254 0.0.0.0 area 0

  network 1.1.100.1 0.0.0.0 area 0

  end

wr


IOS_FW]

conf t

router ospf 13

  router-id 2.2.2.2

  network 1.1.100.2 0.0.0.0 area 0

  network 1.1.100.5 0.0.0.0 area 0

  end

wr


BB]

conf t

router ospf 13

  router-id 3.3.3.3

  network 1.1.100.6 0.0.0.0 area 0

  network 1.1.100.9 0.0.0.0 area 0

  exit

  

## BB가 DR이 되게 만들기 위해서

int f0/1

  ip os priority 100

  end

wr


Branch]

conf t

router ospf 13

  router-id 4.4.4.4

  network 1.1.100.10 0.0.0.0 area 0

  network 200.1.1.254 0.0.0.0 area 0

  end

wr


BB]

conf t

access-list 1 permit 100.1.1.0 0.0.0.255

access-list 1 permit 200.1.1.0 0.0.0.255

 

ip nat inside source list 1 int f1/0 overload

 

int f0/0

  ip nat inside

  exit

 

int f0/1

  ip nat inside

  exit

int f1/0

  no shut

  ip nat outside

  ip add dhcp

  exit

  ## IP 받은것을 확인!!

10.10.63.109로 할당 받았다.

  

ip route 0.0.0.0  0.0.0.0 f1/0 10.0.0.1

 

## 모든 OSPF 라우터들에게 Default-route를 뿌려야 얘로 향할것이므로

router ospf 13

  default-information originate always


Win7]

## VMnet1번 // IP 설정


Win2016]

## VMnet2번 // IP 설정

 

Window + R : devmgmt.msc

 

## Kedu.edu 를 지우고 새로 만들기!! 

이름은 공란

 

## 권한서버 - 주서버(찾아보기) - NS 선택 - 책임자 : admin.kedu.edu

 

## 이름서버 - 편집 - 

 

 

[CMD] - [nslookup]

> www.kedu.edu

> kedu.edu


## 이름풀이 잘 되나 확인 ##

Win7]

CMD

nslookup

>www.kedu.edu

CentOS]

## VMnet3번, IP 변경

vi /etc/sysconfig/network-scripts/ifcfg-ens32

vi /etc/resolv.conf 

이렇게 수정하기.

 

systemctl restart network

 

nslookup

>www.kedu.edu

>kedu.edu

잘 된다!

 

systemctl restart httpd

systemctl restart vsftpd


Win7]

## www.kedu.edu

   --> 안된다.

## www.naver.com

접속 잘 된다.



## Win701을 종료하고, VMware에서 Win701 우클릭 - Manage - Clone

 

## Virtual Machine 안에 WIN702 새로운 빈 디렉토리 만들어주고 설정

설치 완료!


WIN702]

## VMnet4번 , IP 넣기

 

 

## 이름 풀이 확인

 

## 인터넷 확인

Web Server로도 Ping이 정상적으로 간다.

## 사이트 접속 되나 확인 / FTP 되나도 추가로 확인해보기. 


## IOS Firewall ##

IOS_FW.txt
0.01MB


- Cisco Router의 경우 모델과 IOS 버전에 따라 Router Firewall 기능을 구현하는 것이 가능하다.

1. ACL(Access Control List)
2. RACL(Reflexive ACL)
3. DACL(Dynamic ACL)
4. CBACL(Context-Based ACL)
5. ZFW(Zone-based Firewall)


1. ACL(Access Control List)

IOS_FW]

conf t
ip access-list extended OUT->IN
  permit udp any host 100.1.1.250 eq 53
  permit tcp any host 100.1.1.251 eq 80
  deny ip any any

int f0/1
  ip access-group OUT->IN in


## 설정 후 <IOS_FW>과 <ISP> 라우터 사이의 OSPF 네이버 관계가 끊어지게 된다.  이유는 OSPF hello 패킷에 대해서      수신을 허용하지 않았기 때문이다.  이를 해결하기 위하여 OSPF hello 패킷을 허용해야 한다.  

## 주의할 점은 [deny ip any any] 보다 앞에 선언되어야 한다는 것이다.

 


IOS_FW]

conf t
ip access-list extended OUT->IN
  5 permit ospf host 1.1.100.6 any



[과제] FTP도 허용해 보시오.

IOS_FW]

ip access-list extended OUT->IN
  21 permit tcp any host 100.1.1.251 eq 21       

## FTP를 추가하려면 30번 이전의 번호로 추가하면 된다.

## tcp = 프로토콜

## any = 출발지

##100.1.1.251 = 목적지

Win702에서 Web 서버와 서버를 접근할 수 있게끔 해주는 것임.


## 기본적인 ACL의 경우 1세대 방화벽으로 Session을 인지하는 것이 아니라, 수신 Packet과 적용되어 있는 Filtering

    정책을 비교하여 수신 여부를 결정한다. 결과적으로 내부에서 외부로 전송한 트래픽의 응답을 처리할 수 없다.

 

    이유는 응답 트래픽을 모두 허용하는 것이 불가능하기 때문이다. 출발지 포트는 Random 포트이고, 해당 포트들을

    모두 허용할 수는 없다.

 

## 위와 같은 응답 트래픽 수신 문제를 해결할 수 있는 1세대 방화벽 기술에는 아래와 같은 것들이 있다.

    - 'established 옵션'

    - 'RACL(Reflexive ACL)'이 있다.

 

 

IOS_FW]

ip access-list extended OUT -> IN

  22 permit tcp any 100.1.1.0 0.0.0.255 established

 

## 'established' 옵션을 사용할 경우, tcp 서비스의 응답 트래픽은 수신이 가능하다. 그러나 실제 IOS_FW가 Session을

    인지하고 처리하는 것이 아니라, TCP 헤더의 Flag 중 ack 혹은 rst flag가 1인 경우 허용한다는 뜻이다.

    (TCP 응답 트래픽의 경우 해당 Flag가 1로 체크)

 

## 공격자가 해당 TCP Flag를 얼마든지 조작이 가능하고, 또한 TCP가 아닌 다른 Protocol에 대해서는 응답 트래픽을

    수신할 수 없기 때문에 제한이 많다. 이와 같은 한계점을 해결할 수 있는 1세대 방화벽 기술에는

    'RACL(Reflexive ACL)'이 있다!!


## 현재 내부에서 외부로 나가는 것을 막은 적이 없음. 하지만 외부의 인터넷을 방문한 후 복귀할 때 BB에서 IOS_FW로

    가는 ACL에 걸려버리게 된다!! (ACL은 현재 52,80,21번을 제외하고 전부 Deny!!) 

    이럴 때는 Established 옵션을 쓰면 된다.

 

IOS_FW]

show ip access      

30번 이전으로 주면 된다. 표 보면 나옴.

 

conf t

ip access-list extended OUT->IN

  22 permit tcp any 100.1.1.0 0.0.0.255  established


show ip access

22번에 들어간 것을 확인할 수 있다.

 

## 현재 Win702에서 Server 까지 지나갈 수 있고, Server에서 외부로 나갈 수도 있다.

    하지만, Server에서 외부 Internet에 접속 후 다시 내부로 들어오려고 할 때 방화벽에 막혀 들어오지 못한다.

    그러기에 Established를 사용했으나, 그것마저도 원할하지 않은 상황이다. 

    kedu.edu는 들어가지는데, www.naver.com는 결국 안들어가짐 ㅠㅠ

    

    따라서 이를 방지하고자 RACL을 사용할 것이다.

 

 

## 궁금했던것 !!!!! UTM에서는 방화벽 설정을 해주지 않으면 '자동 Deny' 였는데, 여기의 IOS_FW는 설정을 따로

해주지 않았음에도 Win701(내부) -> 외부 인터넷이 통신이 되었다. 이유는 라우터에서 쓰는 방화벽이기 때문에

기본설정이 UTM처럼 'Default Deny'면 기본 통신 자체부터가 불가능하기 때문에 일일이 설정하기가 번거롭게 된다.

따라서 기본 설정은 Permit인 것임!!


## 2. RACL(Reflexive ACL) ##

* RACL의 경우 1세대 방화벽 기술로 Session 정보를 인식할 수 없다 (Stateless)

   ## RACL은 IOS_FW에서 Source-IP/De-IP와 So-Port/De-Port 정보를 확인 후, 응답 트래픽을 수신하기 위한 임시

       ACL을 생성하게 된다. 임시 ACL의 경우 Source와 Destination 정보가 역으로 변경된 것이다. 동적포트(ex. FTP~)는         불가하다.

  ## RACL을 사용할 경우, 'Established' 옵션과는 다르게, TCP 외 다른 프로토콜의 응답도 처리가 가능하다.

 

* 리플렉시브 액세스리스트 (Reflexive Access List)란 내부에서 외부로 통신을 시작하는 순간 해당 세션만 허용하기

  위하여 만들어지는 액세스 리스트를 말한다.

 

* 일반 액세스 리스트 사용시 Established 옵션을 사용하여 세션을 차단할 수 있다. established 키워드는 ACK나 RST

  비트의 설정 여부에 따라 TCP 패킷을 차단한다. 즉, ACK나 RST 비트가 설정되어 있는 패킷은 세션의 처음이 아님을

  의미하므로, 이미 설정된 세션에 속하는 패킷들이다. 따라서 이런 패킷들은 통과시킨다.

  일반 액세스 리스트는 인터페이스에 영구적으로 설정되어 있으므로, 적당히 속이면 항상 외부에서 접근이 가능하며,

  Established 키워드를 사용한 앞의 방법으로는 TCP 상위 레이어 프로토콜만 제어할 수 있다. 

  그러나, 리플렉시브 액세스 리스트를 이용한 세션 필터링은 일시적인 필터를 사용하고, 세션이 끝나면 제거된다.

  이것으로 인해 해커들은 세션의 도중에만 작업할 수 있다.

 

  ==> 자기가 알아서 생성하고, 자기가 알아서 지운다. 실습을 통해 알아보자!

 

IOS_FW]

## 이전에 실습한 ACL을 모두 삭제

 

conf t

int f0/1

  no ip access-group OUT->IN in

  exit

no ip access-list extended OUT->IN

 

 

ip access-list extended RACL->OUT

  permit tcp any any reflect RACL_T

  permit udp any any reflect RACL_T

  permit icmp any any reflect RACL_T

  permit ip any any

 

ip access-list extended RACL->IN

  permit ospf host 1.1.100.6 any

  permit udp any host 100.1.1.250 eq 53

  permit tcp any host 100.1.1.251 eq 80

  evaluate RACL_T 

 

int f0/1

  ip access-group RACL->OUT out

  ip access-group RACL->IN in

무수한 임시의 ACL 들이 자기 스스로 생성된다. 세션이 끝나면 자동으로 삭제 된다.


Win701]

## 인터넷 되는지 시험!! 잘 된다!!


## 정리!! ##

* 1세대(SPI) 방화벽은 동적포트(ex. FTP)일 경우 통신이 불가하다.

  3세대 방화벽은 FTP의 경우 Passive 모드를 사용하여 동적포트로 연결이 가능하다. 알FTP(알드라이브 같은것)에서

  Passive 모드 체크 후 연결.

 

* RACL의 경우 1세대 방화벽 기술이기 때문에 Session을 인지하는 것이 아니라, 단순히 출발지와 목적지 정보를

  반대로 설정하여 응답 트래픽을 허용하는 것이다. 때문에, FTP와 같은 2개 이상의 포트를 사용하는 서비스의 경우

  정상적으로 처리가 되지 않는다. 이러한 동적 포트 서비스를 지원하기 위해서는 3세대 기술인 SPI(Stateful Packet

  Inspection)가 필요하다.

 

* FTP는 'Passive mode'를 사용할 경우, 1세대 방화벽에서도 사용이 가능하다.

 

## 지금까지는 RACL이 만능같지만 나가는 것에 대해서만이지, 세션 전체를 인지하지 않음. 그래서 한계점이 있다! 


## 3. DACL(Dynamic ACL) ##

* 출장 혹은 재택 근무중인 직원이 회사 내부망에 접근을 하려는 경우, 오늘날엔 Remote Access VPN을 주로 사용한다.

  만약 VPN을 구성할 수 없는 경우 방화벽에서 인증을 통해 특정 사용자가 내부망에 접근할 수 있는 임시 ACL이 생성이

  가능하다.

  ==> 이를 DACL(Lock & Key)이라고 한다.

  ## 내부가 사설망(학원으로 따지면 10 네트워크!)이다. 원칙적으로는 외부에서 사설망으로 들어올 수 없다.

      방화벽에서 VPN 인증을 하고 들어와야함. 하지만 만약에 VPN을 통해 인증을 할 수 없는 경우에 방화벽에서 인증을

      통해 ACL을 만드는 것을 DACL이라고 한다. 

 

 

* DACL의 동작 과정은 다음과 같다.

  1) 외부 사용자가 DACL이 설정된 Router로 telnet 접근을 한다.

  2) 정상적으로 Telnet을 통해 사용자 계정이 인증된 경우 접근을 허용하는 임시 ACL이 활성화된다.

  3) 그 후 인증에 통과된 외부 사용자는 임시 ACL에 정의된 서비스에 대해서는 접근이 가능해진다.

  


HQ]

conf t

username admin password cisco123

 

line vty 0 4

  login local

 

 

IOS_FW]

show ip access-list                

## 여기서 몇번까지 있는지 확인..! 40번까지 있다. 그래서 아래에 41,42번부터 적용시킬 것임!

 

conf t

username reuser password cisco123

 

ip access-list extended RACL->IN

  41 permit tcp any host 1.1.100.5 eq 23

  42 dynamic applythis permit tcp any host 1.1.100.1 eq 23

 

line vty 0 4

  login local

  autocommand access-enable host timeout 10

 

 

* [41 permit tcp any host 1.1.100.5 eq 23]

        : 외부로 나간 직원의 출발지 IP를 모르기 때문에 'Any' 명령어를 주고,

          목적지 IP는 자신의 IOS_FW 라우터의 IP를 준다.

 

* [42 dynamic applythis permit tcp any host 1.1.100.1 eq 23]

        : 외부로 나간 직원이 접근을 시도할 때 이 명령어가 등장한다. 이 때 평상시에는 활성화가 안 되어 있기 때문에

          line vty 0 4 -> 안에 login local을 준 후 [autocommand access-enable host timeout 10]을 입력해 준다.

          이 의미는 위 명령어인 dynamic applythis를 인증 시도할 때, 자동으로 활성화 한다는 의미이고, 

          autocommand의 host의 의미는 처음 들어온 외부직원의 IP로 바꾸라는 의미이다. 즉, 초기에는 Any 였지만,

          처음 인증을 성공한 외부직원의 IP로 바꾸라는 의미이다.

 

 

show ip access-list

## 아직 인증 전이기 때문에 42의 any가 그대로 있다.


## Win702에서 

Win702]

telnet 1.1.100.5

 

## 그리고 IOS_FW에서 설정한 user name을 적어준다.

ID : reuser

PW : cisco123

## ID와 비밀번호를 입력하면, HOST와의 연결을 끊었음. 이러면 연결을 잃으면서 42번줄에 Any 자리에 Win702의

    IP가 저장되고 입장이 허용되는 것이다!! 방화벽을 통과해서 안으로 들어가지는 것임!!

 

그리고 나서 show ip access-list를 다시 쳐보면, 자동으로 ACL이 만들어진다.

200.1.1.1 이라는 Host가 새로 생겼다.

 

Telnet으로 해서 Password가 맞으면 그 아래꺼는 전부 다 허용이 된다!! ==> Rock & Key


## 4. CBAC(Context-Based ACL) ##

* CBAC부터 3세대 방화벽 기술인 'SPI(Stateful Packet Inspection)'을 지원한다. 

  기존 1세대 방화벽이 다순히 L3/L4 헤더의 정보를 기반으로 Packet 수신 여부를 결정하였기 때문에 동적 포트

  서비스는 처리가 불가능했다. (ex. FTP..)

  ==> 세션을 인지하지 못하고, L3/L4 정보만 보고 판단하였음.

 

* 3세대 방화벽 기술인 SPI는 Session을 인지하고 처리하기 때문에, 다수의 포트를 사용하는 포트 서비스 트래픽도

  처리가 가능하고, Application 계층 정보도 어느 정도 제어가 가능하다.

  ==> 같은 세션에 속해있는가? 속해있다면 허가해줌.

 

 

IOS_FW]

conf t

int f0/1

  no ip access-group RACL->IN in

  no ip access-group RACL->OUT out

  exit

 

no ip access-list extended RACL->IN

no ip access-list extended RACL->OUT

 

ip inspect name CBAC_T tcp

ip inspect name CBAC_T udp

ip inspect name CBAC_T icmp

## CABC 이름을 정의하고, SPI를 수행할 프로토콜을 지정. 해당 프로토콜의 트래픽에 대해서는 응답을 수신하기 위한

    임시 ACL이 생성된다.

 

 

 

## 이제 Access-list를 만들자.

ip access-list extended OUT->IN

  permit ospf host 1.1.100.6 any

  permit udp any host 100.1.1.250 eq 53

  permit tcp any host 100.1.1.251 eq 80

  deny ip any any

 

int f0/1

  ip access-group OUT->IN in

  ip inspect CBAC_T out

 


##Win701, 702에서 kedu.edu 접속되나 확인, www.naver.com도 되나 확인

 Win701]

 [CMD] - ipconfig /flushdns

 

## 인터넷이 안된다~ 다시 확인해보기.

 


## 돈 안들이고 1세대 방화벽을 구축할 때에 제일 좋은건 위의 'CBAC' 방식이다. 하지만 단점도 존재함.

    - TCP/UDP/ICMP 요청에 대한 응답 트래픽은 수신이 가능하다(정적포트 서비스). 

      그러나, FTP 서비스는 RACL과 동일하게 Data Connection이 정상적으로 연결되지 않는다. 이유는

      CBAC의 경우 특정 Protocol의 특성을 이해하기 위해서 해당 'Application Protocol'을 Inspect로

      지정해야 하기 때문이다.

 

IOS_FW]

conf t

ip inspect name CBAC_T ftp audit-trail

  ## [audit-trail]은 해당 Protocol에 대한 log를 발생시키는 옵션 명령이다.

 

* URL Filter

  - CBAC의 경우 단순히 L3/L4 정보만 제어하는 것이 아니라, Application 계층도 어느정도 제거가 가능하다.


## 네이버를 막아보자 ##

 

IOS_FW]

conf t

ip urlfilter exclusive-domain deny .naver.com

ip urlfilter allow-mode on

ip urlfilter audit-trail

ip urlfilter name CBAC_T http urlfilter


Win701]

www.naver.com

캐시 지우고, 접속해보기.

http://www.naver.com 는 안들어가진다!! 하지만 https://www.naver.com 로는 들어가진다!!