![我的 Linux 防火墙安全吗?](https://linux22.com/image/554768/%E6%88%91%E7%9A%84%20Linux%20%E9%98%B2%E7%81%AB%E5%A2%99%E5%AE%89%E5%85%A8%E5%90%97%EF%BC%9F.png)
我是 Linux 防火墙的新手,正在尝试为面向公众的计算机设置系统防火墙。以下是我的要求:
- 端口 80 和 22 应开放以用于 HTTP 请求和 SSH 登录
- 因为我的应用服务器将在端口 8080 上以非 root 用户身份运行。我想将所有数据包重定向到端口 8080。在某些情况下,我的应用程序本身会从服务器内部向服务器发出请求。
问题:我的防火墙有漏洞吗?有什么方法可以让它更安全。
这是我的防火墙设置:
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow Secure SSH transfer
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 22 --state NEW -j ACCEPT
# Allow all HTTP requests
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
*nat
:OUTPUT ACCEPT [0:0]
-A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Routes all HTTP requests from port 80 to port 8080.
# Allows you to run JETTY as a non-root user.
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
# Completed
答案1
您的配置中有以下行:
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
然而,有两种类型的 ICMP 请求可以被视为一个小的安全隐患(来自在此处输入链接描述):
Type Name Reference
...
13 Timestamp [RFC792]
...
17 Address Mask Request [RFC950]
类型 13 是请求根据目标计算机获取准确时间。准确时间可用于利用某些网络协议中一些非常弱的加密算法,从而使攻击者能够访问特权信息。类型 17 是请求接收请求的接口的网络掩码。有效的响应可以帮助攻击者了解您的网络拓扑。我建议使用以下三条规则来代替上述规则:
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 13 -j REJECT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 17 -j REJECT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
这些规则将阻止两种被禁止的 ICMP 类型并允许所有其他类型。
答案2
我对 Linux 路由也还不太熟悉,我看到的唯一其他建议是将 INPUT 的目标策略也更改为丢弃/拒绝 (iptables -P INPUT DROP)。出于某种原因,即使您的最后一条规则是像您的一样丢弃或拒绝,也建议这样做。