J. *_*uni 3 server aptitude iptables apt
我需要使用 aptitude 来更新和安装软件,但它失败了。它说...
0% [Connecting to archive.ubuntu.com]
Run Code Online (Sandbox Code Playgroud)
……然后停下来。我需要打字CTRL-C才能搬出去。我使用的是 Ubuntu Server 10.04 LTS(Lucid Lynx)。
这是由于我的iptables规则而发生的。如果我将iptables恢复为其默认值(通过删除规则并将策略设置为 ACCEPT),则aptitude 会按预期工作。没有错误了。
但是,嘿,我想使用我的iptables规则......我只需要知道:我到底需要保持什么开放才能使apt工作?
我的规则很简单。输出策略是接受。转发政策是接受。我没有关于 OUTPUT 和 FORWARD 的规则。INPUT 策略是 DROP。所以,问题出在INPUT链上!我有 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
Run Code Online (Sandbox Code Playgroud)
我尝试了很多规则,试图让能力发挥作用。当然一个简单的iptables -P INPUT ACCEPT 使它起作用,但我不想接受一切。我只想打开 aptitude 完成其工作所需的内容。
对我来说,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
Run Code Online (Sandbox Code Playgroud)
您不会免费获得 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
Run Code Online (Sandbox Code Playgroud)
请注意,我iptables在命令之前省略了,我建议使用iptables-restore(或iptables-apply用于测试)以避免在规则不适用时将自己锁定。要传递给命令的文件如下所示:
*FILTER
# your rules here, for example:
-P INPUT DROP
-P INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT
Run Code Online (Sandbox Code Playgroud)
该行后的COMMIT换行符是强制性的。
默认情况下,条目转到/var/log/kern.log。如果您想区分内核和 iptables 消息,那就不好了,因此为 rsyslog 创建一个过滤器,/etc/rsyslog.d/iptables.conf其中包含:
:msg,contains,"iptables denied" /var/log/iptables.log
& ~
Run Code Online (Sandbox Code Playgroud)
这将过滤 iptables 错误并将它们发送到/var/log/iptables.log.
| 归档时间: |
|
| 查看次数: |
7600 次 |
| 最近记录: |