firewall для byfly

Руководства, факи, мануалы, секреты, скрипты и прочие вкусности

firewall для byfly

Сообщение d0bryj » 29 окт 2013 23:08

Доброго времени суток.

Мой провайдер byfly, абонентам гаранта мои настройки наверно не подойдут.

Получаем права root

Код: Выделить всё
sudo su -

Создаём скрипт управляющий firewall-ом iptables (если с vim проблемы можно nano)

Код: Выделить всё
vim /etc/network/if-up.d/firewall.sh

и записываем в файл следующие строки

Код: Выделить всё
#!/bin/sh
# Файвол для десктопа

# Примечание: данные настройки не предназначены
#+ для межсетевого экрана.

# Copyright (c) 2013 by Mazurov Jury <mazurov_59@mail.ru>
# Licensed under the GNU General Public License v3
# version 0.1

# Переменная, задающая путь к файлу запуска iptables.
IPTABLES="/sbin/iptables"
# Устройство с которого получаем интернет.
LINK_INTERNET="ppp+"
# Открытые udp и tcp порты в локальной сети и интернете.
# 51413 торрент трекер transmission
INTERNET_INPUT_PORT="51413"



# Сброс всех правил, из всех цепочек.
$IPTABLES -F
# Удаление всех цепочек, кроме встроенных.
$IPTABLES -X


# Политики по умолчанию.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT


# Общие цепочки.
# Проверка на сканирование портов.
$IPTABLES -N portscan
$IPTABLES -N block_portscan

# Если за последний час было 10 или более запросов на нерабочие порты — блокируем
$IPTABLES -A portscan -m recent --name PORTSCAN --rcheck --seconds 3600 --hitcount 10 -j block_portscan
# Если за последнюю минуту было 2 или более запросов на нерабочие порты — блокируем
$IPTABLES -A portscan -m recent --name PORTSCAN --rcheck --seconds 60 --hitcount 2 -j block_portscan
# Всех, кто ломится в нерабочие порты — регистрируем
$IPTABLES -A portscan -m recent --name PORTSCAN --set

  # Всех, кто ломится в нерабочие порты — регистрируем в блок лист.
  $IPTABLES -A block_portscan -m recent --name BLOCK_PORTSCAN --set


# Исходящие соединения

# Всех, кто в блок листе и к кому обращяюсь я исключить из блок листа.
$IPTABLES -N new_output
$IPTABLES -A OUTPUT -m conntrack --ctstate NEW -m recent --name BLOCK_PORTSCAN --remove -j new_output

  $IPTABLES -A new_output -m recent --name PORTSCAN --remove


# Входящие соединения


# Принимать все пакеты, которые инициированы из
#+ уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том,
#+ что это не первый пакет в соединении.
$IPTABLES -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
$IPTABLES -A INPUT -i lo -j ACCEPT

# Защита от атак из интернета
$IPTABLES -N internet
$IPTABLES -A INPUT -i $LINK_INTERNET ! -s 192.168.0.0/16 -j internet

  # Новые соединения
  $IPTABLES -N internet_new_соntact
  $IPTABLES -A internet -m conntrack --ctstate NEW -j internet_new_соntact

    # Блокируем все входящие соединения с машин которые нас сканировали.
    $IPTABLES -A internet_new_соntact -m recent --rcheck --name BLOCK_PORTSCAN -j DROP

    # В зависимости от транспортного протокола переходим на соответствующую пользовательскую цепочку
    $IPTABLES -N internet_input_udp
    $IPTABLES -A internet_new_соntact -p udp -j internet_input_udp

      # Открываем некоторые порты.
      $IPTABLES -A internet_input_udp -p udp -m multiport --destination-port $INTERNET_INPUT_PORT -j ACCEPT

      # Проверка на сканирование портов.
      $IPTABLES -A internet_input_udp -j portscan

    # В зависимости от транспортного протокола переходим на соответствующую пользовательскую цепочку
    $IPTABLES -N internet_input_tcp
    $IPTABLES -A internet_new_соntact -p tcp -j internet_input_tcp

      # Препятствует спуфингу от нашего имени.
      $IPTABLES -A internet_input_tcp -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset

      # Блокирует все попытки открыть входящее TCP-соединение не SYN-пакетом.
      $IPTABLES -A internet_input_tcp -p tcp ! --syn -j DROP

      # Открываем некоторые порты.
      $IPTABLES -A internet_input_tcp -p tcp -m multiport --destination-port $INTERNET_INPUT_PORT -j ACCEPT

      # Проверка на сканирование портов.
      $IPTABLES -A internet_input_tcp -j portscan

  # Пропускать часть ICMP пакетов.
  $IPTABLES -N internet_input_icmp
  $IPTABLES -A internet_new_соntact -p icmp -j internet_input_icmp

    # Пропускать часть ICMP пакетов.
    # Эхо запрос.
    $IPTABLES -A internet_input_icmp -p icmp --icmp-type 8 -j ACCEPT

