Centos 6 iptables настройка

Обновлено: 05.07.2024

Как настроить брандмауэр называется Netfilter (Iptables) в CentOS / RHEL / Fedora / RedHat Enterprise Linux?

Netfilter представляет собой брандмауэр для систем Linux операционной. Он входит в состав дистрибутива, и она включена по умолчанию. Этот брандмауэр контролирует программу IPTables. Netfilter фильтрация происходит на уровне ядра, прежде чем программа может даже обрабатывать данные из сети пакетов.

Iptables конфигурационный файл

По умолчанию конфигурационные файлы для RHEL / CentOS / Fedora Linux являются:

Отображения правила по умолчанию

Введите следующую команду:

Включить брандмауэр

Введите следующие команды, чтобы включить брандмауэр:

Понимание Firewall

Есть всего 4 цепочек

Пакет соответствующих правил
  1. Каждый пакет начинается в первое правило в цепочке.
  2. Пакет продолжается, пока не соответствует правилу.
  3. Если совпадение найдено, то управление перейдет к указанной цели (например, REJECT, ACCEPT, DROP).
Значения целевых
/etc/sysconfig/iptables

Редактировать /etc/sysconfig/iptables, введите:

Вы увидите правила по умолчанию следующим образом:

Отбросьте все трафик

Обновление, как следует изменить политику по умолчанию отказаться от принять за вход и вперед встроенные цепи:

Log и Drop Spoofing адрес источника

Добавьте следующие строки перед окончательным COMMIT строки:

Log и Drop Весь трафик

Найдите следующие строки:

Обновление его следующим образом:

Открытие порта

Чтобы открыть порт 53 (DNS Server) добавьте следующие линии до COMMIT

Чтобы открыть порт 25 (SMTP-сервер) добавьте следующие линии до COMMIT:

Только позвольте SSH трафик от 192.168.1.0/24

Включить доступ для печати 192.168.1.0/24

Разрешить законные клиенты NTP для доступа к серверу

Открытый FTP-порт 21 (FTP)

Сохраните и закройте файл. Редактировать /etc/sysconfig/iptables-config, введите:

Убедитесь, что FTP-модуль загружается с пробелами список модулей:

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

Редактировать /etc/sysctl.conf для DoS и SYN защиты

Редактировать /etc/sysctl.conf для защиты от определенных видов атак и добавить / обновить следующим образом:

Альтернативный вариант конфигурации

Вы можете пропустить /etc/sysconfig/iptables файл и создать скрипт с нуля следующим образом:

Данное руководство демонстрирует создание простого фаервола на сервере Centos, а также рассказывает, как открыть нужные порты и закрыть остальные сервисы, отразить атаки и вернуться на VPS в случае случайной блокировки.

Руководство не является исчерпывающим, оно только показывает, как открыть некоторые порты (Apache, SSH и email) и закрыть все остальные, а также создать некоторые общие правила, блокирующие скрипты и ботов, которые ищут уязвимые VPS. Вопрос блокировки исходящего трафика не охвачен.

IPTables — простой фаервол, установленный на большинстве дистрибутивов Linux. Руководство Linux говорит, что IPTables — это инструмент управления пакетными фильтрами IPv4 и NAT, то есть, это инструмент фильтрации и блокировки интернет-трафика. IPTables включен в CentOS по умолчанию.

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

Какие порты и сервисы открыть?

Для начала нужно решить, какие сервисы должны быть открыты. На обычном сервере это, как правило, веб-сервер, почтовый сервер и SSH.

Во-первых, нужно оставить открытым порт SSH, чтобы иметь возможность подключаться к серверу удаленно; это порт 22. Для веб-трафика нужны порты 80 и 443 (порт SSL). Чтобы пользоваться электронной почтой, нужно открыть порт 25 (обычный SMTP) и 465 (защищенный SMTP). Чтобы пользователи могли получать электронную почту, откройте порт 110 (POP3) и 995 (защищенный POP3). Кроме того, нужно открыть порты IMAP (если установлен): 143 для IMAP, а также 993 для IMAP по SSL.

Примечание: рекомендуется открывать только защищенные протоколы, но это не сработает, если нельзя сменить почтовые клиенты пользователей.

Блокировка наиболее распространенных атак

Обычно хостинг-провайдеры предоставляют ненастроенные серверы — весь трафик разрешен. Но на всякий случай можно сбросить все правила фаервола:

Затем можно добавить несколько простых правил, которые отражают наиболее распространенные атаки и защищают сервер от скрипт-кидди. Конечно, IPTables вряд ли сможет защитить сервер от серьезной DDOS или подобных атак; но, по крайней мере, этот фаервол устранит сканирующих сеть ботов, которые рано или поздно начнут искать бреши в системе безопасности данного сервера. Для начала нужно заблокировать нулевые пакеты:

