我的 iptables 安全吗?

我的 iptables 安全吗?

rc.local我的新 Ubuntu 服务器上有这个:

iptables -F

iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 9418 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 5000 -m state --state NEW,ESTABLISHED -j ACCEPT # Heroku
iptables -A INPUT -i eth0 -p tcp --sport 5000 -m state --state ESTABLISHED -j ACCEPT # Heroku

iptables -A INPUT -p udp -s 74.207.242.5/32 --source-port 53 -d 0/0 --destination-port 1024:65535 -j ACCEPT
iptables -A INPUT -p udp -s 74.207.241.5/32 --source-port 53 -d 0/0 --destination-port 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P FORWARD DROP

9418 是 Git 的端口。5000 是用于管理 Heroku 应用的端口。和74.207.242.574.207.241.5我们的 DNS 服务器。

你认为这安全吗?你发现这里有漏洞吗?

更新:为什么阻止输出很重要?这台机器仅供我使用。

答案1

我看到的唯一主要漏洞是 IPv6。你需要ip6tables它。如果你的任何服务都监听 IPv6(其中许多服务,包括 ssh,默认监听 IPv6),那么攻击者可以利用它完全绕过你上面的所有规则。当 IPv6 可用时,网络将优先使用 IPv6 而不是 IPv4。

假设您的OUTPUT策略是DROP,那么您已经很好地限制了 IPv4。

跳过该RELATED选项可能意味着当服务关闭并停止监听时,您会遇到超时而不是立即被拒绝的情况,因为据我所知,在这种情况下,数据包都不TCP RST是。NEWESTABLISHED


回答你问题的更新:当不是仅供您使用。

无论我们多么小心谨慎,我们总是有可能错过某些东西,或者一时疏忽大意,让其他人在一定程度上控制我们的机器。一旦攻击者站稳脚跟,他们要做的第一件事就是下载特权提升工具包、rootkit、他们的命令和控制系统以及他们真正想在机器上运行的任何东西。限制出站连接意味着他们无法下载特权提升工具包,这意味着他们只能以 Apache 用户或 Git 用户或他们设法攻击的任何用户身份运行。没有 root 权限,他们就无法隐藏,也无法修改防火墙。这不会永远阻止攻击者,但可能会阻止他足够长的时间,让你注意到他在那里,或者让他感到沮丧,以至于他放弃并去更容易的地方。

上述规则意味着,只有当远程文件托管在 SSL 上时,远程文件包含攻击才会起作用。如果您在此框和互联网之间放置一个代理服务器,并让它只允许某些 URL 模式,则可以阻止 RFI 的踪迹,同时仍允许正常运行。这是纵深防御

答案2

除了其他人发布的关于缺少OUTPUT链和重复ESTABLISHED规则的评论之外,您还可以将 SSH(TCP /端口 22)等协议限制到特定 IP(如果适用)。

要检查您的设置,您可以尝试 NMAP 检查开放端口。如果您的防火墙规则变得更加复杂,这会更有用。

答案3

您应该从 /etc/network/interfaces 中的预设行运行脚本(参见man 5 interfaces),以便在网络可用和启动服务之前将防火墙规则设置到位。rc.local 是最后运行的程序,因此存在一个不必要的时间窗口,在此期间所有内容均不受保护。

还应该记住,你正在做的这种事情并不是某种灵丹妙药。如果你正在启动其他服务但试图阻止访问,那么你首先就不应该启动它们。如果这里的想法是阻止访问你不打算启动的服务,这是否意味着有不值得信任的人已经在你的机器上做事了?在这种情况下,你已经输了,可以安全地假设,当有恶意用户在你的机器上运行代码时,你的防火墙规则也可能被操纵。

答案4

我开源iptables-样板几天前在 github 上。它本质上是一组很好的预定义 iptable 规则,并且有大量的注释。

也许使用和阅读可以帮助你

相关内容