내용으로 건너뛰기

특정 도메인을 차단하거나 허용하도록 Network Firewall 규칙을 구성하려면 어떻게 해야 합니까?

7분 분량
0

AWS Network Firewall을 사용하여 Amazon Virtual Private Cloud(Amazon VPC)의 리소스에서 발생하는 아웃바운드 웹 트래픽을 필터링하려고 합니다.

간략한 설명

AWS Network Firewall은 작업 순서 또는 엄격한 평가 순서를 사용하여 아웃바운드 웹 트래픽에 대한 도메인 기반 필터링을 지원합니다. 규칙을 구성하려면 상태 저장 도메인 목록 규칙 그룹 또는 Suricata 호환 문자열을 사용하십시오. 도메인 검사는 HTTP 및 HTTPS 프로토콜에 사용할 수 있습니다.

HTTP의 경우 방화벽은 호스트 헤더를 검사합니다. HTTPS의 경우 방화벽은 TLS 핸드셰이크의 서버 이름 표시(SNI)를 사용합니다. 도메인 허용 목록을 사용하는 경우 Network Firewall은 지정된 도메인에만 트래픽을 전송하고 다른 모든 요청을 삭제합니다.

자세한 내용은 AWS Network Firewall의 Suricata 호환 규칙 문자열AWS Network Firewall의 상태 저장 도메인 목록 규칙 그룹을 참조하십시오.

해결 방법

기본 작업 순서를 사용하여 정책의 도메인 목록 그룹 구성

다음 단계를 완료하십시오.

  1. 방화벽을 생성합니다.
  2. Amazon VPC 콘솔 탐색 창Network Firewall에서 방화벽 정책을 선택합니다.
  3. 편집하려는 기본 작업 순서 방화벽 정책을 선택합니다.
  4. 상태 저장 규칙 그룹에서 작업을 선택한 다음, 상태 저장 규칙 그룹 생성을 선택합니다.
  5. Stateful rule group format(상태 저장 규칙 그룹 형식)에서 도메인 목록을 선택합니다.
    참고: 상태 저장 규칙 순서는 정책에서 상속되므로 변경할 수 없습니다. 규칙 순서작업 순서로 표시됩니다.
  6. 고유한 규칙 그룹 이름을 입력합니다.
  7. 용량 예약의 경우 목록에 포함할 예상 도메인 수를 입력합니다.
    참고: 규칙 그룹을 만든 후에는 값을 변경할 수 없습니다.
  8. 도메인 목록에서 도메인 이름 소스에 일치시키려는 도메인 이름을 입력합니다. 도메인을 정확히 일치하도록 정의할 수 있습니다(예: abc.example.com). .example.com과 같이 와일드카드로 정의할 수도 있습니다.
  9. CIDR 범위에서 다음 옵션 중 하나를 선택합니다.
    방화벽과 동일한 VPC에 있는 소스 IP 주소의 기본값.
    원격 VPC에 있는 소스 IP 주소에 대한 사용자 지정. 소스 IP CIDR 범위에 방화벽이 검사할 소스 서브넷을 입력합니다.
  10. 프로토콜에서 HTTP 및 HTTPS를 선택합니다.
  11. 작업에서 허용을 선택합니다.
  12. 규칙 그룹 생성을 선택합니다.

작업 순서 평가를 사용하여 정책의 Suricata 호환 IPS 규칙 정의

