ubuntu iptables 不阻止 wget

ubuntu iptables 不阻止 wget

请帮助我理解我做错了什么iptables在 ubuntu 14.04 上。

iptables -F
ip6tables -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# allows the outgoing traffic of established connections, necessary if the OUTPUT policy is not set to ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP

iptables-nvL

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
10574   17M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    2    88 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  260 14124 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
10317  623K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate NEW,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

在上面我尝试阻止除 ssh 之外的所有内容。因此,我预计 wget 将无法下载任何内容,但它可以工作,而 apt-get update 则不起作用(如预期)。请解释一下如何阻止所有(传入/传出),或者如果此配置没问题,为什么 wget 仍然有效?

编辑:我还尝试将 2 行更改为 1 行,但这没有帮助。

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

结果:wget 正在工作,apt-get 更新没有。有人可以澄清为什么吗?谢谢。

答案1

让我们逐块查看您的规则和要求。您有一个默认策略,DROP因此您不需要最终规则。 (不过,这并不是一个坏主意。)

我尝试阻止除 ssh 之外的所有内容。所以,我预计将wget无法下载任何内容,但它可以工作,也apt-get update可以不工作(如预期)

输入规则:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

也就是说,与传出连接相关的任何流量都将被允许。任何入站到 tcp/22(即ssh)的内容也是被允许的。其他一切都应该被放弃。请注意,这里没有任何东西会阻止您的外出wgetapt-get update请求。

输出规则:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP

这意味着与先前允许的入站连接相关的任何流量都将被允许。任何出站到目标 tcp/22(即ssh)的内容也是被允许的。最后,其他一切都应该被放弃。

观察结果:

出站部分中没有任何内容允许您wgetapt-get update请求。因此,如果wget有效,请提供您正在使用的示例命令以及set | grep _proxy. (您可能会看到一个或多个定义,例如http_proxy,它为每个相应的协议定义了一个代理。)


顺便说一句,建议的做法iptables是允许所有环回流量,您可以使用以下两个命令来执行此操作:

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT

相关内容