Today Keys : firewall, network, vpc, aws, 방화벽, managed, endpoint, 관리형, proxy, 네트워크, policy, rule, group
이번 포스팅은 AWS Network Firewall 입니다. Managed 서비스로 이제 방화벽이 제공되고, 다양한 기능도 있어서 사용자 요건에 따라서 좀 더 좋은 아키텍처를 만들 수 있을 것 같습니다. 개인적으로는 방화벽 처리를 하여도 Proxy되지 않아서 출발지 IP를 확인할 수 있다는 점은 매우 매력적인 것 같습니다.
전체적인 내용 정리를 다루기는 어려울 것 같고, 그런한 정리도 몇 번에 걸쳐서 될 것 같습니다. 오늘 포스팅에서는 AWS Network Firewall을 다양한 메뉴를 보고, 간단한 테스트 예제를 다룹니다.
본 포스팅에서 테스트하는 최종 AWS 구성입니다.
AWS Network Firewall을 만들어봅니다.
가볍게 Create firewall을 선택합니다.
생성 화면 상단에는 방화벽을 구성하는 방법에 대해서 간단히 overview로 설명되어 있습니다.
Azure Network Firewall에 대한 내용은 추후에 별도 포스팅으로 다뤄보려고 합니다.
방화벽 생성관련 개요는 한글로 한 번 다시 살펴보세요!
이제 본격적으로 방화벽을 만듭니다.
방화벽 이름을 쓰고, 방화벽이 사용된 VPC를 선택합니다.
방화벽을 배포하면, VPC 내에는 Endpoint가 생성이 됩니다.
Endpoint가 생성될 방화벽 서브넷을 AZ 별로 지정합니다.
방화벽에 적용할 Policy를 선택합니다.
새로 만들어도 되고, 기존에 있는 Policy를 적용해도 됩니다.
하나의 Policy를 여러 방화벽에서 적용도 가능합니다.
방화벽 관련 tags를 지정합니다. 여기에서는 추가로 입력하지는 않았습니다.
Create firewall을 클릭해서, 방화벽을 생성하면 5~10분정도 동안 방화벽이 Provisioning 됩니다.
생성이 되고 나면, Firewall status가 Ready 상태로 변경됩니다.
방화벽이 생성되고 나면, 이렇게 endpoint가 생성됩니다.
endpoint는 Firewall details 탭에서도 확인이 가능합니다.
실제 방화벽에서 처리한 패킷과 pass/drop한 count도 모니터링이 가능합니다.
물론 여기서 보이는 건, 수량이고 세부적인 건 로그를 남겨야 합니다.
이제 방화벽 생성 시에 만든 policy에 정책을 적용해보겠습니다.
방화벽 정책은 stateless rule group과 stateless한 패킷에 대한 default action 정의와 함께
주로 사용하게 될 stateful rule group을 설정할 수 있습니다.
rule group은 Network Firewall rule groups 메뉴에서도 생성하고 수정할 수 있습니다.
이제 새로운 rule group을 만들겠습니다.
Network Firewall rule groups 메뉴에서 새로운 rule gorup을 생성하려고 보면,
상단에 State fule group과 Stateless rule group을 선택할 수 있는 것을 볼 수 있습니다.
Statelful의 경우에는 3가지 방식으로 group을 생성할 수 있습니다.
5 Tuple을 이용한 설정
Domain List를 이용한 설정
Suricata 호환 IPS Rules
Stateless rule로 만들 경우에는 다음과 같이 좀 더 다양한 옵션 값 선택을 해야 합니다.
여기에서는 5-Tuple을 이용한 정책을 설정합니다.
rule-group 설정 시 Capacity(용량)이 있는 데,
정책에 대한 용량입니다. 이 용량은 제한적이기 때문에 rule을 만들 때 최적화해서 만들지 않으면
나중에 Capacity로 인해서 정책 추가가 불가 할 수도 있습니다.
참고로 초기 설정한 Capacity는 중간에 확장이 불가하며, 전체 Capacity는 한정되어 있습니다.
HTTP 프로토콜, Source IP/Port Any
Destination을 VPC 내의 특정 서버(10.0.0.212)로 하고 서비스 포트를 80으로 하였습니다.
Traffic direction과 Action은 각각 forward로 방식과 허용(pass) 설정을 했습니다.
새롭게 룰을 생성하면 다음과 같이 rule이 추가된 되었다고 표시됩니다.
실제 Rule이 추가된 것을 볼 수 있습니다.
이제 생성한 Rule-Group을 Policy에 적용합니다.
Policy에서 방금 생성한 Rule-Group을 추가합니다.
Add rule groups를 선택하면 다음과 같이 방금 전에 만든 Rule-group을 확인할 수 있습니다.
Add stateful rule gorup을 클릭해서 적용합니다.
자 이제 policy에 rule-group이 적용된 것을 확인할 수 있습니다.
Firewaa에서 보면, 앞에서 얘기한 Capacity 용량이 표기되고,
아래에 최대 용량 중에 현재 차지한 용량을 확인할 수 있습니다.
방화벽 설정까지는 이제 모두 완료되었고,
방화벽 Endpoint를 이용해서 라우팅 설정을 추가로 진행합니다.
라우팅 추가 관련 내용은 본 포스팅에서는 다루지 않았습니다.
이제 실제 테스트입니다.
서비스 서브넷에 2대의 Web서버를 띄웠습니다.
Rule group 에는 SVR1에 대한 허용정책만 적용했으나,
서버 1/2가 모두 정상적으로 열리는 것을 확인 할 수 있습니다.
(묵시적 Deny가 적용되지는 않는 것으로 예상됩니다.)
이제 테스트를 위해서 SVR1를 비허용(Drop) 정책으로 변경합니다.
이제 명시적으로 Drop한 SVR1은 차단이 된 것을 볼 수 있고,
SVR2은 정상적으로 웹페이지가 열리는 것을 볼 수 있습니다.
모니터링 탭에서는 이러한 처리 패킷, 허용 패킷, 차단 패킷의 count 추이를 확인할 수 있습니다.