我将 iptables 设置为默认删除 INPUT、OUTPUT 和 FORWARD 规则手册中的所有内容。但我需要允许通过端口 80 连接(HTTP)和端口 53 上的所有传入 TCP/UDP 请求(DNS)。我有以下设置:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT udp -- anywhere anywhere udp dpt:http
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
但是,当我尝试运行时sudo apt-get install apache2
,找到了该包,但它随后挂在实际下载该包的过程中。通过我的研究,apt-get 在大多数情况下只需要 HTTP 和 DNS 端口即可工作。我错过了什么吗?我尝试参考这个帖子但无济于事。
Err:1 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libapr1 amd64 1.5.2-3
Temporary failure resolving ‘us.archive.ubuntu.com’
Err:2 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1 amd64 1.5.4-1build1
Temporary failure resolving ‘us.archive.ubuntu.com’
0% [Connecting to us.archive.ubuntu.com]
系统信息:
经销商编号: 乌班图
描述: Ubuntu 16.04.3 LTS
发布: 16.04
代码名称: 谢尼尔
更新:解决方案不起作用
我跟着托马斯再次在下面回答,但没有成功。apt-get
仍然像上面的例子一样被困在下载中(例如apache2)(即没有变化)。这是我尝试使用的新 iptables:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http state NEW,RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:domain state NEW,RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp dpt:domain state NEW,RELATED,ESTABLISHED
我尝试了输出规则手册中的版本有和没有状态信息没有成功。
答案1
我不知道为什么你需要在 53 和 80 上打开 INPUT,但如果这是为了接收 DNS 和 HTTP 的响应,那就错了。这是通过以下行完成的:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(正如在这个答案到你提到的帖子。)
答案2
我已经通过测试系统深入研究了这一点的细节。
我能够正确配置iptables
以下规则集并apt-get
正确出站:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 state NEW,RELATED,ESTABLISHED
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 state NEW,RELATED,ESTABLISHED
这反映了您上面所述的最新配置。我能够apt-get
正常工作,并且也能够毫无问题地进行 DNS 查询。
但是,请务必注意,您的系统在将主机名解析为 IP 地址时遇到问题,并且会出现解析错误。
确保您的/etc/resolv.conf
配置正确,并且至少包含如下内容:
nameserver 8.8.8.8
nameserver 8.8.4.4
通过/etc/resolv.conf
这种方式的设置,并iptables
使用与您相同的规则集,我可以毫无问题地在面向 Internet 的系统以及我自己的可以连接到 Internet 的 LAN 子网内进行访问并获得正确的 DNS 解析来自网络内部。
对我来说,这更像是您的/etc/resolv.conf
设置不正确,并且配置错误导致您的系统无法正确配置 DNS。
答案3
大家好,在这个问题上打破了我可怜的头脑并浏览了 user147505 的回答 100 次之后,我终于弄清楚为什么它对我不起作用,这是我之前的设置:-
root@myserver:~# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:3652
2 ACCEPT udp -- anywhere anywhere udp dpt:51234
3 DROP icmp -- anywhere anywhere
4 DROP all -- anywhere anywhere
5 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere
2 ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
如您所见,上面的“ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
”规则是在删除所有流量规则“iptables -A INPUT -j DROP”之后添加的,因为这apt update
不起作用
所以最后我所做的就是像下面这样切换它们,然后一切都令人惊奇地工作:-
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:3652
2 ACCEPT udp -- anywhere anywhere udp dpt:51234
3 DROP icmp -- anywhere anywhere
4 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
5 DROP all -- anywhere anywhere
我猜我学到了一些关于 iptables 的知识,希望以后能参加一门课程来理解这个 jaba huba