脚本允许流量到端口 53、22、443、80 并删除其他端口,但我无法运行 apt-get update

脚本允许流量到端口 53、22、443、80 并删除其他端口,但我无法运行 apt-get update

我正在编写一个脚本来删除除那些端口(53、22、80、443)上的流量之外的所有输入和输出流量,但我无法进行 apt-get 更新。

#!/bin/sh    
# Flushing all rules
iptables -F
iptables -X

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Allow incoming SSH
iptables -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# Allow outgoing SSH
iptables -A OUTPUT -o ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# Allow incoming HTTP
iptables -A INPUT -i ens33 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# Allow outgoing HTTP
iptables -A OUTPUT -o ens33 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT

# Allow incoming HTTPS
iptables -A INPUT -i ens33 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

# Allow outgoing HTTPS
iptables -A OUTPUT -o ens33 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --dport 443 -m state --state ESTABLISHED -j ACCEPT

# Allow incoming DNS
iptables -A INPUT -i ens33 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT

答案1

过滤输出(本地发起的)数据包不是一种常见的做法,如果您不确定自己在做什么,最好不要这样做。

为了允许传出的 DNS(DNS 解析所需),您应该接受将新状态数据包发送到 OUTPUT 链中的 53 端口。

iptables -A OUTPUT -p tcp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

另外,在您的情况下,您需要一些其他规则(以及 OUTPUT 链中对应的镜像规则):

  • 允许本地连接(iptables -I INPUT -i lo -j ACCEPT

  • 允许相关连接(添加到匹配RELATED--state),它也允许回复的 ICMP 数据包。

  • 允许 ICMP。

还要检查 ipv6 规则集(使用iptables6命令)。

相关文档:iptables教程。

相关内容