iptables tcp 代理规则不起作用

iptables tcp 代理规则不起作用

我有几台服务器需要连接到远程服务。这些服务器是我控制下的 ec2 实例。远程服务在我公司管理的服务器上运行,但不在我部门管理的服务器上,我不确定它托管在哪里。出于安全原因,远程服务只允许特定端口上的单个 IP 地址(它是 AWS 弹性 IP)访问该服务,因此所有请求都必须通过代理。我查找了几个如何实现这一点的示例,并尝试了许多不同的修改,但似乎都不起作用。我尝试根据我对 iptables 的了解创建规则,并得出了我已有的规则(但仍然不起作用)。我希望有人能帮助我快速完成这项工作。

$ cat /proc/sys/net/ipv4/ip_forward
1

$proxy_ip
$remote_server_ip
$remote_server_port

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d $proxy_ip/32 -p tcp -m tcp --dport $remote_server_port -j DNAT --to-destination $remote_server_ip:$remote_server_port
-A POSTROUTING -d $remote_server_ip/32 -p tcp -m tcp --dport $remote_server_port -j SNAT --to-source $proxy_ip
COMMIT
# Completed on Mon Sep 17 17:28:07 2012
# Generated by iptables-save v1.4.12 on Mon Sep 17 17:28:07 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1376:205512]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name DEFAULT --rsource -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -p tcp -m tcp --dport $remote_server_port -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Sep 17 17:28:07 2012

如果有人能告诉我 ssh 上的两个速率限制规则出了什么问题,我将获得加分,因为它们也不起作用。

答案1

所以我现在觉得自己有点愚蠢,但我知道我的问题是什么。我会在这里分享它以作纪念。

这些规则确实有效,只是我的测试方法有问题。我正在将 MS SQL 从集群转发到远程数据库。但我无法实际测试它是否有效,因为允许访问远程数据库的唯一 IP 地址由未代理其他请求的单个服务器使用,并且该服务器正在生产中。所以我一直在尝试使用 curl 通过代理访问另一个 Web 服务器,看看是否能得到响应。然后我只需切换 IP 地址和端口,希望它能正常工作。

但我的问题是规则

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

捕获了所有传入的响应,但没有转发它们。意识到这一点后,我注释掉了这条规则,一切正常。而且由于在生产中,它将是一个完全不同的端口,因此这条规则不会对代理产生负面影响。

感谢所有花时间试图找出我的错误的人。

相关内容