Теперь фаервол не будет принимать входящих пакетов с tcp-флагами. Нулевые пакеты, по сути, разведывательные. они используются, чтобы выяснить настройки сервера и определить его слабые места. Следующее правило отражает атаки syn-flood:

Во время атаки syn-flood злоумышленник создает новое соединение, но не устанавливает никаких флагов (SYN, ACK и т.д.). Все, что ему нужно — отнять ресурсы сервера. Такие пакеты принимать не стоит. Далее нужно защитить сервер от разведывательных пакетов XMAS:

Теперь сервер защищен от некоторых общих атак, которые ищут его уязвимости.

Открытие портов выбранных сервисов

Теперь можно внести выбранные сервисы в фильтр фаервола. Чтобы внести локальный интерфейс:

iptables -A INPUT -i lo -j ACCEPT

Данная команда говорит добавить (-А) правило в фильтр входящих соединений (INPUT), разрешающее (-j ACCEPT) любой трафик, поступающий на локальный интерфейс (-i lo). Локальный хост часто используется для размещения базы данных, к которой подключаются веб-сайт и почтовый сервер. Таким образом, VPS имеет доступ к базе данных, но взломать ее через интернет нельзя.

Теперь нужно разрешить трафик веб-сервера:

Как уже было сказано, имея возможность влиять на пользователей, лучше использовать безопасные версии протоколов; к сожалению, это не всегда возможно, и клиенты будут использовать порт 25, который достаточно просто взломать. Теперь нужно разрешить пользователям читать электронную почту:

Эти два правила разрешают трафик POP3. Опять же, усилить защиту почтового сервера можно при помощи безопасной версии сервиса. Также нужно включить доступ по протоколу IMAP:

Разрешить или запретить ICMP Ping запросы.

Ограничение доступа SSH

Также нужно разрешить трафик SSH, чтобы иметь возможность подключаться к VPS удаленно. Это очень просто сделать при помощи команды:

Это действие покажет текущего пользователя (если он единственный вошедший в систему пользователь) и IP-адрес. Результат выглядит примерно так:

Теперь можно создать правило фаервола, разрешающее на порт SSH только исходящий от указанного IP-адреса трафик:

Замените фразу «IP_АДРЕС» настоящим адресом.

При необходимости можно открыть больше портов сервера, но для этого нужно сменить их номера. Тогда фаервол будет разрешать доступ только нужным сервисам. Сейчас нужно добавить еще одно правило, которое позволит устанавливать исходящие соединения (т.е. использовать ping или запускать обновления программного обеспечения):

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

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Теперь правила фаервола настроены должным образом.

Сохранение настроек

Теперь можно просмотреть список установленных правил, чтобы убедиться, что все нужные правила внесены:

iptables-save | sudo tee /etc/sysconfig/iptables

Конфигурационный файл IPTables на CentOS хранится в /etc/sysconfig/iptables. Вышеприведенная команда сохранила созданные правила в данный файл. Чтобы убедиться, что все работает должным образом, перезапустите фаервол:

service iptables restart

Сохраненные правила останутся действительными даже после перезагрузки фаервола.

Как разблокировать себя на сервере?

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

Подключившись, нужно войти как root и выполнить команду:

Это сбросит все правила, и можно будет снова войти на сервер.

Итоги

Данное руководство не является исчерпывающим и знакомит с основами настройки простого фаервола на машине Linux. Оно помогает пользователю, не знакомому с командной строкой Linux и правилами IPTables, выполнить все необходимые действия по защите обычного почтового или веб-сервера. Тем не менее, можно сделать намного больше. В интернете можно найти огромное множество статей и руководств, помогающих установить более надежные настройки; данные же краткие инструкции обеспечат серверу базовый уровень безопасности.

iptables – это фаервол (или брандмауэр), используемый на подавляющем большинстве дистрибутивов linux; мануал linux называет iptables средством управления NAT и пакетными фильтрами IPv4, проще говоря – это инструмент для фильтрации и блокировки трафика.

Данное руководство поможет настроить простой фаервол для виртуального выделенного сервера Centos 6; такой фаервол оставляет открытыми только необходимые порты, а остальные сервисы закрывает. Также в руководстве показано, как предотвратить атаки и вернуть себе доступ к случайно заблокированному серверу.

Конечно, данное руководство нельзя назвать исчерпывающим. Оно охватывает настройку некоторых основных портов: apache, SSH и электронной почты; остальные порты будут закрыты. Также здесь можно найти инструкции по блокировке вредоносных скриптов и ботов. Блокировка исходящего трафика в руководстве не рассматривается.

