我不知道为什么我的 iptable 规则阻止访问,https://example.com:9700
尽管accept
规则被添加了
我首先清理一切
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
然后删除所有内容,为 ssh 和我的 9700 端口添加例外
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 9700 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
清除后服务开始工作,并在第二组规则之后停止工作。
请注意,SSH 规则运行良好。添加规则后,我可以通过 SSH 重新连接到我的服务器
DNS 问题
根据其中一个答案,已验证的 DNS 不起作用。但是,这并不能解释为什么我仍然无法通过 IP 地址访问它:https://xx.xxx.xx.x:9700
答案1
您能解析 example.com 的名称吗?如果您阻止对任何名称服务的访问,您的机器将无法访问 example.com - 您必须在 /etc/hosts 中添加主机 example.com 及其 IP 地址,或为您的 DNS 添加 iptables 例外。
发布日期这里,DNS 查找的一个例外是:
iptables -A INPUT -p udp --source-port 53 -j ACCEPT
编辑:
由于您排除了 DNS 问题,我更深入地研究了您的规则,并且根据我对 iptables 的理解,它无法工作。您允许在目标端口 9700(在您的机器上!)上进行 INPUT 流量(到您的机器),并允许从本地端口 9700 进行 OUTPUT 流量(从您的机器到外部)。
您想要的恰恰相反(或者我错了?):您希望您的机器通过端口 9700 到达外部服务器,并且您希望该服务器能够回答您。
因此你的最后两条规则应该是:
iptables -A OUTPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
这允许从您的计算机上的任何端口(因为您无法控制协议将使用哪个端口来发送流量)开始的流量到端口 9700 上的任何其他计算机,并且允许来自世界上任何其他计算机的流量到您的计算机,如果数据包是已建立的连接的一部分。
答案2
尝试:
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 9700 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 9700 -m state --state ESTABLISHED -j ACCEPT
我假设解析 example.com IP 地址的 DNS 服务器不是同一台机器。
另外,我认为将 OUTPUT 链的策略设置为 ACCEPT 没什么问题。试试看。
这套规则对我来说很管用。它应该也对你有用。
此致!