The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Простой интерактивный firewall в Linux"
Отправлено auto_tips, 22-Мрт-11 10:02 
Недавно на форуме спрашивали есть ли интерактивный 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. Эта заметка ни на что не претендует, просто идея и простой набросок.


URL:
Обсуждается: https://www.opennet.ru/tips/info/2550.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру