Назад | Перейти на главную страницу

Как запретить все порты на localhost, с localhost, кроме одного, с помощью iptables?

У меня проблема с 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         

Ответ можно найти здесь:

https://superuser.com/questions/808496/difference-between-iptables-default-policy-to-drop-and-inserting-a-seperate-po

iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT