# 端口管控

首先要做的就是端口管控，即在防火墙上严格限制对外开放的端口。

* 原则上**DMZ服务器（部署了安全产品的服务器）**&#x53EA;允许对外开放80、443端口，而且DMZ服务器不允许主动访问外部，访问外部的业务需要一对一开通访问。
* **不要**为了方便维护，在**DMZ服务器（比如**防火墙）上直接**对外开放Telnet、SSH、RDP的端口**。因为只要知道密码，黑客就可以通过这些端口获得DMZ服务器的权限，即使不知道密码，也可以通过暴力猜解密码获得登录凭证。
* **FTP、MSSQL、MySQL、Redis、Rynsc、memcached、Elasticsearch、Mongodb等**相关应用的端口，也**不应该对互联网开放**，否则各种自动化的攻击工具或蠕虫也会很快通过这些端口得到相应的权限，甚至直接加密你的数据进行勒索。

配置Security Group、NACL、Route Table进行网络隔离，并注意以下安全配置：

1. 不使用默认安全组
   1. 创建新的安全组，并将新创建的这个安全组分配给你的资源；
   2. 避免使用默认安全组;
   3. 可以通过config监控是否使用了默认安全组，**AWS Config rule:** `[`[`vpc-default-security-group-closed`](https://docs.aws.amazon.com/config/latest/developerguide/vpc-default-security-group-closed.html)`]`
2. 不使用默认VPC
   1. 创建新的VPC
   2. 删除默认VPC：<https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/default-vpc.html#deleting-default-vpc>
3. 安全组禁止默认高危端口不限制来源访问 Ensure no security groups allow ingress from 0.0.0.0/0 or ::/0 to ports
   1. 常见高危端口包括：20, 21 (FTP)22 (SSH)23 (Telnet)25 (SMTP)110 (POP3)135 (RPC)143 (IMAP)445 (CIFS)1433, 1434 (MSSQL)3000 (Go, Node.js, and Ruby web development frameworks)3306 (mySQL)3389 (RDP)4333 (ahsp)5000 (Python web development frameworks)5432 (postgresql)5500 (fcp-addr-srvr1)5601 (OpenSearch Dashboards)8080 (proxy)8088 (legacy HTTP port)8888 (alternative HTTP port)9200 or 9300 (OpenSearch)
   2. 可以通过config监控是否高危端口没有做任何访问限制，**AWS Config rule:** [restricted-common-ports](https://docs.amazonaws.cn/en_us/config/latest/developerguide/restricted-common-ports.html)
4. NACL不应该允许任意IP地址通过22或者3389端口访问
   1. 应该写明允许从哪个IP段或者IP地址通过22或3389端口访问，而不是任意IP都可以访问。详细可查看[Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)操作指引。
   2. 可以通过config监控是否存在这个情况，**AWS Config rule:** [nacl-no-unrestricted-ssh-rdp](https://docs.aws.amazon.com/config/latest/developerguide/nacl-no-unrestricted-ssh-rdp.html)
5. 安全组设置默认授权端口号，比如80和443
   1. 配置安全组的放行端口号，[查看此处操作指引](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html)
   2. 可以通过config监控是否存在任何inbound 0.0.0.0/0 的安全组都设置了可访问的 TCP 或 UDP 端口。**AWS Config rule:** [`vpc-sg-open-only-to-authorized-ports`](https://docs.aws.amazon.com/config/latest/developerguide/vpc-sg-open-only-to-authorized-ports.html)
6. 删除未使用的NACL
   1. 如果NACL没有跟任何子网绑定，则应该删除。如何删除[参见此处](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-network-acls.html#Rules)。
   2. 可以通过config监控是否存在没跟任何子网绑定的NACL。**AWS Config rule:** [vpc-network-acl-unused-check](https://docs.aws.amazon.com/config/latest/developerguide/vpc-network-acl-unused-check.html)
