新上线的 CentOS Web 服务器需要哪些基本的防火墙配置?

新上线的 CentOS Web 服务器需要哪些基本的防火墙配置?

我新从 Linode.com 获得了一个 CentOS 服务器,我将它用作带有 LAMP 堆栈的 Apache Web 服务器。

我注意到防火墙默认是启用的,但似乎没有任何活动规则。

这种情况下我应该怎么办?

我是否应该阻止所有流量,然后有选择地仅允许我的 Web 服务器使用端口 80 和 443?

是否有任何“防火墙模板”或基本防火墙规则指南?

答案1

您应该阻止所有端口并选择性地允许您需要的端口。幸运的是,如果您不小心将自己锁定在外,您可以通过 Lish 控制台访问您的 Linode 以清除任何错误的防火墙规则。

以下是我经常使用的防火墙配置:

允许 SSH、HTTP、HTTPS

iptables -A INPUT -p tcp -m multiport --destination-ports 22,80,443 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

如果需要允许 FTP,请包含端口 21(对于被动连接,您可能需要定义额外的端口范围,我使用 21000-21100:

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,80,443,21000:21100 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

由于某种原因,我还发现我无法使用 sendmail、exim 等发送邮件,除非我打开端口 25(您的邮件配置通常设置为仅接受从本地服务器发送的电子邮件):

iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,25,80,443,21000:21100 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/24 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

为了刷新规则以重新开始而不锁定自己,请使用以下命令集:

iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -F

要查看当前的防火墙规则和统计数据,可以使用以下命令:

iptables -L -nv

另外,不要忘记保存您的规则并确保 IPTables 在重启时启动。

答案2

如果你阻止所有流量,那么盒子就会瞬间死机(至少对你来说是这样)。

研究您正在使用的服务需要哪些端口(以及您不需要但仍然必不可少的服务,例如 BIND)

服务器的常见必需端口包括:

22 TCP (SSH, but you should change this)
21 TCP (FTP, but this is insecure. Use SFTP on the SSH port.)
80, 443 TCP (HTTP/S)
53 UDP (DNS)
# use iptables -A INPUT -p (udp|tcp) --dport=$PORT -j ACCEPT

您还应该使用防火墙阻止常见的攻击媒介,例如 SYN 泛洪(TCP 的握手是SYN-SYN-ACK,后者 SYN 是组合)阻止尝试的未建立连接SYN-ACK,但接受已建立的连接。

/sbin/iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

另外,不要阻止 ping(ICMP)。通过 ICMP 无法将您 ping 到底;使用 TCP 会更有效,并且您已打开端口 80 和 443。

# Allow ICMP
/sbin/iptables -A INPUT -i eth0 -p icmp -j ACCEPT

拥有所有需要的服务后,阻止所有剩余流量。如果您对机器有完全访问权限并且知道机器上运行着什么,您还应该考虑在本地主机上拥有完全访问权限。

/sbin/iptables -A INPUT -i lo -j ACCEPT

如果你有 IPv6,不要忘记对 进行上述操作ip6tables。几乎每个人都会因为某种原因忘记这一点。

相关内容