iptables 阻止对端口 8000 的访问,但 IP 地址除外

Posted

技术标签:

【中文标题】iptables 阻止对端口 8000 的访问,但 IP 地址除外【英文标题】:iptables block access to port 8000 except from IP address 【发布时间】:2011-11-17 09:48:04 【问题描述】:

我没用过iptables,网上的文档好像有点不透明。

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

【问题讨论】:

// , 你能分享一个不透明文档的链接吗? 【参考方案1】:

这个问题应该在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

【讨论】:

您将如何扭转您在此处设置的 IP/端口限制? (以防我以后想撤消此操作) 测试人员,要删除东西,请参考这个 - ***.com/questions/10197405/… 我知道这是比较老的,这完全符合我的需要。既然答案已经被接受,那么你如何对特定的 IP 范围做同样的事情呢?谢谢! :) @JiegoCordoviz 您可以为源地址添加掩码:“-s 1.2.3.0/24”将接受以“1.2.3.”开头的任何内容。如果您有范围并想计算出网络掩码,请搜索“网络掩码计算器”。【参考方案2】:

另一种选择是;

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

【讨论】:

感叹号 (!) 现在必须放在 -s 参数之前:sudo iptables -A INPUT -p tcp --dport 8000 -s ! 1.2.3.4 -j DROP 我不确定感叹号在这里有什么作用。它比公认的答案更好吗? @aexl 除了单行之外几乎相同【参考方案3】:

您始终可以使用 iptables 删除规则。如果您有很多规则,只需使用以下命令将它们输出即可。

iptables-save > myfile

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

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

请记住,如果您未将操作系统配置为将规则保存到文件中,然后在引导期间加载文件,您的规则将会丢失。

【讨论】:

在 Debian 上没有 iptables-load,但是 iptables-restore iptables-restore &lt; myfile // wiki.debian.org/iptables

以上是关于iptables 阻止对端口 8000 的访问,但 IP 地址除外的主要内容,如果未能解决你的问题,请参考以下文章

centOS外部浏览器无法访问tomcat8000端口解决办法

iptables 做本地转发

Linux中如何开启8080端口供外界访问 和开启允许对外访问的端口8000

Linux 防火墙开放特定端口 (iptables)

Linux 防火墙开放特定端口 (iptables)

Linux 防火墙开放特定端口 (iptables)