В целом фаервол представляет собой список правил; если входящее соединение отвечает одному из правил этого списка, то на него будут распространяться действия, предписанные этим правилом. Если пользовательские правила не установлены, используются правила по умолчанию.

Примечание: Данное руководство охватывает настройку безопасности IPv4. В системе Linux безопасность IPv6 настраивается отдельно. Брандмауэр iptables поддерживает правила только для IPv4; брандмауэр для адресов IPv6 называется ip6tables. Если ваш сервер использует IPv6, нужно настроить правила для интерфейсов IPv4 и IPv6 . Подробнее об инструментах IPv6 можно прочесть в статье «Настройка и использование IPv6 на сервере Linux».

Какие порты и сервисы нужно открыть?

Для начала нужно определить, какие сервисы и порты должны быть доступны. Для примера рассмотрим стандартный сервер. Как правило, на нем работает веб-сервер и почтовый сервер, а для входа необходим порт SSH.

Потому, во-первых, нужно оставить открытым порт SSH – 22 (в противном случае удаленный доступ к серверу будет заблокирован).

А во-вторых, нужно открыть SSL-порты 80 и 443 для веб-трафика. Для отправки электронной почты нужен порт 25 (обычный SMTP) и 465 (безопасный SMTP), а для получения почты – порты 110 (POP3) и 995 (безопасный POP3).

Также нужно открыть порты IMAP: 143 (стандартный порт) и 993 (IMAP по SSL).

Примечание: Рекомендуется использовать только безопасные протоколы (для этого нужно иметь возможность изменить почтовые клиенты пользователей).

Предотвращение распространённых атак

Как правило, весь трафик на сервере разрешен. Чтобы сбросить все правила фаервола, используйте команду:

Затем можно добавить несколько простых правил, которые предотвращают самые распространённые атаки и защищают сервер от скрипт-кидди. На самом деле, не стоит полагаться на то, что iptables сможет самостоятельно отразить полноценную DDOS-атаку или нечто подобное, однако этот фаервол может без труда заблокировать доступ для сканирующих сеть ботов, которые ищут лазейки в безопасности сервера.

Сначала заблокируйте нулевые пакеты:

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Это правило блокирует входящие пакеты с tcp-флагами. Нулевые пакеты, по сути, являются средством разведки; они позволяют выяснить настройки сервера и определить его слабые места. Это правило предотвратит syn-flood атаки:

При syn-flood атаке злоумышленник создает новое подключение, при этом не устанавливая никаких флагов (SYN, ACK и т.д.); такие атаки проводятся с целью отнять ресурсы сервера, следовательно, эти пакеты принимать не следует. После этого нужно запретить разведывательные пакеты XMAS:

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Эти правила защитят сервер от самых распространённых атак.

Открытие портов

Теперь нужно открыть порты выбранных ранее сервисов. Для начала откройте локальный интерфейс:

iptables -A INPUT -i lo -j ACCEPT

Эта команда добавит (флаг -А) в фильтр входящих соединений (INPUT) правило, которое принимает (-j ACCEPT) весь трафик, поступающий на локальный интерфейс (-i lo). Этот интерфейс часто используется для размещения БД, к которой подключены сайт и почтовый сервер. Таким образом, сам сервер имеет доступ к этой базе данных, но взломать ее через интернет не получится.

Эти правила откроют трафик веб-сервера:

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Эти команды добавят в цепочку ACCEPT порты 80 и 443, что откроет трафик на эти порты. Чтобы открыть порты сервера SMTP, используйте:

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

Как отмечалось ранее, лучше использовать безопасные версии протоколов, что доступно только при возможности влиять на пользователей; к сожалению, это возможно не всегда, потому клиенты будут использовать порт 25, который достаточно легко взломать. Чтобы пользователи могли читать электронную почту, добавьте правила:

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

Они откроют трафик POP3. После этого нужно открыть протокол IMAP:

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

Защита SSH

Чтобы подключаться к серверу удалённо, нужно разрешить трафик SSH.

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Эта команда добавляет в брандмауэр правило, которое откроет tcp-трафик, входящий на порт 22 (порт SSH по умолчанию). Рекомендуется вместо порта 22 использовать другой свободный порт (для этого откорректируйте вышеуказанное правило); к сожалению, настройка SSH не входит в рамки данного руководства. Однако можно настроить сам фаервол. Имея постоянный IP-адрес, можно разрешить доступ к SSH только для этого адреса.

Эта команда покажет текущего пользователя (если только он вошёл в систему) и IP-адрес. Результат имеет примерно такой вид:

После этого можно создать правило фаервола, принимающее трафик на порт SSH только от одного IP-адреса:

iptables -A INPUT -p tcp -s IP_АДРЕС -m tcp --dport 22 -j ACCEPT

Примечание: В команде нужно указать свой внешний IP.

