IPTables 只允许本地主机访问

ipt*_*uck 68 iptables

这些年来,我一直在努力对 iptables 有一个深入的了解。每当我尝试阅读手册页时,我的眼睛都会开始呆滞。

我有一个服务,我只想允许本地主机访问。

我应该谷歌什么条款(或配置,如果有人觉得慷慨)只允许本地主机访问给定端口?

Hyp*_*ppy 76

如果服务是指特定端口,则以下两行应该有效。将“25”更改为您要限制的任何端口。

iptables -A INPUT -p tcp -s localhost --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP
Run Code Online (Sandbox Code Playgroud)

  • @tester 再次输入这些命令,但将 `-A` 替换为 `-D` (11认同)
  • @Hyppy,您将如何“撤消”此操作? (4认同)
  • “来自本地主机到端口 25 的任何内容,接受”,第二条规则是“丢弃任何进入端口 25 的内容”。首先处理第一行,允许 localhost,其他任何内容都将被第二行删除。是的? (2认同)

pep*_*uan 32

我建议:

iptables -A INPUT -i lo -p tcp --dport $APP_PORT -j ACCEPT
iptables -A INPUT -p tcp --dport $APP_PORT -j DROP
Run Code Online (Sandbox Code Playgroud)

因为,自寻址数据包不一定以 127.0.0.1 作为其源,但它们都从lo接口“进入” 。

现在,如果您真的想了解iptables您应该做的第一件事,那就是下载并打印解释netfilter表格关系的好图表。这里有两个很棒的:

最后,阅读大量的iptablesHOWTO。实际示例将帮助您快速上手:)

  • @Gracchus 我发现使用 `iptables-save` 更容易,将输出保存到文件中,使用 `vim` 或 `emacs` 编辑它,然后使用 `iptables-apply` 重新​​导入编辑过的文件 (2认同)
  • @tech-pro 是的,REJECT 可以安全使用。这取决于您想要完成的任务以及您是否想对尝试使用该端口的人保持礼貌。REJECT 将发回 TCP RST 数据包,告诉客户端机器已启动,但端口已关闭。如果您要关闭人们可能合法期望使用的端口,那么 REJECT 是很好的选择。如果您只期望端口扫描仪,那么 DROP 会更好。 (2认同)
  • @x-yuri 例如,我在 `dnscrypt-proxy` 前面运行 `unbound` 作为 DNS 缓存。`unbound` 绑定到 `127.0.53.1:53`,而 `dnscrypt-proxy` 绑定到 `127.0.53.2:53`。当应用程序请求 unbound 或 dnscrypt-proxy 来解析 FQDN 时,猜猜 unbound/dnscrypt-proxy 将从哪个源地址响应? (2认同)