Для каждого, кто администрирует сервера на Linux это факт давно известен, для тех же кто не в курсе, поясню – в серверных версиях Linux, в отличие от Windows, по умолчанию – читай, при установке системы, открыты все TCPи UDP порты.

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

[su_note]Важно: Первое, что стоит сделать после установки операционной системы – настроить файрвол. Особенно важно это сделать, если у вас сервер с внешним (публичным) IP.[/su_note]

Многие дистрибутивы Linux, в частности Debian и Ubuntu имеют на борту iptables, который способен решить все проблемы с защитой сервера, однако он является сложным в настройке и имеет довольно высокий порог вхождения. Вот, например, как с помощью iptables пробрасывается 80 HTTP порт web-сервера с интерфейса на интерфейс:

$ sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT

$ sudo iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

$ sudo iptables -P FORWARD DROP

Может быть многие гуру со мной не согласятся, но лично не слишком удобно писать вручную все правила, и, видимо, придя к такому же выводу, как и я, ребята из ConfigServer написали скрипты для автоматической настройки iptables – CSF (ConfigServer Security & Firewall).

Как таковой CSF распространяется не только как набор скриптов, с ним в паре идет LFD – демон, мониторящий логи операционной системы на предмет аномалий. Это добавляет гибкости самому файрволу – как пример – можно банить IP адреса после 3-х неудачных попыток подключения к SSH.

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

Начнем с того, что CSF работает с библиотеками языка Perl, поэтому их нужно установить с самого начала:

Для Debian и производных:

$ apt-get install libwww-perl

Для CentOS

$ yum install perl-libwww-perl

Далее скачиваем и распаковываем установочный архив CSF:

$ wget https://download.configserver.com/csf.tgz && tar -zxvf csf.tgz && cd csf

Запускаем установочный скрипт:

 $ sh install.sh

Также проверим, имеются ли необходимые модули iptables в операционной системе:

$ perl /usr/local/csf/bin/csftest.pl

На этом установка закончена, теперь остается минимально сконфигурировать файрвол и запустить его.

Все конфигурационные файлы лежат в /etc/csf

Csf.conf – основные настройки файрвола

Csf.allow - белый список IP адресов. Рекомендую временно внести сюда IP адрес с которого производится ssh подключения, чтобы случайно не оборвать себе доступ к серверу при неправильной конфигурации. Также в этом файле можно обозначить конкретные порты для конкретного IP адреса, которые будут открыты. Например, в основном файле конфигурации закрыт порт 80 для всех, кроме IP адреса 192.168.1.100

Csf.ignore – список адресов, для которых игнорируются правила файрвола

Csf.deny – список забаненных IP адресов.

Перейдем к настройке:

$ nano /etc/csf/csf.conf

Здесь пройдемся по пунктам:

  • TESTING = "0" – Меняем значение на 0. Иначе правила файрвола создадутся, но не применятся. Можно использовать для тестирования конфигурации.
  • RESTRICT_SYSLOG = "3" – Ограничение доступа к syslog/rsyslog для всех кроме группы RESTRICT_SYSLOG_GROUP
  • TCP_IN = ""
  • TCP_OUT = ""
  • UDP_IN = ""
  • UDP_OUT = "" Думаю, здесь пояснения не нужны – пишете порты которые хотите открыть
  • ICMP_IN_RATE = "1/s" – разрешенное количество ICMP пакетов в секунду. Если их будет больше указанных, IP, с которого пришли эти пакеты попадет в бан-лист
  • ETH_DEVICE = "" – Сетевые карты, для которых применять созданные правила. Если оставить поле пустым, то правила будут применяться на все интерфейсы

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

Запускаем CSF

$ csf –s

Для перезагрузки правил файрвола, если вы их изменяли при запущенном CSF делаем следующее:

$ csf –r

Другие ключи (для очистки правил или остановки) можно посмотреть, запустив csf с ключом –h

$ csf –h

При первом запуске CSF вы можете столкнуться с некоторыми проблемами. Например, в логе работы можно увидеть следующие сообщения:

WARNING Binary location for [SENDMAIL] [/usr/sbin/sendmail] in /etc/csf/csf.conf is either incorrect, is not installed or is not executable

Решается это следующим путем:

$ echo '#!/bin/sh' > /usr/sbin/sendmail
$ chmod +x /usr/sbin/sendmail

WARNING Binary location for [HOST] [/usr/bin/host] in /etc/csf/csf.conf is either incorrect, is not installed or is not executable

Эта проблема решается установкой недостающих утилит.

$ apt install bind9utils host –y # Для Debian/Ubuntu, у CentOS будут пакеты bind-utils

Вместо HOST в ошибке может содержаться и другая утилита – просто найдите ее в репозитории и установите

После этих действий перезагрузите CSF и убедитесь, что ошибок больше нет.

На этом настройка связки CSF+LFD закончена.