如何配置 iptables 以在服务器中使用 apt-get?

如何配置 iptables 以在服务器中使用 apt-get?

我开始使用 iptables(新手)来保护 Linux 服务器(特别是 Debian 5.0)。在配置 iptables 设置之前,我可以毫无问题地使用 apt-get。但是在配置 iptables 之后,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

然后它就停止了。我需要配置哪些规则才能让它正常工作。

谢谢

附录:

经过几次尝试,我发现问题出在 INPUT 策略上,而不是 OUTPUT 策略上,如果将 $IPT -P OUTPUT 修改为 $IPT -P OUTPUT ACCEPT,问题仍然存在。但如果我将 $IPT -P INPUT 更改为 $IPT -P INPUT ACCEPT,它就会开始工作。

答案1

您需要允许第一个数据包打开 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

答案2

为了解决这个问题,你需要在 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

答案3

可能Apt无法使用 DNS 解析主机名。请尝试在规则集的 DNS 部分添加此行:

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

答案4

Apt 通常使用老式的 80 端口,但您应该检查 apt.conf 以查看其设置,因为它可以使用多个端口中的任何一个。还请检查 /etc/apt/sources.list

相关内容