# Защита от атак из локальной сети
$IPTABLES -N local
$IPTABLES -A INPUT ! -i $LINK_INTERNET -s 192.168.0.0/16 -j local

  # Новые соединения
  $IPTABLES -N local_new_соntact
  $IPTABLES -A local -m conntrack --ctstate NEW -j local_new_соntact

    # Взависимости от транспортного протокола переходим на соответствующую пользовательскую цепочку
    $IPTABLES -N local_input_udp
    $IPTABLES -A local_new_соntact -p udp -j local_input_udp

      # Открываем некоторые порты.
      $IPTABLES -A local_input_udp -p udp -m multiport --destination-port $INTERNET_INPUT_PORT -j ACCEPT

    # Взависимости от транспортного протокола переходим на соответствующую пользовательскую цепочку
    $IPTABLES -N local_input_tcp
    $IPTABLES -A local_new_соntact -p tcp -j local_input_tcp

      # Препятствует спуфингу от нашего имени.
      $IPTABLES -A local_input_tcp -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset

      # Блокирует все попытки открыть входящее TCP-соединение не SYN-пакетом.
      $IPTABLES -A local_input_tcp -p tcp ! --syn -j DROP

      # Открываем некоторые порты.
      $IPTABLES -A local_input_tcp -p tcp -m multiport --destination-port $INTERNET_INPUT_PORT -j ACCEPT

  # Пропускать часть ICMP пакетов.
  $IPTABLES -N local_input_icmp
  $IPTABLES -A local_new_соntact -p icmp -j local_input_icmp

    # Пропускать часть ICMP пакетов.
    # Эхо запрос.
    $IPTABLES -A local_input_icmp -p icmp --icmp-type 8 -j ACCEPT

# Отбрасывать все пакеты, которые не могут быть идентифицированы
#+ и поэтому не могут иметь определенного статуса.
$IPTABLES -A INPUT -m conntrack --ctstate INVALID -j DROP

Скрипт с примечаниями, думаю разберётесь, как переделать под себя.

Весь смысл в том, что пропускаем все установленные и исходящие соединения, трафик локальной петли. Всё остальное (новые входящие соединения) идут на фильтрацию. При этом идет разбвка на трафик локальной сети 192.168.0.0/16 и internet (мухи отдельно, котлеты отдельно).

Делаем скрипт исполняемым

Код: Выделить всё
chmod a+x /etc/network/if-up.d/firewall.sh

В файл /etc/network/interfaces в абзаце инициализации интерфейса получающего доступ к сети internet добавляем следующую строчку

Код: Выделить всё
pre-up /etc/network/if-up.d/firewall.sh

Пример моего файла etc/network/interfaces

Код: Выделить всё
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).


# The loopback network interface
auto lo
iface lo inet loopback

# Моя локальная сеть
iface eth0 inet static
  address 192.168.1.2
  netmask 255.255.255.0
  auto eth0

# PPPoE connection
auto provider
iface provider inet ppp
  #Запуск файрвола
  pre-up /etc/network/if-up.d/firewall.sh
  pre-up /sbin/ifconfig eth0 up
  provider provider

На этом настройку firewall-ла можно считать открытой (нет пределу совершенства).

Ссылки
https://ru.wikibooks.org/wiki/Iptables - вики учебник
http://www.opennet.ru/base/net/wifi_setup.txt.html - учебник устарел, но хорошо разжёваны принципы.

P.S. Вопросы приветствуются.
d0bryj

 
Сообщения: 13
Зарегистрирован: 23 окт 2013 18:41

Вернуться в How-To's

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron