LINUX.ORG.RU
решено ФорумAdmin

iptables REDIRECT на закрытый извне порт

 


0

1

Добрый вечер.

Есть один компьютер. У него на 2222 (TCP) порту висит Kippo (SSH honeypot).

Что нужно:

1. Трафик, идущий на порт 22, перенаправлять на порт 2222 (на котором висит Kippo)

2. При этом 2222 порт должен быть недоступен извне

Допустим изначально все цепочки iptables чисты и их default policy установлен в ACCEPT.

Делаем:

iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222

Работает. Но если сделать так:

iptables -A INPUT -p tcp --dport 2222 -j DROP

Перестает работать. Почему так происходит и какие существуют варианты решения проблемы?

★★★★★

Последнее исправление: edigaryev (всего исправлений: 1)

iptables, видимо, «перебрасывает» клиента на 2222 порт, но он в то же время закрыт. Можете попробовать создать алиас для сетевого интерфейса с каким-нибудь внутренним IP-адресом, и DNAT в помощь.

pztrn ★★★★
()
Ответ на: комментарий от pztrn

«перебрасывает» клиента на 2222 порт, но он в то же время закрыт

Со стороны клиента все происходит прозрачно:

# tcpdump -n -i eth0 'host 2.2.2.2 and (port 22 or port 2222)'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:53:40.041098 IP 1.1.1.1.35450 > 2.2.2.2.22: Flags [S], seq 864812211, win 14600, options [mss 1460,sackOK,TS val 13529806 ecr 0,nop,wscale 7], length 0
19:53:40.042943 IP 2.2.2.2.22 > 1.1.1.1.35450: Flags [S.], seq 3171451322, ack 864812212, win 5792, options [mss 1460,sackOK,TS val 2102519 ecr 13529806,nop,wscale 6], length 0
19:53:40.042999 IP 1.1.1.1.35450 > 2.2.2.2.22: Flags [.], ack 1, win 115, options [nop,nop,TS val 13529808 ecr 2102519], length 0
19:53:40.045201 IP 2.2.2.2.22 > 1.1.1.1.35450: Flags [P.], seq 1:33, ack 1, win 91, options [nop,nop,TS val 2102520 ecr 13529808], length 32
19:53:40.045249 IP 1.1.1.1.35450 > 2.2.2.2.22: Flags [.], ack 33, win 115, options [nop,nop,TS val 13529810 ecr 2102520], length 0
19:54:26.504946 IP 1.1.1.1.35450 > 2.2.2.2.22: Flags [F.], seq 1, ack 33, win 115, options [nop,nop,TS val 13576270 ecr 2102520], length 0
19:54:26.506282 IP 2.2.2.2.22 > 1.1.1.1.35450: Flags [F.], seq 33, ack 2, win 91, options [nop,nop,TS val 2114134 ecr 13576270], length 0
19:54:26.506347 IP 1.1.1.1.35450 > 2.2.2.2.22: Flags [.], ack 34, win 115, options [nop,nop,TS val 13576272 ecr 2114134], length 0
edigaryev ★★★★★
() автор топика
Ответ на: комментарий от pyatak123

Похоже что вам port-knock подойдет.

Казалось бы, при чем здесь port knocking? Мне не нужно динамически открывать порты.

edigaryev ★★★★★
() автор топика
Ответ на: комментарий от edigaryev

Мне не нужно динамически открывать порты.

port-knock

Порты

Динамически

Ну стукнулся тебе кто то на 22 порт ты открыл для него 2222, поверх твоих настроек. ?!

pyatak123
()
Ответ на: комментарий от pyatak123

Ну стукнулся тебе кто то на 22 порт ты открыл для него 2222, поверх твоих настроек. ?!

2. При этом 2222 порт должен быть недоступен извне

Впринципе с задачей справляется redir, но было бы здорово решить эту проблему без подобных костылей.

edigaryev ★★★★★
() автор топика
Ответ на: комментарий от edigaryev

Почему костыль то, 2222 порт закрыт будет, откроется от только для ТОГО кто пришел на 22 порт. Или я чего то не понимаю?

pyatak123
()
Ответ на: комментарий от pyatak123

Тот, кто придет на 22 порт не должен знать о том, что на 2222 порту висит тот же самый сервис.

Почему костыль то

Это я про redir.

edigaryev ★★★★★
() автор топика
Последнее исправление: edigaryev (всего исправлений: 1)
Ответ на: комментарий от edigaryev

Дык прозрачно ж для него это будет, тот же редирект который у вас выше написан сработает, только предварительно для клиента откроется 2222 порт.

pyatak123
()
Ответ на: комментарий от edigaryev

Если бы все так просто было. Если порт 2222 закрыт, то хоть обредиректитесь - для клиента порт будет закрыт. Port knocking вам вполне подойдет.

pztrn ★★★★
()

хотя в -t nat не рекомендуют фильтровать, но все же

iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222

anonymous
()
Ответ на: комментарий от mky

Дропайте пакеты на 2222 порт в mangle PREROUTING.

Спасибо, неплохой хак.

edigaryev ★★★★★
() автор топика

а по-моему, всё правильно:

1. Пакет пришел, в таблице nat цепочки PREROUTING перенаправился на порт 2222, пошел дальше;

2. Пакет дошел до таблицы filter цепочки INPUT, и сработало правило DROP

Верно mky говорит, там дропай

leader32
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.