防火墙属性

IMPORTANT
仅入门项目

对于入门项目,firewall属性向应用程序添加​ 出站 ​防火墙。 此防火墙对传入请求没有影响。 它定义哪些tcp出站请求可以​ 保留 Adobe Commerce站点。 这称为出口过滤。 出站防火墙会筛选出可以导出的内容 — 退出或转义您的网站。 限制可以转义的内容会向服务器添加强大的安全工具。

默认限制策略

防火墙提供两种默认策略来控制出站流量: allowdeny。 默认情况下,allow策略​ 允许 ​所有出站流量。 默认情况下,deny策略​ 拒绝 ​所有出站流量。 但添加规则时,默认策略将被覆盖,并且防火墙会阻止规则不允许的​ 所有 ​出站流量。

对于入门计划,默认策略设置为allow。 该设置确保在添加出口过滤规则之前,所有当前出站流量保持未阻塞状态。 可根据请求将默认策略设置为deny

检查您的默认策略

magento-cloud p:curl --project PROJECT_ID /settings | grep -i outbound

除非您为策略请求deny,否则命令应显示您的策略设置为allow

"outbound_restrictions_default_policy": "allow"
NOTE
密钥外带:添加出站规则时,将阻止所有出站流量,但添加到规则的域、IP地址或端口除外。 因此,在将其添加到生产站点之前,请务必定义和测试完整的出站列表。

防火墙选项

.magento.app.yaml文件中的以下示例配置显示了可用于添加出口筛选规则的所有firewall选项。

firewall:
    outbound:
        - # Common accessed domains
            domains:
                - newrelic.com
                - fastly.com
                - magento.com
                - magentocommerce.com
                - google.com
            ports:
                - 80
                - 443
            protocol: tcp # Can be omitted from rules.

        - # Adobe Stock integration
            domains:
                - account.adobe.com
                - stock.adobe.com
                - console.adobe.io
            ports:
                - 80
                - 443

        - # Payment services
            domains:
                - braintreepayments.com
                - paypal.com
            ports:
                - 80
                - 443

        - # Shipping services
            domains:
                - ups.com
                - usps.com
                - fedex.com
                - dhl.com
            ports:
                - 80
                - 443

        - # Vertex Integrated Address Cleansing
            domains:
                - mgcsconnect.vertexsmb.com
            ports:
                - 80
                - 443

        - # New Relic networks
            ips:
                - 162.247.240.0/22 # US region accounts
                - 185.221.84.0/22 # EU region accounts
            ports:
                - 443

        - # New Relic endpoints
            domains:
                - collector.newrelic.com, # US region accounts
                - collector.eu01.nr-data.net # EU region accounts
            ports:
                - 443

        - # Fastly IP ranges
            ips:
                - 23.235.32.0/20
                - 43.249.72.0/22
                - 103.244.50.0/24
                - 103.245.222.0/23
                - 103.245.224.0/24
                - 104.156.80.0/20
                - 146.75.0.0/16
                - 151.101.0.0/16
                - 157.52.64.0/18
                - 167.82.0.0/17
                - 167.82.128.0/20
                - 167.82.160.0/20
                - 167.82.224.0/20
                - 172.111.64.0/18
                - 185.31.16.0/22
                - 199.27.72.0/21
                - 199.232.0.0/16
            ports:
                - 80
                - 443

出口筛选规则

出站防火墙配置由规则组成。 您可以根据需要定义任意数量的规则。 对规则的要求如下。

