我正在检查在 LAMP 上运行公共网站的 EC2 Ubuntu 实例上的安全组。目前我的端口如下:
22 (SSH) 0.0.0.0/0
80 (HTTP) 0.0.0.0/0
443 (HTTPS) 0.0.0.0/0
3306 (MYSQL) 0.0.0.0/0
我认为应该可以稍微收紧 mysql 端口,因为连接仅在本地进行。欢迎任何见解。
答案1
如果你的 MySQL 实例在同一个实例上运行,并且仅有的应答本地连接,那么您根本不需要安全组配置中端口 3306 的任何条目。
此外,为了纵深防御,您应该将bind-address
MySQL 配置指令设置为127.0.0.1
(可能是默认值,但值得检查)。
编辑
您可以通过两种途径从外部开放访问:
- 设置
bind-address
回0.0.0.0
,并添加a.b.c.d/32
到您的安全组(无论该 IP 是什么)以允许访问端口 3306。但是,这是一种以纯文本传输的基本方法。 - 使用 SSH 端口转发。使用 登录到 shell 后,
ssh -L33306:127.0.0.1:3306 user@host
您就可以mysql -h localhost -P 33306
在本地计算机上启动以通过隧道进行连接。-bind-address
在这种情况下不需要打开,因为 mysql 连接仍然是本地的(只要和-L
参数-P
匹配,本地端口可以是任何你喜欢的端口)。这将为您提供更安全的路由,并且您可以配置 SSH 以使用私钥,以增加保护。
答案2
强化非常重要。
- 对于 MySQL,设置来源,与安全组相同。(例如:如果安全组“default”的 ID 为“sg-1234s3gd”,则指定 sg-1234s3gd 作为端口范围 3306 的源)。
- 安装mod_security对于 Apache 并订阅 CoreRulesSet。如果可能的话,限制每个 IP 的请求速率。
- 在 SSH 中禁用 RootLogin。仅允许基于密钥的身份验证,如果可能,更改 SSH 监听端口。
- 使用以下方式运行安全评估巴士底狱。