The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Простой интерактивный firewall в Linux
Недавно на форуме спрашивали есть ли интерактивный firewall в Linux и многие
отвечали, что нет. Ниже  простая заготовка скрипта, следящего за событиями в
логе, в случае подозрительной активности выводящего пользователю окно с
предложением блокирования трафика или игнорирования предупреждения.

1. Первоначальные настройки iptables:

   #iptables-save
   # Generated by iptables-save v1.4.7 on Fri Mar 11 15:15:29 2011
   *filter
   :INPUT DROP [137:16764]
   :FORWARD DROP [0:0]
   :OUTPUT DROP [10:708]
   -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
   -A INPUT -j LOG --log-prefix "firewall-INPUT "
   -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
   -A FORWARD -j LOG --log-prefix "firewall-FORWARD "
   -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
   -A OUTPUT -j LOG --log-prefix "firewall-OUTPUT "
   COMMIT
   # Completed on Fri Mar 11 15:15:29 2011
   # Generated by iptables-save v1.4.7 on Fri Mar 11 15:15:29 2011
   *nat
   :PREROUTING ACCEPT [48:6290]
   :POSTROUTING ACCEPT [0:0]
   :OUTPUT ACCEPT [6:396]
   COMMIT
   # Completed on Fri Mar 11 15:15:29 2011

Правила по умолчанию в цепочках можно изменить на ваш вкус.
Основной сценарий будем запускать от рядового пользователя, поэтому
ему требуется право на чтение /var/log/syslog (или куда у Вас попадает журнал netfilter).

Также пользователю требуется право заполнять правила netfilter командой
iptables. У меня это сделано через /etc/sudoers

2. Основной сценарий обработки журнала netfilter:

