The OpenNET Project / Index page

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



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

"Раздел полезных советов: Интерактивный firewall в Linux"  +1 +/
Сообщение от auto_tips (??), 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.me/tips/info/2658.shtml

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

Оглавление

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

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

2. Сообщение от ffirefox (?), 13-Янв-12, 03:32   +/
Все гениальное просто. Автору спасибо за науку.
Ответить | Правка | Наверх | Cообщить модератору

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

4. Сообщение от vit (??), 13-Янв-12, 08:40   +/
firestarter
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #6

5. Сообщение от Слакварявод (?), 13-Янв-12, 10:44   +/
Ай маладец! Ай харашо!
Ответить | Правка | Наверх | Cообщить модератору

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

7. Сообщение от demon (??), 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
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8, #24

8. Сообщение от anonymous (??), 13-Янв-12, 17:34   +/
:)))))

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #26

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

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

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


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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #13

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

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

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

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

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

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

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

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

16. Сообщение от anonymous (??), 18-Янв-12, 09:36   +/
> sudo tailf /var/log/syslog | /tmp/fwtest/slackwall

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #18

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

18. Сообщение от Аноним (-), 18-Янв-12, 16:32   +/
Это только в bsd syslog.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

27. Сообщение от 8 (?), 01-Фев-12, 12:52   +/
ну так можно же игнорить логи для цепочек FORWARD*
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25

29. Сообщение от Антнemail (?), 29-Апр-12, 14:39   +/
Как заставить этот фиервол не выдавать сообщения на экран. Он просто задолбал выдавать сообщения каждые 15 секунд!
Ответить | Правка | Наверх | Cообщить модератору

30. Сообщение от tux2002email (ok), 05-Июл-12, 20:00   +/
Вот подчищенная  версия более менее юзабельная.

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

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

31. Сообщение от Аноним (31), 13-Июл-24, 14:08   +/
- Сразу видно человека ни разу в жизни не пользовавшего виндами...
хоть даже самых первых 32битных с самыми простенькими тогда Firewall - пусть и от третьих производитлей(ну, так и тут они ск.всего типичными анонами/не пойми кем написанны же),
и потому не видевшего нормального Firewall...  :(
(в ч.н. к которым никому там даже в голову не приходит называть их аж обучаемыми, для сравнения).
Да тут, даже не Firewall - а, скрипт обучаемыый и даже с скриптом -обучателем Ж(

И про переносимость на всеголишь другие НИКСы - вообще речи нет... ну очень полезная статья другим(хоть бы в заголовке ОС сразу указали чтобы время не тратить)...

(по самоей статье могу добавить что, она - слишком уд сугубо для бывалых никсоидов, которых хорошо если 3 человек на крупный город в мире... т.е.нужно не только для себя-любимо писать статью то!
т.е. по разжованней всё такое, начиная с краткого описания ЛЮБОЙ команды +ссылка на полное)

По самой статье: хоть сама концепция на всё использовать потенциальнотроянистый-sh(с рут правами и в роли man-in-middle легализованно-пользователем...) - ну, как то не очень, профессионально, на мой даже ламеркий в вопросах безопасности(я же не корпоратив, особенно иностранный) взгляд(нет, понимаю: для фана-никсоида - может и прокатит но, мне после виндов и нормальных av-защит и в ч.н.нормальных Firewall там - это совсем какая то "дичь"... и просто слоупочество, в области безопасности), да и просто концептуально: скрипт в отдельном потоке в фоне - засирающем(ещё сильней и так ими же из коробки жутко засратый) список процессов(так что он уже непригоден для исп-ния полноценно) - такое себе... в стиле: повышаем безопасность - снижая её в другом месте.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1


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

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




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

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