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

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

0% [Connecting to archive.ubuntu.com] 

……停了下来 我需要输入CTRL-C才能搬出去。 我正在使用Ubuntu Server 10.04 LTS(Lucid Lynx)。

由于我的iptables规则,这种情况正在发生。 如果我将iptables恢复为默认值(通过删除规则并将策略设置为ACCEPT),则aptitude将按预期工作。 没有错误了。

但是,嘿,我想使用我的iptables规则……我只需要知道:我需要保持开放才能使其正常工作?

我的规则很简单。 OUTPUT策略是ACCEPT。 FORWARD政策是ACCEPT。 我没有OUTPUT和FORWARD的规则。 INPUT策略是DROP。 所以,问题在于INPUT链! 我有11个INPUT规则来打开我需要运行FTP,SSH,HTTP等服务的特定TCP端口。接受ICMP(ping)的其他规则,以及接受所有localhost输入的其他规则。 这就是全部:

 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使它工作,但我不想接受一切。 我想只打开才能完成工作所需要的东西。

对我来说听起来很奇怪INPUT链是问题……但事实确实如此。

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

谢谢!

当您向其他服务器发送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消息,那就不好了,所以在/etc/rsyslog.d/iptables.conf中为rsyslog创建一个filter,其中包含:

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

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