У меня проблема с iptables, когда я не могу подключиться к localhost с localhost. По сути, я хочу, чтобы все входящие пакеты, кроме тех, для которых был назначен SSH и порт 9000, отбрасывались. Пакеты с местом назначения для localhost: 9000 должны иметь порт источника, равный порту 8000.
Достаточно просто?
Почему это не работает при следующих правилах? Обратите внимание, что это внутри экземпляра Vagrant (hashicorp / точный64).
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
Ответ можно найти здесь:
iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT