Январь 10

Настройка фаервола с помощью Iptables

   Iptables — утилита командной строки, являющаяся стандартным интерфейсом управления работой межсетевого экрана  или брандмауэра.  С ее помощью можно создать и изменить правила, управляющие фильтрацией и перенаправлением пакетов. Т.е. запретить, частично запретить или разрешить доступ пользователей и посетителей к серверу с целью не нанесения ему вреда,  защиты от злоумышленников и установки мошеннического ПО.
Iptables — это стандартный фаервол, включенный в Ubuntu и большинство дистрибутивов Linux по умолчанию.
Необходимо запомнить, что команды iptables нужно запускать с привилегиями суперпользователя.

sudo su

Проверим список текущих правил iptables, применив в команде флаг -L:

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

Или в другом формате с помощью флага -S:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Во всех цепочках установлена политика ACCEPT (разрешить, по умолчанию):
INPUT: обрабатывает все входящие на сервер пакеты;
OUTPUT: содержит правила для исходящего трафика;
FORWARD: используется для обработки предназначенного для других серверов трафика, которая не была создана на данном сервере и необходима для маршрутизации запросов на другие серверы.

Сбрасываем правила, убедившись, что в цепочках INPUT и OUTPUT установлена политика ACCEPT.
Это делается так:

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

Данное руководство сконцентрировано на работе с цепочкой INPUT (входящий трафик). Рассмотрим правило, которое разрешает текущее SSH-подключение.
Запишем его в таком виде и поместим в начало :

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

Запросив список правил, можно увидеть изменения:

sudo iptables -L
Chain INPUT (policy ACCEPT)
target           prot   opt   source             destination
ACCEPT      all   —   anywhere               anywhere                  ctstate RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target            prot   opt   source            destination
Chain OUTPUT (policy ACCEPT)
target            prot   opt   source            destination

Оставляем открытыми три порта:
порт SSH (по умолчанию — 22);
порт APACHE (по умолчанию — 80);
порт FTP (по умолчанию — 20 и 21);

sudo iptables -A INPUT -p tcp -m tcp —dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp —dport 20 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp —dport 60000:60500 -j ACCEPT
sudo iptables -A INPUT -p tcp —dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp —dport 80 -j ACCEPT

Предварительно в конце конфигурационного файла FTP добавив для vsftpd (у нас установлен vsftpd сервер):

sudo nano /etc/vsftpd.conf
pasv_min_port=60000
pasv_max_port=60500

Перегружаем vsftpd:

sudo service vsftpd restart

Для работы loopback device на порту 4555 запишем правило для правильной работы многих программ:

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

Просмотрим текущие правила, используя флаг -S:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack —ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp —dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp —dport 80 -j ACCEPT

Создаем правило DROP, записав в его конец данной цепочки, для сбрасывания всех несоответствующих пакетов:

sudo iptables -A INPUT -j DROP

Новое правило, которое необходимо внести, должно находиться перед основным правилом сброса. В нашем примере мы его записываем, указав номер строки записи, вызвав список текущих правил iptables, применив в команде флаг -L, причем, вставив правила DROP до (!!!) ACCEPT для портов, но перед замыкающим DROP (выделены желтым цветом):

sudo iptables -L —line-numbers
Chain INPUT (policy ACCEPT)
num  target      prot  opt    source            destination
1       ACCEPT    all      —     anywhere        anywhere
2       ACCEPT    all      —     anywhere        anywhere     ctstate RELATED,ESTABLISHED
3       DROP       all      —     ns000.xxx.org   anywhere
4       DROP       all      —     anywhere        anywhere     source IP range хх.хх.хх.хх-хх.хх.хх.хх

5      ACCEPT     tcp    —     anywhere        anywhere     tcp   dpt:ftp
6      ACCEPT     tcp    —     anywhere        anywhere     tcp   dpt:ftp-data
7      ACCEPT     tcp    —     anywhere        anywhere     tcp   dpts:60000:60500
8      ACCEPT     tcp    —     anywhere         anywhere     tcp   dpts:50000:50534
9      ACCEPT     tcp    —     anywhere         anywhere     tcp   dpt:ssh
10    ACCEPT     tcp    —     anywhere        anywhere     tcp   dpt:http
11     DROP         all      —     anywhere         anywhere

Теперь пользователи, у которых доменные имена и IP-адреса попадают в список правил DROP пунктов 3 и 4 зайти на сервер не смогут.
По умолчанию все несохраненные правила действуют до следующей перезагрузки сервера. После перезагрузки несохраненные правила будут потеряны.
Перед сохранением правил проверьте работоспособность настроек!!!
Для сохранения правил используйте пакет iptables-persistent:

sudo apt-get update
sudo apt-get install iptables-persistent

В процессе инсталляции пакета отвечайте «Да» (enter).
Теперь при перезагрузке сервера правила будут автоматически устанавливаться.
Добавляя или меняя правила, не забывайте их сохранять:

sudo iptables-save > /etc/iptables/rules.v4

Примеры записи правил:
Блокировка определенного IP: (3-строка правил в таблице!!!)

sudo iptables -I INPUT 3 -s xx.xx.xx.xx -j DROP

Блокировка диапазона IP: (4-строка правил в таблице!!!)

sudo iptables -I INPUT 4 -m iprange —src-range xx.xx.x.x-xx.xx.xxx.xxx -j DROP

Удаление строки правил (где Х-номер удаляемой строки):

sudo iptables -D INPUT Х


Copyright © 2014. All rights reserved.

Опубликовано 10.01.2016 kirill_kishtanov в категории "Хостинг

2 COMMENTS :

  1. By Мэри on

    Здравствуйте, Кирилл. После выполнения настроек по вашим рекомендациям не могу войти в trnsmittion-daemon, что случилось?

    1. kirill_kishtanovBy kirill_kishtanov (Сообщение автора) on

      Здравствуйте, Мэри. Вам необходимо открыть порт 9091 для демона, создав соответствующее правило, аналогично порту 22, и разместить его перед замыкающим правилом DROP в таблице. Тогда можно будет войти в веб интерфейс демона, набрав http://-lanip-:9091

Обсуждение закрыто.