我是 IPtables 新手,但我正在尝试设置一个安全服务器来托管网站并允许 SSH。这是我目前所做的:
#!/bin/sh
i=/sbin/iptables
# Flush all rules
$i -F
$i -X
# Setup default filter policy
$i -P INPUT DROP
$i -P OUTPUT DROP
$i -P FORWARD DROP
# Respond to ping requests
$i -A INPUT -p icmp --icmp-type any -j ACCEPT
# Force SYN checks
$i -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# Drop all fragments
$i -A INPUT -f -j DROP
# Drop XMAS packets
$i -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Drop NULL packets
$i -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Stateful inspection
$i -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
# Allow established connections
$i -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow unlimited traffic on loopback
$i -A INPUT -i lo -j ACCEPT
$i -A OUTPUT -o lo -j ACCEPT
# Open nginx
$i -A INPUT -p tcp --dport 443 -j ACCEPT
$i -A INPUT -p tcp --dport 80 -j ACCEPT
# Open SSH
$i -A INPUT -p tcp --dport 22 -j ACCEPT
但是我已锁定传出连接,这意味着我无法解析任何 DNS。我该如何允许这种情况发生?此外,如果有任何其他反馈,我们将不胜感激。
詹姆士
答案1
DNS 连接通过 UDP 协议与端口 53 上的远程主机建立,如果答案对于 UDP 数据报来说太大,则回退到 TCP。
您应该允许目标端口为 UDP:53 或 TCP:53 的传出连接。