interactive-firewall.sh

   while read line
   do
      echo $line | grep firewall > /dev/null 2>&1
      [ $? != 0 ] && continue
      for item in $line
      do
        case $item in
          firewall-*) CHAIN=$item;;
          PROTO=*) PROTO=$item;;
          SRC=*) SRC=$item;;
          SPT=*) SPT=$item;;
          DST=*) DST=$item;;
          DPT=*) DPT=$item;;
        esac
      done
      CHAIN=${CHAIN#firewall-}
      PROTO=${PROTO#PROTO=}
      PROTO=${PROTO,,}
      SRC=${SRC#SRC=}
      SPT=${SPT#SPT=}
      DST=${DST#DST=}
      DPT=${DPT#DPT=}
      ACTION=`LANG=C xmessage -buttons ACCEPT,DROP,SKIP -default SKIP    -timeout 15 -print "$SRC => $DST:$DPT"`
      ACTION=${ACTION:-"SKIP"}
      case $ACTION in
        SKIP) continue;;
        ACCEPT) sudo iptables -I $CHAIN 2 -s $SRC -d $DST -p $PROTO   --dport $DPT -j ACCEPT;;
        DROP) sudo iptables -I $CHAIN 2 -s $SRC -d $DST -p $PROTO --dport $DPT -j DROP;;
      esac
      sleep 1

3. Запускаем firewall

   tail -f /var/log/syslog | ./interactive-firewall.sh

4. Что можно улучшить.

В этом варианте правила имеют вид SRC => DST:PORT -j ACTION. Исходный порт
соединения понятно пропускается. Хорошо бы предоставлять выбор пользователю из
нескольких вариантов, но xmessage для этого маловато. Может у кого есть
предложения чем рисовать вопрос пользователю и обрабатывать его выбор?

По желанию сценарий можно доработать и отображать в xmessage не голые цифры, а
расшифровать их в имена компьютеров командой host, а протоколы по
/etc/services. Кроме модификации сценария потребуется так же разрешить
первоначально DNS трафик resolver'а в первоначальной конфигурации netfilter.

5. Эта заметка ни на что не претендует, просто идея и простой набросок.
 
21.03.2011 , Автор: tux2002
Ключи: interactive, firewall, linux, iptables, log / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетные фильтры в Linux: iptables, ipchains

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.2, zomg, 10:13, 22/03/2011 [ответить] [смотреть все]
  • +/
    PROTO=${PROTO,,}   <-- эта конструкция сработает только в bash4. Просто для информации =)
     
     
  • 2.20, botman, 13:59, 28/03/2011 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    В Debian stable идёт Bash 4.1, поэтому - не существенно
     
     
  • 3.21, achekalin, 13:23, 30/03/2011 [^] [ответить] [смотреть все]
  • +/
    А где-то в статье указан Дебиан? :)
     
  • 1.3, non anon, 10:20, 22/03/2011 [ответить] [смотреть все]
  • +/
    Use rsyslog, и tail -f не понадобится.
     
     
  • 2.4, non anon, 10:21, 22/03/2011 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    Правда, придется еще для xmessage ставить DISPLAY и, возможно, разрешить доступ ... весь текст скрыт [показать] [показать ветку]
     
  • 1.5, redixin, 11:20, 22/03/2011 [ответить] [смотреть все]  
  • +/
    Ога, только действительно интерактивный фаервол держит пакет пока пользователь не скажет пропускать его или нет. А этот сначала дропнет, а потом спросит "а может нужно было пропустить?"
     
     
  • 2.8, non anon, 14:40, 22/03/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Грамотный сишный прогер за полчаса напишет юзерспейсный демон, который получает ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.12, pavlinux, 20:40, 23/03/2011 [^] [ответить] [смотреть все]  
  • +/
    Чёй-то до сих пор не вижу аналога Cisco ASDM... весь текст скрыт [показать]
     
     
  • 4.19, анон, 21:07, 27/03/2011 [^] [ответить] [смотреть все]  
  • +/
    Наверное, потому что оно в линаксе нафиг никому не сдалось ... весь текст скрыт [показать]
     
     
  • 5.22, achekalin, 14:29, 30/03/2011 [^] [ответить] [смотреть все]  
  • +/
    Нет, потому что производительность труда грамотного сишного прогера часто преу... весь текст скрыт [показать]
     
  • 1.6, ананим, 11:21, 22/03/2011 [ответить] [смотреть все]  
  • +/
    >5. Эта заметка ни на что не претендует, просто идея и простой набросок.

    плюс за инициативу и ещё одно доказательство что в линухе при желании можно всё, но наверное лучше уж вот сюда усилия приложить -
    https://fedoraproject.org/wiki/FirewallD/

     
     
  • 2.9, non anon, 15:12, 22/03/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Интересная хренюшка Правда, раздел why написан безграмотно перечисленные там... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.10, ананим, 15:46, 23/03/2011 [^] [ответить] [смотреть все]  
  • +/
    меня больше интересует использование dbus, который становится по настоящему сист... весь текст скрыт [показать]
     
  • 1.7, ymkin, 11:36, 22/03/2011 [ответить] [смотреть все]  
  • +/
    zenity - GTK-диалоги
    kdialog - QT-диалоги
    dialog - ncurses

    http://www.ashep.org/2011/10-poleznyx-utilit-dlya-ispolzovaniya-v-scenariyax/
    [Статьи за неделю не попавшие в ленту новостей (выпуск 144)]

     
  • 1.11, balex, 17:36, 23/03/2011 [ответить] [смотреть все]  
  • +/
    xdialog -X11 диалоги. Во многом по синтаксису совместима с dialog
    Ну и естественно нужна логика определения, что из этого есть в текущем окружении
     
  • 1.13, opasnoste, 19:36, 24/03/2011 [ответить] [смотреть все]  
  • +/
    http://code.google.com/p/yad/ - Мощный диалог
     
  • 1.14, o0Dante0o, 13:28, 26/03/2011 [ответить] [смотреть все]  
  • +/
    Хм. Спасибо, попробую, отпишусь о результатах :)
     
  • 1.15, light, 21:08, 26/03/2011 [ответить] [смотреть все]  
  • +/
    Можно использовать libnotify
    не знаю как в других, а в дебианах примерно так -
    sudo aptitude install libnotify-bin
    notify-send "Ахтунг, тебя похакали!"
     
  • 1.16, light, 21:09, 26/03/2011 [ответить] [смотреть все]  
  • +/
    ну или в случае если есть только иксы - есть приблуда wish

    echo 'button .b -text "Включи скайп" ; pack .b ' | wish

     
  • 1.23, ttt, 09:04, 02/04/2011 [ответить] [смотреть все]  
  • +/
    Вроде давно уже есть...
    http://wiki.mandriva.com/en/Projects/Interactive_Firewall
     
  • 1.24, light, 23:01, 02/04/2011 [ответить] [смотреть все]  
  • +/
    даже под мандриву работает только после патча ядра
    а по ссылке даже картинки похерились )

    здесь же под любой линух, зачетная статья вобщем

     
  • 1.25, alex320388, 10:40, 04/04/2011 [ответить] [смотреть все]  
  • +/
    есть Vuurmuur, он нагляднее
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor