如何configurationiptables在服务器中使用apt-get?

我开始使用iptables(新手)保护Linux服务器(特别是Debian 5.0)。 在configurationiptables设置之前,我可以使用apt-get而不会出现问题。 但是在configurationiptables之后,apt-get停止工作。 例如我在iptables中使用这个脚本:

#!/bin/sh IPT=/sbin/iptables ## FLUSH $IPT -F $IPT -X $IPT -t nat -F $IPT -t nat -X $IPT -t mangle -F $IPT -t mangle -X $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A INPUT -p tcp --dport 22 -j ACCEPT $IPT -A OUTPUT -p tcp --sport 22 -j ACCEPT $IPT -A INPUT -p tcp --dport 80 -j ACCEPT $IPT -A OUTPUT -p tcp --sport 80 -j ACCEPT $IPT -A INPUT -p tcp --dport 443 -j ACCEPT $IPT -A OUTPUT -p tcp --sport 443 -j ACCEPT # Allow FTP connections @ port 21 $IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT # Allow Active FTP Connections $IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT # Allow Passive FTP Connections $IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT #DNS $IPT -A OUTPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT $IPT -A INPUT -p tcp --dport 1:1024 $IPT -A INPUT -p udp --dport 1:1024 $IPT -A INPUT -p tcp --dport 3306 -j DROP $IPT -A INPUT -p tcp --dport 10000 -j DROP $IPT -A INPUT -p udp --dport 10000 -j DROP 

那么当我运行apt-get我得到:

 core:~# apt-get update 0% [Connecting to ftp.us.debian.org] [Connecting to security.debian.org] [Conne 

它摊位。 我需要configuration什么规则才能使其工作。

谢谢

附录:

经过一番尝试之后,我发现问题出在INPUT策略中,而不是在OUTPUT策略中,如果将$ IPT -P OUTPUT修改为$ IPT -P OUTPUT ACCEPT,问题仍然存在。 但是,如果我将$ IPT -P INPUT更改为$ IPT -P INPUT ACCEPT,则开始工作。

您需要允许第一个数据包打开一个HTTP连接OUT,然后允许回答。

尝试:

 $IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT $IPT -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 

要解决这个问题,你需要在IPT中添加下一条规则:

 # Apt-Get without problem $IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 

也许Apt无法使用DNSparsing主机名。 尝试在规则集的DNS部分中添加以下行:

$IPT -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT

两个端口对于默认Debian安装来获取更新是必需的:

  • HTTP(tcp端口80)
  • DNS(udp端口53)

带-m状态的解决scheme:

 $IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp --sport 80 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p udp --dport 53 --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p udp --sport 53 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT 

或用-m conntrack:

 $IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp --sport 80 --dport 32768:61000 -m conntrack --ctstate ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p udp --dport 53 --sport 32768:61000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p udp --sport 53 --dport 32768:61000 -m conntrack --ctstate ESTABLISHED -j ACCEPT 

Apt通常使用旧的80端口,但是您应该检查apt.conf来查看它是如何设置的,因为它可以使用任何一个。 另外检查/etc/apt/sources.list

我相信你会需要一个输出规则,允许高端源端口。 当apt连接到http时,Linux会给它一个随机的高源端口(比/proc/sys/net/ipv4/ip_local_port_range )。 (可能不是随机的,不记得)。 ftp也有被动和主动模式,在这种情况下,我会在你的sources.list中推荐http源代码。

所以如果你把源代码改为http,并为所有的临时端口设置输出规则。 你会一切安排。 如果你使用ftp,你需要找出它是主动还是被动,然后相应地添加规则。 请参阅此链接了解主动/被动模式的解释。 我看到你有目前列出的那些,但他们似乎是从一个服务器,而不是客户端的angular度来看。 随着你是客户。

所以对于http源端口:

 $ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 $IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT 

最后,您可以将丢弃的数据包logging为一般的iptables故障排除工具。 看到这个链接 。

使用DROP作为OUTPUT链的默认策略听起来有些过分。

我build议将默认的OUTPUT策略更改为ACCEPT,然后监视stream量并根据需要过滤特定的端口。 否则,跟踪所有传出的连接并让每个连接都通过防火墙是太麻烦了。

毕竟,诀窍是不要让任何人进来,不要让他们不要出门。

我知道这可能是晚了一点,但这个线程不断在我的谷歌search,所以我发布什么对我有用:

 iptables -A OUTPUT -p tcp --dport 80 --sport 32786:61000 -j ACCEPT iptables -A INPUT -p tcp --dport 80 --sport 32786:61000 -j ACCEPT iptables -A OUTPUT -p tcp --dport 32786:61000 --sport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 32786:61000 --sport 80 -j ACCEPT 

我有问题。 我正在使用CSF,并configuration了具有BR值的cc_allow_filter密钥,认为这是用于SSH的,在阅读文档后,我发现这是针对服务器中的所有连接。 我的封锁是因为我使用apt-get的镜子来自另一个国家,而CSF被封锁。 去除国家后阻止一切明星再次正常工作。

我想我解决了这个问题。

$ IPT -A INPUT –sport 80 -j ACCEPT和apt正常工作