如何阻止端口6379阻止ubuntu上的外部通信?


8

我想阻止对服务器上端口6379的访问,但是我仍然想在内部连接到它。Redis服务器应用程序在该端口上运行,我只想在本地连接(127.0.0.1)。我怎样才能做到这一点?

Answers:


11

为此,您需要确保正确配置了IPTables规则。Ubuntu通常默认情况下会使其服务器保持打开状态,这就是为什么我仍然不建议将它们用作服务器的原因,除非您已经非常了解如何正确执行此操作。

我想你iptables -L -nv看起来像这样,对吗?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

它是空的,它是敞开的。Ubuntu IPTables HowTo可能会对此有所帮助。(https://help.ubuntu.com/community/IptablesHowTo

我建议使用类似的方法,它允许在任何接口上使用SSH,并且在任何接口上使用tcp 6379,但您不希望使用该接口:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

然后,您可以将该文件保存在/etc/iptables.rules中。

显然,应该添加您要专门打开的任何其他端口。

注意:为清楚起见,我添加了特定的6379行。实际上,在COMMIT之前的底部ACCEPT实际上会允许这样做,因为必须允许Linux系统上的所有回送连接才能正常运行。

您还需要将规则也放在/ etc / network / interfaces文件中,以确保在接口出现时(而不是在启动过程中)添加规则。建议添加以下内容:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

编辑:要最初加载此配置,您需要运行上面引用的iptables-restore命令:

iptables-restore < /etc/iptables.rules

我认为这将打开整个网络的端口6379,对吗?我应该怎么做才能仅对127.0.0.1开放?
史蒂夫·罗德里格

否,因为默认规则是DRO​​P。如果没有明确的ACCEPT规则,则会被顶部:INPUT旁边的默认DROP阻止。
麦哲伦

我个人认为默认的ACCEPT规则在“服务器”部署中只是犯罪。但这并不奇怪,因为Ubuntu首先是桌面发行版。
麦哲伦

好的,我完全按照您的要求进行了操作,但是看来我仍然可以从外部连接到端口6379。我应该重启服务器还是什么?
史蒂夫·罗德里格

1
是的,但是我不太在乎柜台,这对我有用。随意编辑答案以适应更严格的过程。
麦哲伦2012年

3

好吧,我建议使用“简单的防火墙”(ufw),这也是规范建议的。对于偶尔的端口锁定任务而言,读写iptables太复杂了。

看到这里:https : //wiki.ubuntu.com/UncomplicatedFirewall


1
较旧版本的UFW无法将规则应用于选定的端口,完全或完全没有。专业的系统管理员应该养成了解其iptables设置的功能以及链如何工作的习惯。
麦哲伦2012年

2

就像是

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

应该管用。


这给了我这个错误:iptables v1.4.4:未知选项`--dport'–
Steve Rodrigue

您可以使用新命令重试吗?我添加了--protocol和-i部分(适应您的界面),现在应该可以使用了。
Kedare'4

我的建议的问题在于,除非运行其他必需的命令,否则它不会在重新启动后保存,并且假定只有1个非环回接口。
麦哲伦

我建议使用否定运算符:-i!lo
麦哲伦

阿德里安(Adrian):您的意思是,如果我重新启动服务器,该修改将不再有效?
史蒂夫·罗德里格

0

对于Redis的较新版本,你可以用bind 127.0.0.1redis.conf直接,无需额外iptables配置做到这一点

这篇文章

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.