![iptables 阻止 localhost 访问 redis](https://linux22.com/image/196288/iptables%20%E9%98%BB%E6%AD%A2%20localhost%20%E8%AE%BF%E9%97%AE%20redis.png)
我有以下 iptables 规则:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s MY_IP_ADDRESS/32 -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
正如您所看到的,我可以从任何地方 ssh 进入我的服务器,并且我可以从我的本地 IP (MY_IP_ADDRESS) 和 localhost 访问我的 redis 数据库。
从我的电脑本身可以redis-cli -h xx.xx.xx.xx -p 6379
正常工作。但在服务器本身上,我无法从redis-cli
.
当我删除以下 iptables 规则时,它再次起作用:
-A INPUT -j DROP
如何允许 localhost 连接到我的 redis 服务器?
答案1
您可以为每个端口添加一条规则:
-A INPUT -i lo -p tcp --dport some-port -j ACCEPT
-A INPUT -i lo -p tcp --dport another-port -j ACCEPT
或者为来自本地主机的所有流量添加一个通用的:
-A INPUT -i lo -j ACCEPT
作为旁注,如果您设置为策略,则可以删除-A INPUT DROP
最后一条规则:INPUT
DROP
-P INPUT DROP
更新:作为另一个旁注,实际上,如果您有-P OUTPUT ACCEPT
,则无需添加任何ACCEPT
规则OUTPUT
(例如,您可以为 添加规则DROP
,但不需要,ACCEPT
因为这就是任何流量最终会发生的情况)通过OUTPUT
这不匹配任何规则)。