다음 단계를 완료하십시오.

  1. 방화벽을 생성합니다.
  2. Amazon VPC 콘솔 탐색 창Network Firewall에서 방화벽 정책을 선택합니다.
  3. 편집하려는 기본 작업 순서 방화벽 정책을 선택합니다.
  4. 상태 저장 규칙 그룹에서 작업을 선택한 다음, 상태 저장 규칙 그룹 생성을 선택합니다.
  5. Stateful rule group format(상태 저장 규칙 그룹 형식)에서 Suricata 호환 규칙 문자열을 선택합니다.
    참고: 상태 저장 규칙 순서는 정책에서 상속되므로 변경할 수 없습니다. 규칙 순서작업 순서로 표시됩니다.
  6. 고유한 규칙 그룹 이름을 입력합니다.
  7. 용량 예약의 경우 목록에 포함할 예상 도메인 수를 입력합니다.
    참고: 규칙 그룹을 만든 후에는 값을 변경할 수 없습니다.
  8. (선택 사항) Suricata 서명에 사용할 사용자 지정 규칙 변수를 정의합니다.
  9. (선택 사항) Suricata 서명에 사용할 IP 세트 참조를 정의합니다.
  10. Suricata 호환 규칙 문자열에 다음 규칙을 입력합니다.
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;)
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;)
drop http $HOME_NET any -> $EXTERNAL_NET any (http.header_names; content:"|0d 0a|"; startswith; msg:"not matching any HTTP allowlisted FQDNs"; flow:to_server, established; sid:5; rev:1;)
drop tls $HOME_NET any -> $EXTERNAL_NET any (msg:"not matching any TLS allowlisted FQDNs"; flow:to_server, established; sid:6; rev:1;)

참고: 위 규칙에서 도메인을 포함하려는 도메인으로 바꾸십시오. 규칙 그룹 생성을 선택합니다.

참고: 도메인 규칙에는 일반적으로 설정된 흐름 키워드가 포함되지만 흐름 외 패킷 교환 예외 사례를 모두 설명하지 못할 수 있습니다. 예제 규칙 목록을 사용하기 전에 규칙을 테스트하여 예상대로 작동하는지 확인하십시오.

엄격한 평가 순서를 사용하여 정책의 도메인 목록 규칙 그룹 구성

다음 단계를 완료하십시오.

  1. 방화벽을 생성합니다.
  2. Amazon VPC 콘솔 탐색 창Network Firewall에서 방화벽 정책을 선택합니다.
  3. 편집하려는 엄격한 평가 순서 방화벽 정책을 선택합니다.
  4. 상태 저장 규칙 그룹에서 작업을 선택한 다음, 상태 저장 규칙 그룹 생성을 선택합니다.
  5. Stateful rule group format(상태 저장 규칙 그룹 형식)에서 도메인 목록을 선택합니다.
    참고: 상태 저장 규칙 순서는 정책에서 상속되므로 변경할 수 없습니다. 규칙 순서엄격으로 표시됩니다.
  6. 고유한 규칙 그룹 이름을 입력합니다.
  7. 용량 예약의 경우 목록에 포함할 예상 도메인 수를 입력합니다.
    참고: 규칙 그룹을 만든 후에는 값을 변경할 수 없습니다.
  8. 도메인 목록에서 도메인 이름 소스에 일치시키려는 도메인 이름을 입력합니다. 도메인을 정확히 일치하도록 정의할 수 있습니다(예: abc.example.com). .example.com과 같이 와일드카드로 정의할 수도 있습니다.
  9. CIDR 범위에서 다음 옵션 중 하나를 선택합니다.
    방화벽과 동일한 VPC에 있는 소스 IP 주소의 기본값.
    원격 VPC에 있는 소스 IP 주소에 대한 사용자 지정. 소스 IP CIDR 범위에 방화벽이 검사할 소스 서브넷을 입력합니다.
  10. 프로토콜에서 HTTP 및 HTTPS를 선택합니다.
  11. 작업에서 허용을 선택합니다.
  12. 규칙 그룹 생성을 선택합니다.
  13. 탐색 창의 Network Firewall에서 방화벽 정책을 선택합니다.
  14. 엄격한 순서 정책을 선택합니다.
  15. 상태 저장 규칙 평가 순서 및 기본 작업에서 편집을 선택합니다.
  16. 기본 작업에서 삭제 설정됨을 선택한 다음, 저장을 선택합니다.

