2011-09-14 85 views
61

我从来没有使用过iptables,并且在线文档似乎有点不透明。iptables阻止访问端口8000除IP地址

我想阻止我的服务器上的端口8000的所有请求,除了那些来自特定IP地址的端口。我如何使用iptables来做到这一点?

+1

//,你会如此友善地分享不透明文档的链接吗? –

回答

111

此问题应该在Server Fault。然而,接下来应该做的伎俩,假设你在谈论TCP并且要允许IP为1.2.3.4:

iptables -A INPUT -p tcp --dport 8000 -s 1.2.3.4 -j ACCEPT 
iptables -A INPUT -p tcp --dport 8000 -j DROP 
+3

你将如何去扭转你在这里设置的ip/port限制? (万一我想在将来撤消这个) – tester

+4

测试人员,删除的东西,请参考此 - http://stackoverflow.com/questions/10197405/iptables-remove-specific-rules –

+2

我知道这是比较旧的,这完全钉了我所需要的。而且由于无论如何答案已被接受,你如何做一个具体的IP范围相同的事情?谢谢! :) – jagc

14

另一种选择是;

sudo iptables -A INPUT -p tcp --dport 8000 -s ! 1.2.3.4 -j DROP 

我有类似问题的3桥的虚只需要使用不同的组合访问海誓山盟,所以我测试了这个命令,而且运作良好。

编辑**

据费尔南多评论这link感叹号 (!)将被置于前比-s参数:

sudo iptables -A INPUT -p tcp --dport 8000 ! -s 1.2.3.4 -j DROP 
+1

感叹号('!')现在必须放在'-s'参数之前:'sudo iptables -A INPUT -p tcp --dport 8000 -s! 1.2.3.4 -j DROP'。 –

+1

@FernandoSilveira谢谢,我已更新 – HRgiger

4

您可以随时使用iptables来删除规则。如果您有很多规则,请使用以下命令输出它们。

iptables-save > myfile 

vi从commend行编辑它们。只需使用“dd”删除不再需要的行。

iptables-load < myfile and you're good to go. 

记住,如果您不要配置OS保存规则到一个文件,然后加载程序文件的规则将失去在启动过程中。

+3

在Debian上没有iptables-load,但iptables-restore iptables-restore