我在云上有一个服务器,其中包含以下iptables。
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 9200 -m state --state New,RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2900 -j DNAT --to-destination 127.0.0.1:9200
我必须在其他链中添加,以便我可以在2900端口上访问我的服务。
答案 0 :(得分:1)
规则自上而下适用。
6.2目的地NAT
这是在PREROUTING链中完成的,就像数据包进来一样;这意味着Linux机箱本身的其他任何东西(路由,数据包过滤)都会看到数据包进入其真正的“真实”状态。目的地
所以你想要PREROUTING线在顶部,所以NAT先发生。
然后是一个INPUT条目,允许在NAT之后在目标端口上进行传入连接。
除了您的INPUT规则不接受RELATED和ESTABLISHED以及您的输出规则设置特定源端口之外?出站流量通常来自随机高端口。
从https://serverfault.com/a/578781/57144和https://serverfault.com/a/578787/57144您要明确说明传入端口的新连接,并且应该选择较少的性能规则(如果适用)。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2900 -j DNAT --to-destination 127.0.0.1:9200
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 9200 -j ACCEPT
# or
# iptables -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443,9200 -j ACCEPT
iptables -A INPUT -j DROP