我已将文本文件中的“iptables.save”中的以下规则应用于 iptables。
但令我沮丧的是,我发现 IP 地址 107.22.26.176 仍然能够通过 TCP 访问我的服务器。
我做错了什么?规则的顺序不正确吗?
感谢您的任何建议。
iptables.save
===================
*filter
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -s 107.20.0.0/14 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
更新 1:这是 iptables -L 的输出
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
DROP all -- ec2-107-20-0-0.compute-1.amazonaws.com/14 anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT icmp -- anywhere anywhere icmp echo-request
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: '
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
更新 2:我想我知道原因了。我使用 Cloudflare 来解析我的域名,因此 iptables 只能看到 Cloudflare 的 IP 地址,而看不到访问者的 IP。我现在的问题是,iptables 有没有办法看到真实的 IP?谢谢。
答案1
回答第二个问题 - 你的反向代理(我假设这就是 cloudflare)应该给你一个 HTTP 标头,告诉您实际的连接 IP - x-forwarded-for。
http://en.wikipedia.org/wiki/X-Forwarded-For
但是,这意味着 iptables 不是完成这项工作的合适工具。您需要在应用程序级别过滤这些连接(在您的 Web 服务器配置中,基于该 http 标头的值)。或者也许 cloudflare 有自己的方法来阻止外围 IP。
答案2
第一个 INPUT 规则不应为“全部接受”。这样所有其他规则都会失效。尝试将 iptables.save 的第一个规则放在最后或直接将其删除。然后再次执行恢复命令。
或者您也可以输入:
iptables -D INPUT -i lo -j ACCEPT
在终端