我最终设法安装了我的 VM 主机,现在我正在使用 iptables 进行创建、测试和学习。
如果我将以下规则放在规则的开始或结束处,这有关系吗?
$IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP
我已经测试过了,没有区别,但我想确认一下。
我目前选择的答案是: 尽早应用策略是个好主意。将它们放在开头。内部流量上的 DROP 规则可能会导致问题。
有以下规则会被视为防火墙故障吗?
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
如果没有这条规则,我将需要为我的 ssh 连接添加一个 OUTPUT 规则,例如:
$IPT -A OUTPUT -p tcp --sport 2013 -j ACCEPT
回答: 经过更多的测试以及与 #iptables@freenode 上的人交流之后,我得出结论:使用
-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
INPUT 和 OUPUT 是一种很好的方法,它将帮助您处理很多事情,例如 FTP,这是一个很好的方法,因为除非您打开并接受给定的端口,否则不会有恶意连接。这是一个没有使用上述内容的正常示例:
$IPT -A INPUT -p tcp --dport 20:21 -j ACCEPT $IPT -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
现在,使用上述规则的样子如下:
$IPT -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
这就是您所需要的,因为一旦建立了连接,输出将立即跟进,您无需为 ftp 数据端口制定规则。
制定以下规则有什么不好之处,您能否举一些例子说明为什么不制定它,而是只定义您可能需要使用的任何东西?
$IPT -P OUTPUT ACCEPT
我目前选择的答案是: 此策略规则允许所有传出流量。作为一项策略,允许所有内容显然不如仅允许明确类型的流量安全。因此,如果安全性是您的首要任务,则您需要在输出链上设置 DROP 策略。请注意,您必须包含许多规则以允许传出流量到可能大量的普通事物,例如:DNS、SMTP、IMAP、POP3、HTTP、HTTPS 等。
以下上下文中 conntrack 和 state 有什么区别?
状态示例:
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
conntrack示例:
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
回答: 在与#iptables@freenode 上的人们进行一些研究讨论后,我得出结论,从现在开始我应该使用 conntrack。
从技术上讲,conntrack 匹配取代了状态匹配,因此状态匹配已过时。但实际上,状态匹配并没有以任何方式过时。
我也很欣赏优秀的在线 iptables 阅读材料。
目前推荐的链接:
答案1
- 尽早应用策略是个好主意。将它们放在开头。内部流量上的 DROP 规则可能会导致问题。
- 此规则将被视为错误,因为它实施了接受策略。为每个服务添加接受规则是构建防火墙的正确方法。
- 接受政策表示您正在执行大部分开放政策。(我们锁上了前门,但您可以使用任何其他门进入。)最佳政策是大部分关闭政策。我们保持所有门窗锁定,只打开我们需要的门窗。
- 看起来没什么区别,尽管我见过的所有规则都使用状态。conctrack 模块将监控状态。将此规则与问题 2 中的端口接受规则一起使用以启用服务。
你可能想看看岸墙文档,了解 iptables 可以做什么。我使用它在我的所有 Linux 实例(包括 OpenWRT)上构建防火墙。它为具有 1、2 或 3 个接口的服务器提供了详尽的样本(默认/基本)配置。
Linux 文档项目还有文档。
答案2
你没有提到任何关于纳特表,所以我假设这个问题与为独立服务器编写 iptables 防火墙脚本有关,而不是为多宿主/网关盒编写。
你是对的:每个链都有一个单一的政策,因此政策规则在哪里或以什么顺序陈述并不重要。
该规则建立了许多/大多数防火墙脚本使用的约定:状态性。不过这只是一个小问题。我不会包括 NEW 状态,我还会包括 INPUT 链的规则,即:
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
我将这些规则放在所有防火墙脚本的顶部或附近,因为它们允许我专注于创建过滤连接尝试的规则,而不必考虑未建立连接的数据包。在我看来,没有这些规则的防火墙脚本可能比包含这些规则的防火墙脚本更复杂,因此更容易出错。
此策略规则允许所有传出流量。作为一项策略,允许所有内容显然不如仅允许明确类型的流量安全。因此,如果安全性是您的首要任务,则您需要在输出链上设置 DROP 策略。请注意,您必须包含许多规则以允许传出流量到可能大量的普通事物,例如:DNS、SMTP、IMAP、POP3、HTTP、HTTPS 等。
答案3
状态与连接跟踪:从 Linux 内核 3.7 开始,状态被删除,转而使用连接跟踪