iptables阻止从IP地址访问端口8000


80

我从未使用过iptables,而且在线文档似乎有点不透明。

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


2
//,您是否愿意共享不透明文档的链接?
弥敦道(Nathan Basanese)2015年

Answers:


148

这个问题应该在服务器故障上。不过,假设您正在谈论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 /端口限制?(以防万一我以后想撤消此操作)
测试人员

4
测试仪,删除的东西,请参阅本- stackoverflow.com/questions/10197405/...
任务蒙格

2
我知道这是比较古老的,这完全满足了我的需求。而且既然答案一直被接受,那么您如何在特定的IP范围内做同样的事情?谢谢!:)
jagc

1
@JiegoCordoviz您可以在源地址中添加掩码:“ -s 1.2.3.0/24”将接受以“ 1.2.3。”开头的任何内容。如果您有一个范围并想计算出一个网络掩码,则搜索“网络掩码计算器”。
乔恩·布莱特

17

另一种选择是:

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

我遇到了类似的问题,即3个桥接虚拟机仅需要以不同的组合相互访问,因此我已经测试了此命令,并且效果很好。

编辑**

根据Fernando的评论,此链接感叹号(!)将放置在-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
费尔南多·西尔维拉

我不确定感叹号在这里做什么。比接受的答案好吗?
aexl

@aexl除了单行外几乎是一回事
HRgiger

5

您始终可以使用iptables删除规则。如果您有很多规则,请使用以下命令将其输出。

iptables-save > myfile

vi从推荐行进行编辑。只需使用“ dd”删除不再需要的行。

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

请记住,如果您不配置操作系统以将规则保存到文件中,然后在启动过程中加载文件,则将丢失规则。


3
在Debian上没有iptables-load,但是iptables-restore iptables-restore < myfile// // wiki.debian.org/iptables
Fedir RYKHTIK 2015年
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.