전송 접근 제어 목록(Transit Access Control List)은 네트워크에서 꼭 필요한 트래픽만 명시적으로 허용하는 방법으로 네트워크 보안성을 향상시키는 기법입니다. 일반적으로 네트워크 유입 지점에 해당하는 엣지 라우터 (Edge Router)에서 접근 제어 목록 (ACL)을 이용하여 구현합니다.
아래는 시스코의 문서를 요약한 것입니다. 전체 내용은 아래 주소를 참조하시기 바랍니다.
http://www.cisco.com/application/pdf/paws/44541/tacl.pdf
전송 접근 제어 목록은 아래와 같이 구성합니다:
* 외부에서 들어올 가능성이 없는 출발지 IP를 거부합니다. 예약된 주소 영역 (RFC 1918), 특별한 목적으로만 사용되는 주소 (RFC 3330), 그리고 안티-스푸핑 가이드라인에 따라 부적절한 IP들을 차단 (deny) 합니다.
* 내부에서 외부로 나간 트래픽의 응답으로 들어오는 트래픽을 명시적으로 허용합니다.
* 내부의 보호되는 주소 영역을 목적지로 하는 외부의 트래픽을 명시적으로 허용합니다.
* 나머지는 명시적으로 차단해줍니다. 물론 모든 ACL이 암시적으로 deny를 지정한 효과가 있기는 하지만, show access-list 명령을 쳤을 때 차단된 패킷 통계를 보여주므로, 명시적으로 지정하는게 좋습니다.
= 전송 접근 제어 목록을 만드는 방법
정상적인 트래픽이 사용하는 프로토콜 정보를 모두 알고 있어야, 정상적인 트래픽을 잘못 차단하는 불상사가 발생하지 않습니다. 이를 위해 먼저 네트워크 현황을 조사할 필요가 있습니다. 가장 흔한 예로 DMZ 세그먼트의 웹 서버를 들 수 있겠습니다. 외부에서 접속할 수 있어야 되니까요. 그리고 ACK 비트가 설정된 채로 돌아오는 TCP 트래픽도 허용해야 합니다.
= 필수 프로토콜의 식별
1. 일단 현재의 로컬 보안 정책 / 서비스 정책을 확인하세요. 허용되거나 거부되는 서비스 기준이 있을 것입니다.
2. 다음엔 방화벽 설정을 확인하세요. 현재 방화벽 설정을 살펴보면 명시적으로 서비스 허용 설정을 해놓았을 것입니다. 이 설정을 ACL 포맷에 맞게 바꾸기만 하면 됩니다. 주의할 것은 상태 유지 방화벽 (Stateful Firewall)의 경우 현재 세션 정보를 모두 추적할 수 있기 때문에, 나갔다가 들어오는 트래픽에 대해 별도의 룰이 없다는 점입니다. 라우터 ACL은 보통 상태 유지 기능이 없으므로 돌아오는 트래픽에 대해 명시적으로 허용해 줄 필요가 있습니다.
3. 현재 사용하고 있는 응용 프로그램들을 확인해보세요. DMZ에서 호스팅하고 있는 프로그램이나 내부에서 사용되는 프로그램들을 조사해봐야만 정확히 어떤 트래픽을 허용할지 결정할 수 있습니다.
4. 분류 ACL을 사용하세요. 내부 네트워크를 목적지로 하는 다양한 프로토콜을 명시적으로 ACL에서 허용해주고, 나중에 show access-list 명령을 쳐서 통계를 보면 어떤 프로토콜이 실제로 사용되고 있는지 확인할 수 있습니다.
5. Netflow 기능을 사용하세요. Netflow를 켜놓으면 show ip cache flow 명령을 쳐서 프로토콜 목록 정보가 로그로 남은 것을 확인할 수 있습니다. Netflow가 모든 프로토콜을 식별할 수 있는 것은 아니므로, 다른 기법과 같이 사용하셔야 합니다.
아래의 트래픽 유형을 고려하시기 바랍니다.
1. 엣지 라우터에서 통신할 때 사용되는 외부의 프로토콜과 IP 주소
- ISP 영역의 IP 주소에서 들어오는 ICMP
- 라우팅 프로토콜 (BGP 등)
- IPSec VPN (엣지 라우터가 종점인 경우)
2. 내부에서 외부로 나갔다가 돌아오는 트래픽
- ICMP
- 외부로 DNS 쿼리하고 난 뒤 돌아오는 응답
- TCP 접속에 대한 응답
- UDP에 대한 응답 트래픽
- FTP 데이터 연결
- TFTP 데이터 연결
- 멀티미디어 연결
3. 외부에서 내부의 보호되는 주소 영역으로 향하는 트래픽
- VPN 트래픽 (ISAKMP, NAT, ESP, AH 등)
- 웹 서버 HTTP 트래픽
- 웹 서버 SSL 트래픽
- FTP 서버 접속
- 내부로 들어오는 FTP 데이터 연결
- 내부로 들어오는 FTP 패시브 데이터 연결
- SMTP
- 내부로 들어오는 DNS 쿼리
- 내부로 들어오는 DNS 영역 전송
= 배포 가이드라인
1. 먼저 분류 ACL을 이용해서 네트워크 프로토콜을 식별합니다.
알려진 프로토콜로 ACL을 만들어서 전부 허용으로 설정해놓습니다. 출발지 IP는 any로 하고 목적지 IP는 내부의 서브넷으로 해야겠지요. ACL 마지막 항목을 ip any any log로 해놓으면 추가로 어떤 프로토콜을 허용해야 될지 알아내는데 도움이 됩니다.
단, 로깅을 수행하는 도중에는 라우터에서 CPU 사용량이 급등하므로 아주 짧게 짧게 사용하시기 바랍니다.
2. 식별된 패킷을 확인해보고 내부 네트워크에 대한 접근을 필터링하기 시작합니다.
예약된 주소 영역이나 특별한 목적의 주소 영역, 스푸핑 거부 항목들을 ACL에 추가합니다. 기존에 허용으로 되어있던 ACL 항목들을 하나씩 거부로 바꿉니다. 중간 중간 show access-list 를 치면서 특정 접근 차단 룰에 대해 얼마나 많은 패킷이 걸렸는지 확인합니다. 이렇게 하면 굳이 로깅을 켜지 않더라도 네트워크 접근 시도가 얼마나 있었는지 알아낼 수 있습니다. ACL 마지막 줄은 deny ip any any로 되어야 할 것입니다. 마지막 항목도 통계를 살펴보면서 접근 시도가 얼마나 있었는지 확인할 수 있습니다.
3. 모니터링하면서 ACL을 갱신합니다.
모니터링하면서 어떤 공격이 있었는지 확인하고, 시간이 지나면서 허용할 프로토콜이 새로 생기는 경우에는 ACL을 변경합니다.




