如何改进 Web 服务器的 IP 表

如何改进 Web 服务器的 IP 表

这是我当前的 /etc/sysconfig/iptables 文件,用于必须允许 http、ftp 和 ssh 访问的 Web 服务器。

*filter
:INPUT ACCEPT [31395:4050333]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [30540:7083959]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

我刚刚开始学习如何配置 Linux 防火墙。据我所知,该设置几乎满足了我的服务器需求。不过,仍有几个问题:

  1. 安保能再严密一点吗?

  2. :输入接受:输出接受值范围可以吗?

答案1

我认为--state NEW相应条目中的是多余的。

您的规则可能或多或少是安全的,但缺少一些东西,让您完全无法从机器访问互联网。让我向您展示我认为的标准设置(并不是说在数千个网站上都找不到):

root@gw:~# cat /etc/iptables.up.rules
# 由 iptables-save v1.4.14 于 2014 年 11 月 2 日星期日 15:08:43 生成
*筛选
:输入下降 [0:0]
:转发接受 [0:0]
:输出接受 [38:2778]
-A 输入-p icmp -m icmp --icmp-type 8 -j 接受
-A 输入-i lo -j 接受
-A 输入-p tcp -m tcp --dport 80 -j 接受
-A 输入 -m 状态 --状态相关,已建立 -j 接受
-A 输入 -j LOG --log 前缀 "IPTFW "
-A 输入 -j 拒绝 --拒绝 icmp 端口不可达
犯罪
# 于 2014 年 11 月 2 日星期日 15:08:43 完成

对于 SSH 访问,在端口 80 规则之后立即添加一条与端口 80 类似的规则。

对于 FTP 访问,您显然需要打开相应的端口,并且不要忘记加载 FTP 连接跟踪所需的内核模块(根据您的要求在 Debian nf_nat_ftp 或 nf_conntrack_ftp 上)。

我在这里到底在做什么:

  • 允许 ping 请求(ICMP 类型 8),不会造成任何影响,但可能会在乍一看不应该出现的主机上删除
  • 然后在环回接口上接受流量,否则服务器本地的一些内容可能会停止工作。
  • 允许您希望人们访问的端口,-i如果您有多个接口,则可以选择使用参数添加传入接口。
  • 允许所有由机器本身请求的连接的回复,否则您将永远无法生成任何传出连接,甚至无法生成 DNS 或机器上的任何东西,很可能会导致某些服务出现问题。
  • 最后,在拒绝之前,您应该记录将被拒​​绝的内容。我更喜欢拒绝而不是丢弃,因为这是一个明确的信息。同样(就像上面的 ping 推理一样),如果您想更“隐秘”,那么只需丢弃,但这没有实际用处。
  • 不要忘记将 INPUT 链的策略设置为 DROP(并确保在执行此操作时不会将自己锁定。)

答案2

为了回答“安全性能否再加强一点”这个问题,让我向您推荐以下社区维基:

iptables 技巧和窍门

相关内容