Чтоб обезопасить работу сервера после исходной установки, 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
Далее рассмотрим следующие утилиты:
- –A говорит IP table внести правило в таблицу
- INPUT обозначает это правило частью последовательности ввода
- m conntrack в сочетании с –cstate ESTABLISHED,RELATED гарантирует, что результаты данного правила будут применяться к текущим, а также к допустимо близким к ним соединениям;
- -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
- -I INPUT 1 помещает данное правило в начало списка
- lo ссылается на интерфейс обратной связи
- -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
Теперь после перезагрузки любого сервера правила останутся действующими.