Форум русскоязычного сообщества Ubuntu


Автор Тема: [РЕШЕНО] iptables: действие по стуку на порт  (Прочитано 876 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
а может и не iptables? читал всякие инструкции про iptables, с закрытием всего и вся понятно, а вот есть такой вопрос: нужно чтобы по входящему соединению на заданный порт выполнялось заданное действие. допустим, идет входящее с 192.168.0.100 (с ноута на сервачок) на порт 9701 - выполняется shutdown. на 9702 - eject -s /dev/sda, ну и так далее. думаю, суть ясна. под столом шуршит сервачок, к коему кроме питания и сети ничего не подтыкнуто. объяснять маме про ssh - не лучший вариант, да и самому удобней (к примеру, можно собрать очень маленький линукс, в котором ничего толком не будет кроме elinks'а с открытой страничкой а-ля веб-интерфейс - быстренько включил ноут, грузанул сие чудо и жмакнул что надо)
под это дело сваяю хтмл-страничку со ссылками, пущай стучит браузером на порты.
надеясь, суть ясна...
« Последнее редактирование: 12 Май 2010, 14:13:51 от dimas000 »
лучше на "ты"

Оффлайн xionod

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #1 : 11 Май 2010, 21:07:20 »
поищи в гугле port knocking

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2240
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #2 : 11 Май 2010, 23:02:04 »
Только не ставьте эти действия на простой стук на порт - при скане портов результат будет предсказуемым ))) Используйте последовательности.

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #3 : 12 Май 2010, 00:15:55 »
допустим, идет входящее с 192.168.0.100 (с ноута на сервачок) на порт 9701 - выполняется shutdown. на 9702 - eject -s /dev/sda, ну и так далее.
xinetd в помощь. Но я бы на твоём месте лучше поднял простенький, легковесный http сервер, а ля busybox_httpd, и накатил бы на него парочку нужных cgi скриптов на баше и html пагу с кнопками.

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #4 : 12 Май 2010, 02:07:32 »
Цитировать
поищи в гугле port knocking
почитал, ужаснулся. но убедися в правильности своей мысли: iptables пишет о событии в лог, а некий зацикленный скрипт периодически смотрит логи на предмет нужных записей.... в общем, почитав wiki.debian.org/iptables и применив фантазию, сваял себе конфигурацию. имеет место файлик с правилами для iptables /etc/ipt.watch:
*filter
-A INPUT -p tcp --dport 9701 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9701 -j REJECT
-A INPUT -p tcp --dport 9702 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9702 -j REJECT
-A INPUT -p tcp --dport 9703 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9703 -j REJECT
-A INPUT -p tcp --dport 9704 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9704 -j REJECT
-A INPUT -p tcp --dport 9705 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9705 -j REJECT
-A INPUT -p tcp --dport 9706 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9706 -j REJECT
-A INPUT -p tcp --dport 9707 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9707 -j REJECT
-A INPUT -p tcp --dport 9708 --source 192.168.0.101 -j LOG
-A INPUT -p tcp --dport 9708 -j REJECT
COMMIT
и вот такой немыслимо сложный скрипт:
#!/bin/bash
iptables-restore < /etc/ipt.watch
while true; do
str="$(dmesg | grep 'DPT=970[1-9]' | tail -n 1)"
if [ -n "$str" ] ; then
sec=`echo "$str" | grep -Eo '\[\ *[0-9]*.[0-9]{6}\]' | sed 's/\[//g;s/\.[0-9]*\]//g'`
dpt=`echo "$str" | grep -o "DPT=970[1-9]" | sed 's/DPT=//g'`
up=`cat /proc/uptime | cut -d " " -f 1 | cut -d "." -f 1`
#echo "sec: $sec; up: $up; dpt: $dpt"
if [ $[${up}-${sec}] -lt 3 ] ; then
case $dpt in
9701) /sbin/poweroff ;;
9702) /sbin/reboot ;;
9703) killall -s9 screen ; umount /dev/sda1 ;;
9704) killall -s9 screen ; eject -s /dev/sda ;;
9705) echo "null" ;;
9706) echo "null" ;;
9707) echo "null"
esac # $dpt in ...
fi # less than 3 secs ago
fi # -n $str
sleep 3
done # while trueЪ
скрипт помещается в /etc/network/if-pre-up.d
все работает, однако! действие в iptables ставится reject, а не drop, ибо если поставить дроп, браузер будет ломиться на адрес бесконечно долго, вызывая повтор прописанных действий. если у кого есть идеи лучше - готов выслушать.
Цитировать
Только не ставьте эти действия на простой стук на порт - при скане портов результат будет предсказуемым ))) Используйте последовательности.
а на кой их сканить? у машинки серый ип, извне не очень-то поломишься. а мне со стола сканить порты - зачем?
лучше на "ты"

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25960
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #5 : 12 Май 2010, 03:34:54 »
Неправильно прочитал...
Всё это решается вообще без скриптов, чистым нетфильтром.
Только я что-то ссылку посеял...
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #6 : 12 Май 2010, 11:26:04 »
Почти тоже самое, но через xinetd:

(Нажмите, чтобы показать/скрыть)

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #7 : 12 Май 2010, 13:23:52 »
Цитировать
Почти тоже самое, но через xinetd:
да, так уже лучше... и само работает в виде демона, а не через ж... while true..sleep
и сразу вопросы: задается ли конкретный ip источника, или это надо уже через иптаблес, и задается ли ответ на пакеты (drop/reject).

маленькая поправочка к моему варианту:
up=`cat /proc/uptime | cut -d " " -f 1 | cut -d "." -f 1`на
up=`cat /proc/uptime | cut -d "." -f 1`ибо глупо
лучше на "ты"

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #8 : 12 Май 2010, 13:33:25 »
и сразу вопросы: задается ли конкретный ip источника, или это надо уже через иптаблес, и задается ли ответ на пакеты (drop/reject).
Ага, фильтрация через iptables.
и задается ли ответ на пакеты (drop/reject).
Соединяется stdin/stdout процесса с сокетом.

Пользователь решил продолжить мысль 12 Май 2010, 13:38:57:
Еще есть небольшое неудобство в xinetd, с которым я столкнулся. Не возможно задать единый аргумент в значении которого есть пробелы. Т.е не сработает такой финт:

        server  = /bin/bash
        server_args = -c "ping -c1 ya.ru >/dev/null 2>&1 && echo OK || echo FAIL"

Если проще говоря, кавычки там в любом виде не прокатывают. Нужно выносить данные выражения в отдельный скрипт..
« Последнее редактирование: 12 Май 2010, 13:38:58 от Mam(O)n »

Оффлайн xionod

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #9 : 12 Май 2010, 14:07:45 »
зачем через xinetd, есть же knockd

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: iptables: действие по стуку на порт
« Ответ #10 : 12 Май 2010, 14:11:15 »
зачем через xinetd, есть же knockd
Тоже хороший вариант, только что результат выполнения команды не приплывёт в ответ.

 

Страница сгенерирована за 0.07 секунд. Запросов: 22.