是否可以仅对内部ips应用iptables规则?

时间:2016-01-06 18:07:12

标签: amazon-web-services networking nat

目前,我在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),它不应该转发。

有可能吗?

2 个答案:

答案 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上的流量,那么将适用以下规则:

  • $ iptables -A INPUT -i eth0 -p tcp -s 172.31.0.0/16 --dport 8090 -m state --state NEW,ESTABLISHED -j ACCEPT
  • $ iptables -A OUTPUT -o eth0 -p tcp --sport 8090 -m state --state ESTABLISHED -j ACCEPT