![新上线的 CentOS Web 服务器需要哪些基本的防火墙配置?](https://linux22.com/image/1361882/%E6%96%B0%E4%B8%8A%E7%BA%BF%E7%9A%84%20CentOS%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%9C%80%E8%A6%81%E5%93%AA%E4%BA%9B%E5%9F%BA%E6%9C%AC%E7%9A%84%E9%98%B2%E7%81%AB%E5%A2%99%E9%85%8D%E7%BD%AE%EF%BC%9F.png)
我新从 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
。几乎每个人都会因为某种原因忘记这一点。