如何规划服务器公网访问限制
通过配置安全组规则并绑定网络acl,可以精确控制服务器的公网访问权限。具体做法是先在云控制台创建安全组,设置入方向(inbound)的tcp/udp端口白名单,仅放行业务所需的特定ip段或端口;同时利用网络acl在子网层面提供第二道防线,拦截异常流量。这样既能确保服务正常对外暴露,又能有效屏蔽未授权的扫描和攻击。

如何区分不同业务端口的访问策略
针对Web服务和数据库服务,应分别制定不同的端口开放策略以最小化攻击面。Web服务通常只需开放80和443端口,且建议限制来源IP为CDN节点或负载均衡器地址;数据库服务如MySQL则严禁直接对公网开放,若必须远程管理,应仅允许特定的运维IP访问3306端口,并通过SSH隧道加密传输。这种分层策略能显著降低数据泄露风险。

import boto3
from botocore.exceptions import ClientError
def configure_security_group(sg_id, port, protocol, cidr):
ec2 = boto3.client('ec2')
try:
response = ec2.authorize_security_group_ingress(
GroupId=sg_id,
IpPermissions=[
{
'IpProtocol': protocol,
'FromPort': port,
'ToPort': port,
'IpRanges': [{'CidrIp': cidr, 'Description': 'Allowed Access'}]
}
]
)
print(f"Rule added for port {port}")
except ClientError as e:
print(f"Error: {e}")
# 示例:为Web服务器开放80端口给任意IP
configure_security_group('sg-12345678', 80, 'tcp', '0.0.0.0/0')
# 示例:为数据库开放3306端口给特定运维IP
configure_security_group('sg-87654321', 3306, 'tcp', '192.168.1.100/32')
当安全组规则冲突时如何处理
当安全组中存在多条规则时,系统默认采用“显式拒绝”优于“隐式允许”的原则,但实际中更常见的是多条“允许”规则的叠加。如果一条规则允许所有IP访问22端口,而另一条规则仅允许特定IP访问22端口,前者会覆盖后者的限制效果,导致任何IP都能连接。解决此问题的方法是移除过于宽泛的规则,或使用更具体的CIDR块进行细化,确保没有冗余的宽泛允许规则存在。











