Skip to content

Commit 96a31bf

Browse files
authored
Merge pull request #176 from coroot/collapse_aws_services_external_ips
group connections to AWS services by FQDN instead of IPs
2 parents 4a2859b + f14f9a1 commit 96a31bf

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

common/net.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ func IsIpPrivate(ip netaddr.IP) bool {
6767
return false
6868
}
6969

70+
func IsIpExternal(ip netaddr.IP) bool {
71+
return !ip.IsLoopback() && !IsIpPrivate(ip)
72+
}
73+
7074
type connectionFilter struct {
7175
whitelist map[string]netaddr.IPPrefix
7276
}
@@ -196,11 +200,11 @@ func (dk DestinationKey) String() string {
196200
}
197201

198202
var (
199-
awsS3FQDN = regexp.MustCompile(`.+s3.*.amazonaws.com`)
203+
awsServicesFQDN = regexp.MustCompile(`.+\.amazonaws\.com`)
200204
)
201205

202206
func NewDestinationKey(dst, actualDst netaddr.IPPort, fqdn string) DestinationKey {
203-
if awsS3FQDN.MatchString(fqdn) {
207+
if IsIpExternal(actualDst.IP()) && awsServicesFQDN.MatchString(fqdn) {
204208
return DestinationKey{
205209
destination: HostPortWithEmptyIP(fqdn, dst.Port()),
206210
}

common/net_test.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,21 @@ func TestConnectionFilter(t *testing.T) {
2727
}
2828

2929
func TestDestinationKey(t *testing.T) {
30-
d := netaddr.IPPortFrom(netaddr.MustParseIP("10.10.10.10"), 443)
31-
ad := netaddr.IPPortFrom(netaddr.MustParseIP("127.0.0.1"), 443)
30+
d := netaddr.IPPortFrom(netaddr.MustParseIP("1.1.1.1"), 443)
31+
ad := netaddr.IPPortFrom(netaddr.MustParseIP("2.2.2.2"), 443)
3232

33-
assert.Equal(t, "10.10.10.10:443 (127.0.0.1:443)", NewDestinationKey(d, ad, "").String())
33+
assert.Equal(t, "1.1.1.1:443 (2.2.2.2:443)", NewDestinationKey(d, ad, "").String())
3434

3535
assert.Equal(t,
3636
"aa.bb.s3.amazonaws.com:443 ()",
3737
NewDestinationKey(d, ad, "aa.bb.s3.amazonaws.com").String(),
3838
)
3939

40+
assert.Equal(t,
41+
"dynamodb.us-east-2.amazonaws.com:443 ()",
42+
NewDestinationKey(d, ad, "dynamodb.us-east-2.amazonaws.com").String(),
43+
)
44+
4045
assert.Equal(t,
4146
"amazonlinux-2-repos-us-east-1.s3.dualstack.us-east-1.amazonaws.com:443 ()",
4247
NewDestinationKey(d, ad, "amazonlinux-2-repos-us-east-1.s3.dualstack.us-east-1.amazonaws.com").String(),

0 commit comments

Comments
 (0)