Как установить фаервол при помощи IP Tables на Ubuntu 12.04

Published by 1 Comment

Чтоб обезопасить работу сервера после исходной установки, Ubuntu добавляет Iptables, фаервол по умолчанию. Сначала, хотя фаервол Ubuntu настроен, он разрешает весь входящий и исходящий трафик на виртуальном выделенном сервере. Чтоб активировать более сильную защиту сервера, нужно добавить в IP Table некоторые основные правила.

Правила IP table основываются на последовательностях команд, которые можно объединять для каждого отдельного процесса. Каждый пакет, пересекающий фаервол, проверяется каждым правилом по порядку. Если пакет соответствует правилам, он выполняет соответствующее действие; в противном случае он переходит по линии.

Команды IP Table

Хотя данное руководство охватывает ограниченное количество команд, обеспечивающих серверу основной уровень безопасности, существует масса нюансов и особых случаев, которые можно разработать для IP Table. Ниже приведены несколько самых полезных команд для создания фаервола для VPS, но имейте в виду, что это лишь краткий список, существует великое множество других команд.

-A: (Append), adds a rule to the IP Tables
-L:  (List), shows the current rules
-m conntrack: allows rules to be based on the current connection state, elaborated in the the --cstate command.
--cstate: explains the states that connections can be in, there are 4: New, Related, Established, and Invalid
-p: (protocol), refers to the the protocol of the rule or of the packet to check.The specified protocol can be one of tcp, udp, udplite, icmp, esp, ah, sctp or the special keyword "all".
--dport: (port), refers to the the port through which the machine connects
-j: (jump), this command refers to the action that needs to be taken if something matches a  rule perfectly. It translates to one of four possibilities:
-ACCEPT: the packet is accepted, and no further rules are processed
-REJECT: the packet is rejected, and the      sender is notified, and no further rules are processed
-DROP: the packet is rejected, but the        sender is not notified, and no further rules are processed
-LOG: the packet is accepted but logged, and the following rules are processed
-I: (Insert), adds a rule between two previous ones
-I INPUT 3: inserts a rule into the IP Table to make it the third in the list
-v: (verbose), offers more details about a rule

Создание IP Table

Чтоб просмотреть действующие правила IP Table виртуального сервера, наберите следующее:

sudo iptables -L

Правила должны выглядеть так:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Если в данный момент действует другой набор правил или его нужно обновить, всегда можно вернуть набор правил по умолчанию, удалив действующий набор:

sudo iptables -F

Кроме того, чтобы ускорить работу IP Table, можно добавить в команду –n. Эта утилита отключает поиск DNS и предотвращает попытки команды найти обратный IP в наборе правил. Например, чтоб просмотреть список правил, можно использовать:

iptables -L –n

Основной фаервол

На данный момент действующие правила позволяют все соединения, как входящие, так и исходящие. Когда table создан, имейте в виду, что как только пакет ПРИНЯТ, ОТКЛОНЕН или ПРЕКРАЩЕН, никакие дальнейшие правила не обрабатываются. Следовательно, изначальные правила имеют приоритет над последующими.

Создавая правила, нужно быть уверенным, что случайное блокирование SSH (метод подключения к серверу) предотвращено.

Для начала нужно убедиться в том, что все текущие подключения разрешены; все соединения, действующие на момент принятия правила, останутся подключенными:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Далее рассмотрим  следующие утилиты:

  1. –A говорит IP table внести правило в таблицу
  2. INPUT обозначает это правило частью последовательности ввода
  3. m conntrack в сочетании с —cstate ESTABLISHED,RELATED гарантирует, что результаты данного правила будут применяться к текущим, а также к допустимо близким к ним соединениям;
  4. -j ACCEPT говорит пакету перейти к принятию правил и оставить текущие подключения действительными.

Убедившись, что все текущие подключения могут оставаться непрерываемыми,  перейдите к блокировке небезопасных подключений.

Допустим, нужно заблокировать весь входящий трафик, кроме приходящего по двум стандартным портам: 22 для SSH и 80 для веб-трафика. Чтобы разрешить весь трафик по указанным портам, используйте следующие команды:

sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

В обоих случаях утилита – обозначает протокол, с которым устанавливается подключение (в данном случае это tcp, в то время как — dport указывает порт, через который передается пакет.

Убедившись, что необходимый трафик будет идти через фаервол, можете заблокировать доступ остального трафика к виртуальному серверу. Так как это последнее правило в списке, весь трафик, который соответствует любому из предыдущих правил в IP Table, не будет затронут и будет восприниматься как созданный ранее.

Создайте правило для блокировки остального трафика:

sudo iptables -A INPUT -j DROP

При этом можно увидеть, как выглядят новые правила:

sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
DROP       all  --  anywhere             anywhere

Установка фаервола почти завершена. Тем не менее, не хватает еще одного правила. Нужно обеспечить VPS обратный доступ. Если бы  новое правило было добавлено без дальнейших параметров, оно было бы размещено в конце списка и, так как оно следовало бы за правилом блокировки всего трафика, никогда не вступило бы в действие.

Чтобы решить эту проблему, нужно сделать это правило первым в списке с помощью команды INPUT:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

  1. -I INPUT 1  помещает данное правило в начало списка
  2. lo ссылается на интерфейс обратной связи
  3. -j ACCEPT гарантирует, что  обратный трафик будет принят

Теперь установка основного фаервола завершена. Установленные правила должны выглядеть так (подробности iptable можно увидеть, набрав –v):

sudo iptables -L -v

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
1289 93442 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
2   212 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh
0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http
47  2422 DROP       all  --  any    any     anywhere             anywhere
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 157 packets, 25300 bytes)
pkts bytes target     prot opt in     out     source               destination

Тем не менее, как только виртуальный сервер перезагрузится, IP tables будут стерты. Следующим шагом будет сохранение и восстановление IP tables.

Сохранение IP Tables

Даже если IP tables действуют, они автоматически удаляются при перезагрузке сервера. Чтоб обеспечить  их постоянную работу, можно использовать пакет IP-Tables persistent.

Установить его можно при помощи команды apt-get:

sudo apt-get install iptables-persistent

Во время установки появится вопрос, хотите ли вы сохранить правила iptable для IPv4 и IPv6. Ответьте «да» в обоих случаях.

Тогда правила сохранятся в /etc/iptables/rules.v4 и  /etc/iptables/rules.v6.

Как только установка закончится, запустите

iptables-persistent:

sudo service iptables-persistent start

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

Tags: , , ,

1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>