Если вы хотите, чтобы только 1 IP-адрес имел доступ к порту 22, но вы также хотите перенаправить какой-либо другой порт на локальный порт 22, вам все равно нужно открыть порт 22 для всех, поскольку INPUT
правило обрабатывается после правила nat REDIRECT
.
Одним из способов может быть:
iptables -t nat -A PREROUTING -s 1.1.1.1 --proto tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING --proto tcp --dport 22 -j REDIRECT --to-port 65535
iptables -t nat -A PREROUTING --proto tcp --dport 2222 -j REDIRECT --to-port 22
iptables -A INPUT --proto tcp --dport 22 -j ACCEPT
iptables -A INPUT --proto tcp --dport 65535 -j DROP
Поскольку таблица nat PREROUTING
обрабатывается первой, исходный адрес 1.1.1.1 для порта 22 принимается (, что означает, что NAT не выполняется ). Другие исходные адреса, пытающиеся достичь порта 22, попадут в следующее правило, перенаправляя входящие пакеты порта 22 на порт 65535 (, к сожалению, вы не можете использовать DROP
в таблице PREROUTING
nat ).
Затем подключения к порту 2222 перенаправляются на порт 22, все входящие пакеты на порт 22 принимаются, и, наконец, входящие подключения к порту 65535, которые являются «другими» подключениями к порту 22, сбрасываются.
Примечание. Я предполагаю, что у вас есть строка, подобная этой, как одно из ваших первых правил ввода.:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
В противном случае у вас может быть исходящее соединение с исходным портом 65535, и ответы на этот порт будут заблокированы. В качестве альтернативы можно добавить флаг TCP, соответствующий правилу 65535, который соответствует только пакетам SYN.Однако всегда полезно разрешать пакеты ESTABLISHED,RELATED
в начале цепочки INPUT для повышения эффективности.
Не стесняйтесь добавлять -i venet0
, если эти правила должны применяться только к пакетам, входящим на этот интерфейс.
Ваши хосты имеют IP-адреса :192.168.0.103/29, 192.168.0.102/29 и 192.168.0.101/29. Вся эта подсеть /29 содержит адреса в диапазоне 192.168.0.97 -192.168.0.102. IP-адрес 192.168.0.103/29 не является действительным IP-адресом для передачи хосту, это широковещательный IP-адрес. Кроме того, шлюз имеет IP-адрес 192.168.0.1, поэтому хосты в этой подсети не знают о нем, поскольку он находится в совершенно другой подсети.
Разбить:
Address: 192.168.0.103 11000000.10101000.00000000.01100 111
Netmask: 255.255.255.248 = 29 11111111.11111111.11111111.11111 000
Wildcard: 0.0.0.7 00000000.00000000.00000000.00000 111
=>
Network: 192.168.0.96/29 11000000.10101000.00000000.01100 000 (Class C)
Broadcast: 192.168.0.103 11000000.10101000.00000000.01100 111
HostMin: 192.168.0.97 11000000.10101000.00000000.01100 001
HostMax: 192.168.0.102 11000000.10101000.00000000.01100 110
Hosts/Net: 6 (Private Internet)
Вам необходимо изменить сетевую адресацию, чтобы IP-адреса были действительными. Вы можете использовать калькулятор подсети, такой как или .
Самым простым решением для вас было бы изменение префикса с 29 на 24, чтобы диапазон был широким и содержал все IP-адреса, которые вы уже установили для машин и шлюза.