输入链

输入链

我已经编写了我的第一个 IPtables 规则文件,以尝试保护除 SSH 和 Web 所需端口之外的所有端口上的服务器。

这就是我想出的:

i=/sbin/iptables

# Flush all rules
$i -F
$i -X

# Setup default filter policy
$i -P INPUT DROP
$i -P OUTPUT DROP
$i -P FORWARD DROP

# Allow unlimited traffic on loopback
$i -A INPUT -i lo -j ACCEPT
$i -A OUTPUT -o lo -j ACCEPT

# Open up ports for nginx
$i -A INPUT -p tcp --dport 443 -j ACCEPT
$i -A INPUT -p tcp --dport 80 -j ACCEPT
$i -A INPUT -p tcp --dport 22 -j ACCEPT

# Make sure nothing comes or goes out of this box
$i -A INPUT -j DROP
$i -A OUTPUT -j DROP

我知道 IP 表方面有点暗黑艺术,所以我想知道是否有人可以参与进来,看看这是否是保护 Web 服务器安全的正确方法。

答案1

您可能不想断开所有传出连接。

你可能希望尽早添加一条规则以允许已建立的连接,并且如果使用 ftp 之类的协议,你可能也会将相关项添加到规则中,例如

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

记住规则顺序很重要——先比赛的获胜。

您可能应该看看我们关于保护 Web 服务器安全的问答保护 LAMP 服务器的技巧它包含大量有用的信息。

答案2

你遗漏了-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT某个地方。此外,我不会丢弃所有传出的数据包。

答案3

输入链

允许创建新会话。@Lain 的回答有一个小问题,它不执行状态检查。这可以通过执行以下操作来实现:

-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

允许已建立的会话

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

输出链

选项1

允许所有出站流量

-P OUTPUT ACCEPT

选项 #2

仅允许回复已接受输入的出站流量。如果您想强制出站流量,这将很有用。

-P OUTPUT DROP
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

接受出站流量的示例规则

-A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

。 。 。

最后需要注意的是,将包含“-m state --state ESTABLISHED,RELATED”的规则放在规则集的顶部附近,因为它们经常会被匹配。发起会话的规则只会在会话中使用一次。

相关内容