The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Интерактивный firewall в Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Интерактивный firewall в Linux"  +1 +/
Сообщение от auto_tips (??) on 13-Янв-12, 02:56 
Linux обладает отличными средствами фильтрации сетевого трафика, но обычно в нём строят статический firewall. В данной статье я опишу идею и реализацию интерактивного firewall, который в случае подозрительной активности выводит пользователю окно с предложением блокирования трафика или игнорирования предупреждения.

Рассмотрим следующую заготовку firewall, которую в дальнейшем можно обучать интерактивно:


   cat slackwall.initstate
   # Generated by iptables-save v1.4.10 on Sat Dec  3 21:42:46 2011
   *filter
   :INPUT ACCEPT [0:0]
   :FORWARD ACCEPT [0:0]
   :OUTPUT ACCEPT [0:0]
   :FIREWALL-INPUT - [0:0]
   :FIREWALL-FORWARD - [0:0]
   :FIREWALL-OUTPUT - [0:0]
   -A INPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable
   -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
   -A INPUT -p icmp -j ACCEPT
   -A INPUT -j FIREWALL-INPUTFIREWALL-INPUT
   -A INPUT -j LOG --log-prefix "FIREWALL-INPUT "
   -A INPUT -j REJECT --reject-with icmp-port-unreachable
   -A FORWARD -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable
   -A FORWARD -p icmp -j ACCEPT
   -A FORWARD -p udp -m udp --dport 53 -j ACCEPT
   -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
   -A FORWARD -j FIREWALL-FORWARD
   -A FORWARD -j LOG --log-prefix "FIREWALL-FORWARD "
   -A FORWARD -j REJECT --reject-with icmp-port-unreachable
   -A OUTPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable
   -A OUTPUT -p icmp -j ACCEPT
   -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
   -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
   -A OUTPUT -j FIREWALL-OUTPUT
   -A OUTPUT -j LOG --log-prefix "FIREWALL-OUTPUT "
   -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
   COMMIT
   # Completed on Sat Dec  3 21:42:46 2011

В трёх основных цепочках мы сначала запрещаем обрывки соединений, потом разрешаем уже установленные соединения, DNS и ICMP трафик.
Далее пакеты перенаправляются в одну из трёх обучаемых цепочек:

   FIREWALL-INPUT
   FIREWALL-OUTPUT
   FIREWALL-FORWARD

откуда пакеты, для которых не нашлось правила возвращаются в одну из основных цепочек и ЛОГИРУЮТСЯ а затем отклоняются ПО УМОЛЧАНИЮ.
В цепочке FIREWALL-OUTPUT для персонального firewall лучше держать только одно разрешающее правило для всего трафика, иначе обучение становится трудоёмким.

