我已经编写了我的第一个 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 服务器的正确方法。
您可能不想丢弃所有传出连接。
您可能希望尽早添加规则以允许 ESTABLISHED 连接,如果使用像 ftp 这样的协议,您也可以将 RELATED 添加到规则中,例如
记住规则顺序很重要 - 第一场比赛获胜。
您可能应该看一下我们关于保护 Web 服务器安全的问答保护 LAMP 服务器的提示它有很多很好的信息。
你在
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
某个地方失踪了。此外,我不会丢弃所有传出数据包。输入链
允许创建新会话。@Lain 的回答有一个小问题,它不执行状态检查。这可以通过执行以下操作来实现:
允许已建立的会话
输出链
选项1
允许所有出站流量
选项#2
仅允许回复已接受输入的出站流量。如果您想强制执行出站流量,这可能很有用。
以及接受出站流量的示例规则
. . .
最后一点,将包含“-m state --state ESTABLISHED,RELATED”的规则放在规则集顶部附近,因为它们通常会被匹配。启动会话的规则只会在 pr 会话中使用一次。