В брандмауэре можно открыть и больше портов. Тогда фаервол будет разрешать доступ ко всем нужным сервисам. Теперь необходимо добавить еще одно правило, которое разрешает устанавливать исходящие подключения (т.е. использовать ping или обновлять программное обеспечение):

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

После этого можно заблокировать все остальное и разрешить все исходящие соединения.

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Базовый фаервол iptables готов.

Сохранение правил iptables

Просмотрите список установленных правил, чтобы убедиться, что все нужные правила были добавлены:

iptables-save | sudo tee /etc/sysconfig/iptables

Конфигурационный файл iptables в системе CentOS хранится в /etc/sysconfig/iptables. Приведенная выше команда сохранила все созданные правила в этот файл. Чтобы убедиться, что все работает корректно, перезапустите фаервол:

service iptables restart

Теперь правила будут действительны даже после перезагрузки сервера.

Как разблокировать себя на сервере?

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

Подключившись к серверу, войдите как пользователь root и сбросьте правила фаервола:

После этого доступ к серверу будет восстановлен.

Заключение

Данное руководство помогает пользователю, не знакомому с командной строкой Linux и правилами IPTables, настроить базовые правила фаервола и защитить все важные сервисы. Конечно, это руководство не является исчерпывающим, iptables имеет гораздо больше функций, но для начала такой настройки будет достаточно.

Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.

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

Принцип настройки

Общий синтаксис использования iptables:

iptables -t <таблица> <команда> <цепочка> [номер] <условие> <действие>

<таблица>

Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter.

<команда>

Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.

<цепочка>

В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).

[номер]

Некоторые команды требуют указания номера правила, например, на удаление или редактирование.

<условие>

Условие описывает критерии отработки того или иного правила.

<действие>

Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия.

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

Ключи iptables и примеры их использования

Для работы с таблицами (iptables -t)

Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.

Ключ Описание
-t filter Таблица по умолчанию. С ней работаем, если упускаем ключ -t. Встроены три цепочки — INPUT (входящие), OUTPUT (исходящие) и FORWARD (проходящие пакеты)
-t nat Для пакетов, устанавливающий новое соединение. По умолчанию, встроены три цепочки — PREROUTING (изменение входящих), OUTPUT (изменение локальных пакетов перед отправкой) и POSTROUTING (изменение всех исходящих).
-t mangle Для изменения пакетов. Цепочки — INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING.
-t raw Для создания исключений в слежении за соединениями. Цепочки: PREROUTING, OUTPUT.

Команды

Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.

Ключ Описание и примеры
-A Добавление правила в конец списка:
iptables -A INPUT -s 192.168.0.15 -j DROP
запретить входящие с 192.168.0.15.
-D Удаление правила:
iptables -D INPUT 10
удалить правило в цепочке INPUT с номером 10.
-I Вставка правила в определенную часть списка:
iptables -I INPUT 5 -s 192.168.0.15 -j DROP
вставить правило 5-м по списку.
-R Замена правила.
iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT
заменить наше 5-е правило с запрещающего на разрешающее.
-F Сброс правил в цепочке.
iptables -F INPUT
-Z Обнуление статистики.
iptables -Z INPUT
-N Создание цепочки.
iptables -N CHAINNEW
-X Удаление цепочки.
iptables -X CHAINNEW
-P Определение правила по умолчанию.
iptables -P INPUT DROP
-E Переименовывание цепочки.
iptables -E CHAINNEW CHAINOLD

Условия

Данные ключи определяют условия правила.

Ключ Описание и примеры
-p Сетевой протокол. Допустимые варианты — TCP, UDP, ICMP или ALL.
iptables -A INPUT -p tcp -j ACCEPT
разрешить все входящие tcp-соединения.
-s Адрес источника — имя хоста, IP-адрес или подсеть в нотации CIDR.
iptables -A INPUT -s 192.168.0.50 -j DROP
запретить входящие с узла 192.168.0.50
-d Адрес назначения. Принцип использования аналогичен предыдущему ключу -s.
iptables -A OUTPUT -d 192.168.0.50 -j DROP
запретить исходящие на узел 192.168.0.50
-i Сетевой адаптер, через который приходят пакеты (INPUT).
iptables -A INPUT -i eth2 -j DROP
запретить входящие для Ethernet-интерфейса eth2.
-o Сетевой адаптер, с которого уходят пакеты (OUTPUT).
iptables -A OUTPUT -o eth3 -j ACCEPT
разрешить исходящие с Ethernet-интерфейса eth3.
--dport Порт назначения.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
разрешить входящие на порт 80.
--sport Порт источника.
iptables -A INPUT -p tcp --sport 1023 -j DROP
запретить входящие с порта 1023.

Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.

Действия

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

Читайте также: