这是我当前的 /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
我认为--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
为了回答“安全性能否再加强一点”这个问题,让我向您推荐以下社区维基: