IPtableslocking只允许SSH的网站

我写了我的第一个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某处。 另外,我不会丢弃所有传出的数据包。

INPUT链

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

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

允许build立会话

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

OUTPUT链

选项1

允许所有出站stream量

 -P OUTPUT ACCEPT 

选项#2

仅允许出站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”的规则,因为它们通常会被匹配。 启动会话的规则只会在会话中使用一次。