我需要向 iptables 添加哪些 INPUT 规则以便 apt(apt-get、aptitude)可以工作(更新、升级、搜索、安装)?

我需要向 iptables 添加哪些 INPUT 规则以便 apt(apt-get、aptitude)可以工作(更新、升级、搜索、安装)?

我需要使用 aptitude 来更新和安装软件,但失败了。它说...

0% [Connecting to archive.ubuntu.com]

...然后停止。我需要输入内容CTRL-C才能退出。我正在使用 Ubuntu Server 10.04 LTS (Lucid Lynx)。

发生这种情况是因为我的iptables规则。如果我恢复iptables恢复其默认设置(通过删除规则并将策略设置为“接受”),然后资质按预期工作。不再有错误。

但是,嘿,我想用我的iptables规则......我只需要知道:我到底需要保持什么开放才能易于工作?

我的规则很简单。OUTPUT 策略是 ACCEPT。FORWARD 策略是 ACCEPT。我没有 OUTPUT 和 FORWARD 的规则。INPUT 策略是 DROP。所以,问题出在输入链!我有 11 条 INPUT 规则来打开运行 FTP、SSH、HTTP 等服务所需的特定 TCP 端口。一条附加规则用于接受 ICMP(ping),另一条规则用于接受所有本地主机输入。这就是全部:

iptables -F
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -A INPUT -p tcp --dport 1008 -j ACCEPT
iptables -A INPUT -p tcp --dport 2812 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
iptables -P INPUT DROP

我尝试了很多规则试图让资质工作。当然,简单就iptables -P INPUT ACCEPT 可以让它工作,但我不想接受一切。我只想打开 aptitude 完成其工作所需的内容。

INPUT 链是个问题,这听起来很奇怪......但事实确实如此。

另一个问题是我无法访问 iptables 日志...我刚刚发现我正在使用的内核中有一个错误(请参阅https://serverfault.com/questions/159818/iptables-logging-not-working)...所以,不要问我日志内容,因为我无法获得它们。

谢谢你!

答案1

当您向另一台服务器发送 HTTP 请求时,您使用的是 TCP。首先,SYN 数据包从随机高端口发送到另一台服务器,然后您将收到 ACK 响应。最后,您向服务器发送 SYN/ACK,服务器会使用请求的文档(以多个数据包的形式)进行响应。您的规则不允许接收 ACK 数据包,因此无法建立连接。添加如下规则:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

您无法免费获得 iptables 日志。您的规则应如下所示:

# if no rule matched, the input should be dropped
-P INPUT DROP

-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# etc

# the limit prevents your logs from being flooded if there are a lot packets being captured
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied" --log-level debug

请注意,我iptables在命令前省略了,我建议使用iptables-restore(或iptables-apply进行测试),以避免在规则应用失败时将自己锁定。要传递给命令的文件如下所示:

*FILTER
# your rules here, for example:
-P INPUT DROP
-P INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT

COMMIT行后必须有一个换行符。

默认情况下,条目转到/var/log/kern.log。如果您想区分内核和 iptables 消息,那么这样做并不好,因此请为 rsyslog 创建一个/etc/rsyslog.d/iptables.conf包含以下内容的过滤器:

:msg,contains,"iptables denied" /var/log/iptables.log
& ~

这将过滤 iptables 错误并将其发送至/var/log/iptables.log

答案2

在 Ubuntu 18 中,apt 更新直到我允许环回(使用)才起作用-i lo ACCEPT。因此,我的“安全规则”列表是

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

相关内容