IPtables 规则用于阻止 IP 范围

IPtables 规则用于阻止 IP 范围

我已将文本文件中的“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

在终端

相关内容