이번 게시글은 Reflexive ACL과 CBAC에 대해 알아보도록 한다.
┌─ 트래픽 필터링
├─ Established 필터링
├─ Dynamic ACL
├─ Reflexive ACL
├─ CBAC
├─ IP Fragments 공격 방지
└─ ICMP Flooding 공격 방지
[Reflexive ACL]
내부에서 외부로 패킷을 전송하면, 외부에서 내부로 응답 패킷을 허용하는 ACL항목이 임시로 자동 생성된다. 외부에서 먼저 요청하는 패킷은 접근 거부된다.
‘established’ 필터링과 달리 모든 패킷에 적용할 수 있다.
- 특징
1. 임시 항목은 무조건 permit으로 생성된다.
2. source는 외부, destination은 내부
3. TCP/UDP 패킷인 경우, 출발지 포트는 외부시스템, 목적지 포트는 내부 시스템으로 생성된다.
4. ICMP 패킷인 경우, 포트번호가 없으므로 ICMP 메세지 타입으로 생성된다.
5. 생성된 임시 항목은 마지막 응답 패킷이 처리되면 제거된다. 예를 들어, TCP ‘FIN’ 패킷이면 5초후 항목 제거, ‘RST’ 패킷이면 즉시 제거, 또는 특정시간 동안 임시항목으로 처리된 패킷이 없으면 제거할 수 있다.
5. UDP는 비연결 프로토콜이므로 특정시간을 기준으로 임시 항목을 제거한다.
6. Named Extended ACL에서만 설정할 수 있다.

R2기준으로 Reflexive ACL 설정.
[설정]
R2(confg)# ip access-list extended RACL_OUT R2(config-ext-nacl)# permit tcp 6.6.6.0 0.0.0.3 192.168.0.0 0.0.0.255 reflect TEST R2(config-ext-nacl)# permit udp 6.6.6.0 0.0.0.3 192.168.0.0 0.0.0.255 reflect TEST R2(config-ext-nacl)# permit icmp 6.6.6.0 0.0.0.3 192.168.0.0 0.0.0.255 reflect TEST R2(config-ext-nacl)# exit R2(confg)# R2(confg)# ip access-list extended RACL_IN R2(config-ext-nacl)# permit ospf any any R2(config-ext-nacl)# evaluate TEST R2(config-ext-nacl)# exit R2(confg)# R2(confg)# int fa0/0 R2(confg)# ip access-group RACL_OUT outR2 R2(confg)# ip access-group RACL_IN in
2: ‘reflect TEST’라는 값을 통해 Reflexivce ACL이라고 명시한다. TEST 대신 다른 이름을 사용해도 무방하다.
9: ‘evaluate’ 명령을 통해 외부에서 내부로 돌아오는 패킷을 허용하는 Reflexive ACL 임시 항목이 생성되도록 한다.
[확인]
– Ping 및 TELNET 테스트 (R1→R3)
외부에서 내부로 접속이 실패한다.

– Ping 및 TELNET 테스트 (R3→R1) 후 R2 ACL 정보 확인.
내부에서 외부로 접속이 성공한다.


[CBAC]
Context-Based Access Control
Reflexive ACL과 같이 내부에서 외부로 나가는 세션을 검사하여, 해당 세션에 대한 응답 패킷을 수신할 수 있도록 임시 ACL 항목을 생성한다.
하지만 몇 가지 차이점이 존재한다.
- FTP와 같이 여러 포트를 사용하는 애플리케이션에 대해 방화벽 기능을 수행한다.
- Layer 3,4는 물론 Layer 7 애플리케이션 프로토콜까지 검사한다.
- 각 연결 상태를 지속적으로 감시해야하기 때문에 ‘상태 감시 검사 방법’을 사용한다.
- 패킷이 인터페이스에 들어갈 때나 나올 때 검사되고, 세션 정보를 상태 정보 테이블에 등록하게 된다. 더불어, 이 상태 테이블이 존재하므로 되돌아오는 응답 패킷을 허용하기 위해 ACL 항목을 추가 설정할 필요가 없다. 상태 테이블을 보고 자동으로 추가하기 때문이다.
- TCP SYN 패킷을 검사하여 TCP SYN 플러디 공격을 차단할 수 있다.
- CBAC 처리과정

** 주의사항
1. CBAC만 단독으로 사용하면 모든 트래픽이 허용되므로
CBAC에 해당되는 프로토콜은 CBAC, 나머지 일반 트래픽은 ACL로 관리하자.
2. IPSec으로 암호화된 패킷은 검사되지 않는다.
3. FTP의 경우 패시브 모드 / 2-way 전송모드만 지원한다.(3-way 모드 지원안함)
4. 모든 애플리케이션에서 지원되는 것이 아니기 때문에 일부 애플리케이션은 CBAC을 사용할 수 없다.
[설정]
R2(config)#ip inspect audit-trail R2(config)#ip inspect name TEST tcp R2(config)#ip inspect name TEST udp R2(config)#ip inspect name TEST icmp R2(config)#ip inspect name TEST http java R2(config)#ip inspect name TEST http java-list 10 timeout 300 R2(config)#access 10 permit host 192.168.0.10 R2(config)# R2(config)# R2(config)#ip access ex Traffic_IN R2(config-ext-nacl)#permit ospf any any R2(config-ext-nacl)#exit R2(config)#int fa0/0 R2(config-if)# R2(config-if)#ip inspect TEST out R2(config-if)#ip access R2(config-if)#ip access-group Traffic_IN in
[확인]
– R1에서 R3로 Ping 및 TELNET 테스트
외부에서 내부로 접속이 실패한다.

– R3에서 R1으로 Ping 및 TELNET 테스트
내부에서 외부로 접속이 성공한다.

이 때, R2를 확인해보면 아래와 같이 로그가 발생되고, CBAC 정보도 확인할 수 있다.