Таким образом пакет в обучаемой цепочке шлибо обрабатывается с соответствующим решением, либо попадает в LOG firewall`а и отклоняется.

То есть строки о "необученных пакетах" можно регулярно считывать, парсить, предлагать решение пользователю и вносить новые правила в обучаемые цепочки.

Например если есть некий shell сценарий обработки SYSLOG, можно выполнить от рута:

   tail -n 1 -f /var/log/syslog | ./slackwall
  
В данном примере обработчик - скрипт slackwall. Вот его текст:

   #!/bin/sh
   while read string
   do
      echo $string | grep FIREWALL > /dev/null || continue
      for token in $string
      do
          echo $token | grep "=" > /dev/null  && export $token
          echo $token | grep "FIREWALL" > /dev/null && export CHAIN=$token
      done

      [ -z "$IN" ] && unset SRC

      [ -z "$OUT" ] && unset DST

      HSRC=`host $SRC 2>/dev/null | grep "domain name pointer" | awk '{ print $5 }'`
      HDST=`host $DST 2>/dev/null | grep "domain name pointer" | awk '{ print $5 }'`
      echo $PROTO | grep "^[[:digit:]]*$" > /dev/null && unset DPT
      PROTO=`cat /etc/protocols | grep "[[:space:]]$PROTO[[:space:]]" | awk '{ print $1 }'`
      HPROTO=`cat /etc/services | grep -i "[[:space:]]$DPT/$PROTO"`
      HSRC=${HSRC:-$SRC}
      HDST=${HDST:-$DST}
      HPROTO=${HPROTO:-"$DPT/$PROTO"}

      unset IHSRC IHDST ISRC IDST IDPT IPROTO

      [ -z "$HSRC" ] || IHSRC="-s $HSRC"
      [ -z "$HDST" ] || IHDST="-d $HDST"
      [ -z "$SRC" ] || ISRC="-s $SRC"
      [ -z "$DST" ] || IDST="-d $DST"
      [ -z "$DPT" ] || IDPT="--dport $DPT"
      IPROTO="-p $PROTO"

      cat slackwall.userules | grep "iptables -A $CHAIN $IPROTO $IHSRC $IHDST $IDPT -j" \
          && echo Alredy && continue

      cat slackwall.userules | grep "iptables -A $CHAIN $IPROTO $ISRC $IHDST $IDPT -j" \
          && echo Alredy && continue

      cat slackwall.userules | grep "iptables -A $CHAIN $IPROTO $IDPT -j" \
          && echo Alredy && continue

      unset COMMAND
      ACTION=6
      LANG=C xmessage -buttons BlockFQDN:1,BlockIP:2,AcceptFQDN:3,AcceptIP:4,BlockPortOnAllIP:5,Skip:6 \
       -default Skip -timeout 15 "$HSRC => $HDST ($HPROTO)"
      ACTION=$?

      [ $ACTION == 0 ] && continue
      [ $ACTION == 1 ] && COMMAND="iptables -A $CHAIN $IPROTO $IHSRC $IHDST $IDPT -j REJECT"
      [ $ACTION == 2 ] && COMMAND="iptables -A $CHAIN $IPROTO $ISRC $IDST $IDPT -j REJECT"
      [ $ACTION == 3 ] && COMMAND="iptables -A $CHAIN $IPROTO $IHSRC $IHDST $IDPT -j ACCEPT"
      [ $ACTION == 4 ] && COMMAND="iptables -A $CHAIN $IPROTO $ISRC $IDST $IDPT -j ACCEPT"
      [ $ACTION == 5 ] && COMMAND="iptables -A $CHAIN $IPROTO $IDPT -j REJECT"
      [ $ACTION == 6 ] && continue

      $COMMAND
      [ "$?" == 0  ] && echo "$COMMAND" >> slackwall.userules
   done

Он парсит строки SYSLOG и рисует на экране пользователя вопрос с помощью xmessage и затем добавляет правило в ядро и дублирует его в сценарий slackwall.userules, предназначенный для начальной инициализации firewall.

Вот его начальное состояние:

   #!/bin/bash
   modprobe nf_conntrack
   modprobe nf_conntrack_amanda
   modprobe nf_conntrack_ftp
   modprobe nf_conntrack_h323
   modprobe nf_conntrack_irc
   modprobe nf_conntrack_netbios_ns
   modprobe nf_conntrack_netlink
   modprobe nf_conntrack_pptp
   modprobe nf_conntrack_proto_dccp
   modprobe nf_conntrack_proto_gre
   modprobe nf_conntrack_proto_sctp
   modprobe nf_conntrack_proto_udplite
   modprobe nf_conntrack_sane
   modprobe nf_conntrack_sip
   modprobe nf_conntrack_tftp
   modprobe xt_conntrack
   iptables -F FIREWALL-INPUT
   iptables -F FIREWALL-FORWARD
   iptables -F FIREWALL-OUTPUT

   iptables -A FIREWALL-OUTPUT -j ACCEPT

Для начального запуска firewall нужно выполнить:

1. Разрешаем руту рисовать на X сервере (выполняется от пользователя, остальное всё от рута)

   $xhost +localhost

2. Загружаем неизменяемую часть firewall

   #cat slackwall.initstate | iptables-restore

3. Загружаем пользовательские правила, в дальнейшем их можно отредактировать и перезапустить эту комманду

   #./slackwall.userules

4. Запускаем скрипт обучения:

   #tail -n 1 -f /var/log/syslog | ./slackwall

У меня это работает в таком виде на Slackware 13.37, Linux psc 2.6.37.6-tinyslack Atom(TM) CPU D510   @ 1.66GHz GenuineIntel GNU/Linux.
Ссылка на готовый пакет: https://sourceforge.net/projects/slackwall/


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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Интерактивный firewall в Linux"  +/
Сообщение от анонимус (??) on 13-Янв-12, 02:56 
Вот оно! Статья моей мечты!
Всю дорогу спрашивал как реализовать файрвол в режиме обучения, и вот наконец-то добрый человек выложил такую вот распрекрасную статью!!!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Интерактивный firewall в Linux"  +/
Сообщение от ffirefox on 13-Янв-12, 03:32 
Все гениальное просто. Автору спасибо за науку.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Интерактивный firewall в Linux"  +/
Сообщение от Аноним (??) on 13-Янв-12, 03:51 
А как всё это сочетается со сканированием портов и торрент-траффиком, пользователь не опухает?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Интерактивный firewall в Linux"  +/
Сообщение от vit (??) on 13-Янв-12, 08:40 
firestarter
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Интерактивный firewall в Linux"  –1 +/
Сообщение от анонимус (??) on 13-Янв-12, 11:05 
В статье говориться про интерактив, который в вашей свистелке нет и не будет.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

19. "Интерактивный firewall в Linux"  +/
Сообщение от Аноним (??) on 18-Янв-12, 16:34 
> В статье говориться про интерактив, который в вашей свистелке нет и не
> будет.

Какое фееричное незнание матчасти.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

5. "Интерактивный firewall в Linux"  +/
Сообщение от Слакварявод on 13-Янв-12, 10:44 
Ай маладец! Ай харашо!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Интерактивный firewall в Linux"  +/
Сообщение от demon (??) on 13-Янв-12, 17:18 
По-моему идея обучаемого файра:
1) имеет смысл только на десктопе
из этого следует, что
2) всегда -A FORWARD -j DROP, и больше правил для этой цепочки не должно быть.
3) обучать имеет смысл только OUTPUT, чтобы контролировать то, что подконтрольно. Неподконтрольные INPUT-ы, если уж вы сидите с реальным IP на десктопе, достаточно только
-A INPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Интерактивный firewall в Linux"  +/
Сообщение от anonymous (??) on 13-Янв-12, 17:34 
:)))))

Вы тама давай те вылайзаете уже из криокамеры.
Сабж уже давно в Федоре есть, и даже с версии 15 вроде ;)

Вот развесилили :)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

26. "Интерактивный firewall в Linux"  +/
Сообщение от demon (??) on 31-Янв-12, 17:28 
> Вы тама давай те вылайзаете уже из криокамеры.
> Сабж уже давно в Федоре есть, и даже с версии 15 вроде
> ;)

Чего в федоре есть? Интерактивный файр? Ну так и отвечайте автору поста. Я думаю, что не только в федоре есть.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

24. "Интерактивный firewall в Linux"  +/
Сообщение от 8 on 27-Янв-12, 14:36 
т.е. Истинный Линуксоид не имеет права на раздачу по вайфай 3Жэ инетов?
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

25. "Интерактивный firewall в Linux"  +/
Сообщение от demon (??) on 31-Янв-12, 17:27 
Да я-то не против, вот только на каждый чих интерактивного файрвола и с одной-то машиной терпения не хватает, а уж если раздавать по вай-фаю... В этом случае все-таки лучше привентивно прописать статические правила при включении точки доступа. А уже на нестандартные запросы можно вешать интерактив.
Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

27. "Интерактивный firewall в Linux"  +/
Сообщение от 8 on 01-Фев-12, 12:52 
ну так можно же игнорить логи для цепочек FORWARD*
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

9. "Интерактивный firewall в Linux"  +/
Сообщение от Александр email(??) on 15-Янв-12, 09:45 
firestarter интерактивный фаервол, но тока для декстопа и с простой конфигурацией сети, иначе глючит. А кто говорит что он не интерактивный или что он свистелка, то я думаю вообще не знает о чем говорит, потому и строит такие мысли у себя в голове.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Интерактивный firewall в Linux"  –2 +/
Сообщение от анонимус (??) on 15-Янв-12, 15:40 
>>>который в случае подозрительной активности выводит

пользователю окно с предложением блокирования трафика или игнорирования предупреждения.


А вот это ваша свистелка может????

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "Интерактивный firewall в Linux"  +/
Сообщение от Александр email(??) on 16-Янв-12, 17:14 
Конечно может, а если не верите почитайте, может тогда перестанете называть хороший творческий труд свистелкой.
Я не говорю, что этот способ плохой, но он точно не подходит для меня, вот и высказываю свое мнение и не более.
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "Интерактивный firewall в Linux"  –1 +/
Сообщение от анонимус (??) on 16-Янв-12, 20:00 
>>>но он точно не подходит для меня, вот и высказываю свое мнение и не более.

Впредь добавляйте хотя бы "ИМХО"

А так, для меня это так и осталось свистелкой не более.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

11. "Интерактивный firewall в Linux"  +/
Сообщение от dikov (??) on 15-Янв-12, 21:17 
Все хорошо, только как сделать так чтоб мессаги от рута выводились на экран? В убунте запрещено вывод на дисплей рутовых прог на дисплей.
Я попробовал в той консоли сначала из под юзера
xhost +localhost
sudo -i
cd /tmp/fwtest
tail -n 1 -f /var/log/syslog | ./slackwall
No protocol specified
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Интерактивный firewall в Linux"  +/
Сообщение от dikov (??) on 16-Янв-12, 12:03 
Разобрался. Чтобы запускалось из под рута в юзеровских иксах я последнюю команду выполняю _юзером_так:
sudo tailf /var/log/syslog | /tmp/fwtest/slackwall
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

16. "Интерактивный firewall в Linux"  +/
Сообщение от anonymous (??) on 18-Янв-12, 09:36 
> sudo tailf /var/log/syslog | /tmp/fwtest/slackwall

Кстати, в syslog можно сразу отправлять сообщения скрипту, не используя tail и тп:
auth.info;authpriv.info     |exec /usr/local/sbin/sshguard

А сообщения пользователю можно передавать через dbus

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

18. "Интерактивный firewall в Linux"  +/
Сообщение от Аноним (??) on 18-Янв-12, 16:32 
Это только в bsd syslog.
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

15. "Интерактивный firewall в Linux"  +/
Сообщение от Аноним (??) on 17-Янв-12, 17:20 
Входящий и статически можно настроить, а для исходящих оно бесполезно т.к не может отличить одно приложение от другого
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Интерактивный firewall в Linux"  +/
Сообщение от Аноним (??) on 18-Янв-12, 16:30 
Какие жуткие костыли.
Чего только не придумают извращенцы, лишь бы NFLOG и NFQUEUE не юзать.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

21. "Интерактивный firewall в Linux"  +/
Сообщение от anonymous (??) on 22-Янв-12, 08:57 
> Какие жуткие костыли.
> Чего только не придумают извращенцы, лишь бы NFLOG и NFQUEUE не юзать.

А как это сделать с помощью NFLOG и NFQUEUE? Напишите, пожалуйста, статью.

К слову - я не скажу, что детально разобрался в скрипте, но мне показалось, что Ваш файрволл сначала пропустит, а потом уже спросит. Я ошибаюсь?

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

22. "Раздел полезных советов: Интерактивный firewall в Linux"  +/
Сообщение от Аноним (??) on 22-Янв-12, 14:06 
Конечно интерактивный фаер в линуксе не особо нужен, но идея занятная. Спасибо.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

23. "Интерактивный firewall в Linux"  +/
Сообщение от ананим on 24-Янв-12, 05:12 
может кому ещё интересно будет -
net-firewall/arno-iptables-firewall
возможности:
http://rocky.eld.leidenuniv.nl/joomla/index.php?option=com_c...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

29. "Интерактивный firewall в Linux"  +/
Сообщение от Антн email on 29-Апр-12, 14:39 
Как заставить этот фиервол не выдавать сообщения на экран. Он просто задолбал выдавать сообщения каждые 15 секунд!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

30. "Интерактивный firewall в Linux"  +/
Сообщение от tux2002 email(ok) on 05-Июл-12, 20:00 
Вот подчищенная  версия более менее юзабельная.

http://sourceforge.net/projects/slackwall/?source=directory

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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