Для каждого, кто администрирует сервера на 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 закончена.