每个规则:

  • 必须以连字符(-)开头。 在同一行上添加注释有助于文档并以可视方式将一个规则与下一个规则分开。
  • 必须至少定义以下选项之一: domainsipsports
  • 必须使用tcp协议。 由于这是所有规则的默认协议,因此您可以从规则中忽略它。
  • 可以在同一规则中定义domainsips,但不能同时定义两者。
  • 可以包含yaml注释(#)和换行符以组织允许的域、IP地址和端口。

每个规则都使用以下属性:

domains

domains选项允许列出完全限定的域名(FQDN)。

如果规则定义domains而非ports,则防火墙允许在任何端口上发送域请求。

ips

ips选项允许以CIDR表示法列出IP地址。 您可以指定单个IP地址或IP地址范围。

要指定单个IP地址,请将/32 CIDR前缀添加到IP地址的末尾:

172.217.11.174/32  # google.com

要指定IP地址范围,请使用到CIDR的IP范围计算器。

如果规则定义ips而非ports,则防火墙允许任何端口上的IP请求。

ports

ports选项允许从1到65535的端口列表。 对于示例中的大多数规则,端口80443都允许HTTP和HTTPS请求。 但对于New Relic,规则仅允许访问端口443上的域和IP地址,如New Relic有关网络流量的文档中所建议。

如果规则仅定义ports,则防火墙允许访问定义端口的所有域和IP地址。

NOTE
端口25(发送电子邮件的SMTP端口)始终被阻止,无例外。

protocol

如前所述,TCP是默认协议,并且只允许用于规则。 不允许使用UDP及其端口。 因此,您可以从所有规则中忽略protocol选项。 如果仍要包含它,则必须将值设置为tcp,如示例的第一个规则所示。

查找要允许的域名

为了帮助您识别要包含在出口过滤规则中的域,请使用以下命令解析服务器的dns.log文件,并显示您的网站已记录的所有DNS请求的列表:

awk '($5 ~/query/)' /var/log/dns.log | awk '{print $6}' | sort | uniq -c | sort -rn

此命令还会显示已发出但被出口筛选规则阻止的DNS请求。 输出不会显示哪些域被阻止,只会显示已发出的请求。 输出不会显示使用IP地址发出的请求。

Example output:

97 magento.com
93 magentocommerce.com
88 google.com
70 metadata.google.internal.0
70 metadata.google.internal
65 newrelic.com
56 fastly.com
17 mcprod-0vunku5xn24ip.ap-4.magentosite.cloud
6 advancedreporting.rjmetrics.com

与IP地址相比,域通常对于出口过滤更具体和安全。 例如,如果您为使用CDN的服务添加一个IP地址,则您将允许该CDN的IP地址,该地址可供成千上万的其他域使用。 使用一个IP地址,您可以允许对数千台其他服务器进行出站访问。

测试出口过滤规则

在收集并配置域和IP地址访问规则后,便可以开始推送和测试。

要测试出口过滤规则,请执行以下操作:

  1. 创建curl命令的Shell脚本以访问规则中的域和IP地址。 包含用于测试应阻止的域和IP地址访问权限的命令。

  2. .magento.app.yaml文件中配置post_deploy挂接以运行脚本。

  3. 将您的firewall配置和测试脚本推送到integration分支。

  4. 检查curl命令中的post_deploy输出。

  5. 优化firewall规则,更新curl脚本,提交、推送和重复。

curl脚本示例

# curl-tests-for-egress-filtering.sh

# Use the -v option to display connection details

# Check domain access
curl -v newrelic.com
curl -v fastly.com
curl -v magento.com
curl -v magentocommerce.com
curl -v google.com
curl -v account.adobe.com
curl -v stock.adobe.com
curl -v console.adobe.io
curl -v braintreepayments.com
curl -v paypal.com
curl -v ups.com
curl -v usps.com
curl -v fedex.com
curl -v dhl.com
curl -v devdocs.magento.com

# Check domain denials
curl -v amazon.com
curl -v facebook.com
curl -v twitter.com

# IP address access
...

# IP address denials
...

post_deploy示例

hooks:
    build: |
        set -e
        php ./vendor/bin/ece-tools run scenario/build/generate.xml
        php ./vendor/bin/ece-tools run scenario/build/transfer.xml
    deploy: "php ./vendor/bin/ece-tools run scenario/deploy.xml\n"
    post_deploy: |
        set -e
        php ./vendor/bin/ece-tools run scenario/post-deploy.xml
        echo "[$(date)] post-deploy hook end"
        ./curl-tests-for-egress-filtering.sh
        echo "[$(date)] curl finished"
recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26