我正在尝试配置 iptables 的安全设置。
基本上,我设置了一个白名单并尝试对其进行测试。
我设置了以下设置,通过允许输入值 22、80,443 来允许 ssh、http 和 https 访问我的服务器。临时港口也被允许。
sudo iptables -t filter -F
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3000: -j ACCEPT
以下是设置列表。
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:3000:65535
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我按照上面的方法允许了,但我能够正常连接到服务器的 80 端口上的 ssh 和 apache。
但是,“curl https://google.com”命令在我的服务器上没有正确响应。
奇怪的是添加以下规则后:
sudo iptables -P INPUT ACCEPT
当我执行“curl https://google.com”时,通信正常完成。
这是什么原因,有什么解决办法呢?
最后一个 iptables 输入规则格式不正确
并添加一些日志记录,以便您有更多的故障排除信息。
您还可以使用 logwatch 和 iptables-log-parser 等日志分析器从日志中获取更多见解。
问题是您没有规则允许来自互联网的响应数据包通过。
也就是说,DNS 请求通过 UDP 端口 53 发送到互联网主机,其回复来自互联网,从 UDP 端口发送到客户端用于发出请求的随机端口。
同样,来自互联网的 TCP 数据包也会被丢弃,因为没有规则允许数据包从互联网服务器端口 443 发送到随机客户端端口。
您需要添加以下内容:
这将启用 Netfilter 连接跟踪,确保正确允许 TCP 连接/UDP 关联的 IP 数据包。