我写了我的第一个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添加到规则中,例如
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
记住规则顺序很重要 – 首先匹配胜利。
你应该看看这个关于保护networking服务器的问答。保护LAMP服务器的提示有很多很好的信息。
您缺less-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT某处。 另外,我不会丢弃所有传出的数据包。
允许创build新的会话。 @莱恩的答案有一个小问题,它不执行状态检查。 这可以通过执行以下操作来实现:
-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
允许build立会话
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许所有出站stream量
-P OUTPUT ACCEPT
仅允许出站stream量回复join的input。 如果要强制执行出站通信,这可能很有用。
-P OUTPUT DROP -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
以及接受的出站stream量的示例规则
-A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
。 。 。
最后要注意的是,在规则集的顶部附近保持包含“-m state –state ESTABLISHED,RELATED”的规则,因为它们通常会被匹配。 启动会话的规则只会在会话中使用一次。