我使用 iptables-persistent 来设置防火墙规则。
这是我的标准配置:
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp --dport 2123 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
COMMIT
问题是我无法从 debian 服务器下载软件包并 ping 本地和外部 IP 地址。
INPUT 仅适用于“传入”连接,这是正确的吗?
以下是 IPv6 的规则:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT
答案1
您遇到的问题是您不允许任何传入数据包。因此,如果您尝试联系外部服务器,那么您将无法收到回复!
通常,这可以通过“既定”规则来处理
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这里的想法是,与传出连接匹配的传入数据包将被允许返回。
现在与默认丢弃对于输入链,您可能会看到其他问题(例如 ICMP 数据包),因此您可能还需要根据您的要求允许它们进入。
答案2
问题解决了。
新的固定规则:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A FORWARD -o lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 2123 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
COMMIT
答案3
如果您想更好地控制 iptables,请使用 conntrack“--ctstate”模块。它比“--state”更好、更新
例如:
iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate ESTABLISHED -j ACCEPT