엄격한 평가 순서를 사용하여 정책의 Suricata 호환 IPS 규칙 정의

다음 단계를 완료하십시오.

  1. 방화벽을 생성합니다.
  2. Amazon VPC 콘솔 탐색 창Network Firewall에서 방화벽 정책을 선택합니다.
  3. 편집하려는 엄격한 평가 순서 방화벽 정책을 선택합니다.
  4. 상태 저장 규칙 그룹에서 작업을 선택한 다음, 상태 저장 규칙 그룹 생성을 선택합니다.
  5. Stateful rule group format(상태 저장 규칙 그룹 형식)에서 Suricata 호환 규칙 문자열을 선택합니다.
    참고: 상태 저장 규칙 순서는 정책에서 상속되므로 변경할 수 없습니다. 규칙 순서엄격으로 표시됩니다.
  6. 고유한 규칙 그룹 이름을 입력합니다.
  7. 용량 예약의 경우 목록에 포함할 예상 도메인 수를 입력합니다.
    참고: 규칙 그룹을 만든 후에는 값을 변경할 수 없습니다.
  8. (선택 사항) 정의한 Suricata 서명에 사용할 사용자 지정 규칙 변수를 정의합니다.
  9. (선택 사항) 정의한 Suricata 서명에 사용할 IP 세트 참조를 정의합니다.
  10. Suricata 호환 규칙 문자열에 다음 규칙을 입력합니다.
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;)
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;)

참고: 위 규칙에서 도메인을 포함하려는 도메인으로 바꾸십시오. 규칙 그룹 생성을 선택합니다. 탐색 창의 Network Firewall에서 방화벽 정책을 선택합니다. 엄격한 순서 정책을 선택합니다. 상태 저장 규칙 평가 순서 및 기본 작업에서 편집을 선택합니다. 기본 작업에서 삭제 설정됨을 선택한 다음, 저장을 선택합니다.

참고: 도메인 규칙에는 일반적으로 설정된 흐름 키워드가 포함되며, 이 키워드는 정상적인 연결 흐름 외부에서 패킷이 교환되는 일부 예외 사례를 캡처하지 못할 수 있습니다. 예제 규칙 목록을 사용하기 전에 규칙을 테스트하여 예상대로 작동하는지 확인하십시오.

구성 테스트

구성이 제대로 작동하는지 테스트하려면 지정된 도메인에 curl 명령을 실행합니다.

다음 예제 명령은 https://example.com 도메인에 대한 HTTPS 액세스를 테스트합니다.

curl -v --silent https://example.com --stderr - | grep 200

액세스가 허용되면 다음과 같은 출력이 표시됩니다.

< HTTP/2 200

다음 예제 명령은 http://www.google.com에 대한 HTTP 액세스를 테스트합니다.

curl -v http://www.google.com

다음 예제 출력은 GET 요청에서 연결이 중지되어 방화벽 규칙이 HTTP 트래픽을 차단하고 있음을 보여줍니다.

* Trying 172.253.115.99:80...
* Connected to www.google.com (http://www.google.com/) (172.253.115.99) port 80 (#0)
> GET / HTTP/1.1
> Host: www.google.com (http://www.google.com/)
> User-Agent: curl/7.79.1
> Accept: /

다음 예제 명령은 https://www.google.com에 대한 HTTPS 액세스를 테스트합니다.

curl -v https://www.google.com

출력은 TLS 핸드셰이크 중에 연결이 중지되어 HTTPS 트래픽이 차단되었음을 보여줍니다.

* Trying 172.253.115.147:443...
* Connected to www.google.com (https://www.google.com/) (172.253.115.147) port 443 (#0)
* ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1):

관련 정보

Network Firewall의 방화벽 정책

상태 저장 규칙 그룹 생성

Network Firewall의 상태 저장 규칙 예

AWS 공식업데이트됨 8달 전