我遇到了 iptables 问题,无法从 localhost 连接到 localhost。基本上,我希望丢弃所有传入数据包(目的地为 SSH 和端口 9000 的数据包除外)。目的地为 localhost:9000 的数据包必须具有等于端口 8000 的源端口。
够简单吗?
为什么这不适用于以下规则?请注意,这是在 Vagrant 实例 (hashicorp/precise64) 内部。
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp spt:8000 dpt:9000
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp spt:ssh state ESTABLISHED
我尝试使用以下命令:
# nc -p 8000 localhost 9000
-p 设置源端口。
什么也不做。
我也尝试过对 8000 不做源端口要求,只匹配目标端口,结果相同。
我添加如下规则:
匹配 dpt 和 spt:
iptables -A INPUT -p tcp --sport 8000 --dport 9000 -j ACCEPT
仅匹配 dpt:
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
如上所述,两者都不起作用。
将 INPUT 上的策略更改为 ACCEPT 可以使其工作,但是当我有此特定规则允许它时,为什么它不能以 DROP 作为默认策略工作?
我认为这无关紧要,但这里的用例是用于端口敲击。我知道我必须使用 /etc/knockd.conf 来实际打开和关闭端口——到目前为止,我只是在调试。如果我无法手动从命令行使其工作,它将永远无法与 knockd 一起工作。
根据要求,这里有更详细的信息:
# iptables -nvL --line-numbers
Chain INPUT (policy DROP 17 packets, 1164 bytes)
num pkts bytes target prot opt in out source destination
1 42847 1832K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 3 180 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:8000 dpt:9000
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 21 packets, 1420 bytes)
num pkts bytes target prot opt in out source destination
1 38138 3415K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22 state ESTABLISHED
# iptables -t nat -nvL --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
答案1
您可以在这里找到答案:
iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT