目前,我在AWS中有一个带有一些iptables规则的NAT实例,例如将某个端口中的流量转发给其他实例。因此,如果我执行curl nat.address.com:8090
,流量将转发到正在侦听8090端口的其他实例,假设它是实例A.
我想知道的是只有在原始源位于本地网络内时才能应用此规则。也就是说,如果对nat.address.com:8090
的请求来自具有ip 172.31.10.10
的内部实例,则nat实例应将其转发到实例A.但是,如果对nat.address.com:8090
的请求来自某些外部实例来源(例如189.58.200.10
),它不应该转发。
有可能吗?
答案 0 :(得分:1)
如Documentation中所述,您可以使用-s选项:
-s, --source [!] address[/mask] Source specification. Address can be either a network name, a hostname (please note that specifying any name to be resolved with a remote query such as DNS is a really bad idea), a network IP address (with /mask), or a plain IP address. The mask can be either a network mask or a plain number, specifying the number of 1's at the left side of the network mask. Thus, a mask of 24 is equivalent to 255.255.255.0. A "!" argument before the address specification inverts the sense of the address. The flag --src is an alias for this option.
例如:
iptables -t nat -A POSTROUTING -s 172.31.10.0/24 -j MASQUERADE
答案 1 :(得分:1)
您可以通过以下两种方式之一完成此操作:
(1)安全组规则:
您可以在与NAT实例关联的安全组中添加适当的规则。这将阻止端口8090上的所有数据包的入站流量,这些数据包来自任何非内部实例的源。
例如:如果您想转发源自IP 172.31.10.10的特定实例的数据包,您可以在NAT实例的安全组中添加一个入站规则,如下所示:
Type: Custom TCP Rule
Protocol: TCP
Port Range: 8090
Source: 172.31.10.10
并且您必须确保安全组内没有其他规则允许来自任何其他来源的TCP端口8090上的流量。
如果您想确保您的NAT实例转发来自VPC内所有内部实例的流量,那么您可以编辑Source字段以包含您的VPC的CIDR范围。
此选项仅在您知道到达NAT实例的网络流量时才适用,以便您可以在安全组内适当添加规则以匹配传入流量,否则您最终会阻止有意义的流量好。
(2)IPTable规则:
此选项要求您在NAT实例上添加IPTable规则,以便NAT实例仅接受来自特定网络(即您的VPC)的网络流量,并且仅接受来自特定TCP端口的网络流量。例如,如果您想确保您的NAT实例仅接受来自您的内部实例(即您的VPC内的实例)的端口8090上的流量,那么将适用以下规则: