Установка и настройка Config Server Firewall на Centos/Debian
1.Установка необходимых зависимостей Config Server Firewall
Centos
yum install perl-libwww-perl
yum install perl-Time-HiRes
Debian
apt-get install libwww-perl
apt-get install Time-HiRes
2.Установка Config Server Firewall
wget http://www.configserver.com/free/csf.tgz
tar xvfz csf.tgz
cd csf
sh install.sh
3.Проверка необходимых модулей iptables
perl /usr/local/csf/bin/csftest.pl либо perl /etc/csf/csftest.pl
Testing ip_tables/iptable_filter…OK
Testing ipt_LOG…OK
Testing ipt_multiport/xt_multiport…OK
Testing ipt_REJECT…OK
Testing ipt_state/xt_state…OK
Testing ipt_limit/xt_limit…OK
Testing ipt_recent…OK
Testing xt_connlimit…OK
Testing ipt_owner/xt_owner…OK
Testing iptable_nat/ipt_REDIRECT…OK
Testing iptable_nat/ipt_DNAT…OK
RESULT: csf should function on this server
4.Удаление,если уже были установлены другие firewall, с которыми конфликтует CSF(APF/BFD)
sh /usr/local/csf/bin/remove_apf_bfd.sh либо sh /etc/csf/remove_apf_bfd.sh
5.Настройка Config Server Firewall
/etc/csf – каталог,содеражащий все конфигураионные файлы
csf.conf – основной конфигурационный файл
csf.allow – список IP-адресов и сетей в формате CIDR, доступ для которых/ые всегда разрешен («белый список»)
csf.deny – список IP-адресов и сетей в формате CIDR, доступ для которых/ые всегда запрещен («черный список»)
csf.ignore — список IP-адресов и диапазонов CIDR, которые не подлежат проверке и не будут блокироваться файерволом.(т.е встроенный в CSF инструмент lfd – login failure detection не будет проверять эти адреса/сети при чтении лог-файлов)
Однако несмотря на наличие адресов/сетей в этом файле, их можно заблокировать добавив вручную в файл csf.deny
Если один и тот же адрес/диапазон сети находит одновременно и в csf.deny и в csf.allow, то приоритет имеет файл csf.allow.(т.е доступ блокироваться не будет)
Если адрес/сеть находится в файле csf.allow, такой адрес/сеть все еще может быть заблокирован средствами lfd(для исключения этого такой адрес/сеть нужно поместить в файл csf.ignore)
По умолчанию CSF запускается в тестовом режиме ( в этом режиме lfd не запускается и правила очищаются, каждые N-минут, выставленные в параметре TESTING_INTERVAL (по умолчанию каждые 5 минут)
################ Первоначальные настройки
TESTING = «0» – отключение тестового режима
RESTRICT_UI = «1» – ограничение доступа к настройкам CSF через пользовательский интерфейс(Cpanel,DirectAdmin,Webmin etc)
AUTO_UPDATES = «1» – включение проверки доступности обновлений и автоматическое обновление в случае его обнаружения(при установке CSF создается cron-задание /etc/cron.d/csf_update)
################## настройки для Ipv4-протокола
# Фильтрация входящих/исходящих портов для протоколов tcp/udp, а также фильтрация icmp-протокола
#Разрешить входящие подключения на TCP-порты
TCP_IN = «20,21,22,25,53,80,110,143,443,465,587,993,995»
# Разрешить исходящие подключения на TCP-порты
TCP_OUT = «20,21,22,25,53,80,110,113,443,587,993,995»
#Разрешить входящие подключения на UDP-порты
UDP_IN = «20,21,53»
# Разрешить исходящие подключения на UDP-порты
UDP_OUT = «20,21,53,113,123»
# Разрешить входящий ICMP-запрос(разрешить Ping-овать наш сервер)
ICMP_IN = «1»
# Ограничить кол-во входящих ICMP-запросов с одного IP-адреса в единицу времени
ICMP_IN_RATE = «1/s»
# Разрешить исходящий ICMP-запрос(разрешить Ping-овать с нашего IP-адреса другие сервера)
ICMP_OUT = «1»
# Ограничить кол-во входящих ICMP-запросов с нашего IP-адреса другие сервера)
#0 – отсутствие ограничений
ICMP_OUT_RATE = «0»
################## настройки для IPv6-протокола
# Отключение поддержки IPv6
IPV6 = «0»
################## Общие настройки
#По умолчанию csf будет фильтровать весь трафик на всех сетевых интерфейсах,за #исключением loopback.Если необходимо фильтровать трафик ТОЛЬКО на конкретных #сет.интерфейсах,тогда указываем ихи здесь
ETH_DEVICE = «»
#Если не нужно фильтровать трафик на конкретном интерфейсе,указываем его здесь.
ETH_DEVICE_SKIP = «»
#Устанавливает количество заблокированных IP-адресов которые CSF отслеживает. Рекомендуется ограничить число запрещенных IP-адресов, как имеющие слишком много
блоков может замедлить производительность сервера.
DENY_IP_LIMIT = «200»
#Аналогично, но для временной блокировки IP-адресов
DENY_TEMP_IP_LIMIT = «100»
#Включение lfd-службы
LF_DAEMON = «1»
################## Защита от Syn-flood-атак
# Включать при наличии/подозрении на Syn-flood-атаку
SYNFLOOD = «0»
SYNFLOOD_RATE = «100/s»
SYNFLOOD_BURST = «150»
#Ограничивает число одновременных НОВЫХ (new syn packet)соединений на порт c одного IP-адреса
CONNLIMIT = «»
#Например
#CONNLIMIT = «22;5,80;20″
#Разрешается не более одновременно НОВЫХ 5 соединений на 22 порт и 20 #одновременных НОВЫХ соединений на 80 порт
#Ограничивает количество соединений в интервале времени, которые подключаются на #указанные порты
PORTFLOOD = «»
Синтаксис
port;protocol;hit count*;interval seconds
Например
22;tcp;5;300,80;tcp;20;5
Блокировку IP-адреса, если имеется более 5 подключений на порт 22 по протоколу TCP за 300 секунд. Блокировка удаляется после 300 секунд после последнего пакета, отправленного клиентом к этому порту
Блокировку IP-адреса, если имеется более 20 подключений на порт 80 по протоколу TCP за 50 секунд. Блокировка удаляется после 5 секунд после последнего пакета, отправленного клиентом к этому порту
#Включается для отладки
WATCH_MODE = «0»
################## Натсройки отчетов
# E-mail, на который отпрвалять уведомления от lfd-службы
LF_ALERT_TO =
################## Настройка блокировок и оповещения
LF_TRIGGER = «0»
# Включение оповещения, если IP-адрес блокируется одним из триггеров(условий для #блокировки)
LF_EMAIL_ALERT = «1»
#Защита SSH(за 5 неудачных попыток аутентификации постоянная блокировка #LF_SSHD_PERM = «1»).
#Если #нужно блокировать не навсегда, а на определенное время, тогда указываем кол-во #секунд в параметре LF_SSHD_PERM.
#Например, блокировка на час LF_SSHD_PERM = «3600»
LF_SSHD = «5»
LF_SSHD_PERM = «1»
#Защита FTP
LF_FTPD = «10»
LF_FTPD_PERM = «1»
#Защита SMTP-аутентификации
LF_SMTPAUTH = «5»
LF_SMTPAUTH_PERM = «1»
и т.д.
# каждые 300 секунд lfd-служба будет проверять наличие подозрительных файлов
в /tmp and /dev/shm
LF_DIRWATCH = «300»
Форматы файлов csf.allow, csf.deny
Простой
192.168.1.5
192.168.2.0/24
Более углубленный
tcp/udp|in/out|s/d=port|s/d=ip| u=uid
tcp/udp : tcp,udp или icmp протокол
in/out : входящие/исходящие соедиения
s/d=port : порт источника или назначения (илиICMP тип)
(нижнее подчеркивание используется для диапазона портов, например 2000_3000)
s/d=ip : IP-адрес источника или назначения
u=uid — UID or GID of source packet, implies outgoing connections,
s/d=IP value is ignored
Например
# TCP входящее соединение на порт 3306 с адреса 11.22.33.44
tcp|in|d=3306|s=11.22.33.44
После любого изменения конфигурационных файлов необходимо перезапустить csf командной csf -r
Если используются коамнда csf для добавления/удаления адресов, то она автоматически перезапускает csf
6.Работа с Config Server Firewall
Команды для работы с CSF
csf -s — Запуск файерволла(csf)
csf -f — Остановка файерволла
csf -r — Перезапуск файерволла
csf -l — Просмотр правил файерволла для IPv4-адресов
csf -l6 — Просмотр правил файерволла для IPv6-адресов
csf -a
csf -ar
csf -d
csf -dr
csf -t – просмотр списка IP-адресов, ВРЕМЕННО заблокированных
csf -ta
csf -td
csf -tr
csf -tf – удалить все адреса с обоих списков- заблокированных и разрешенных
csf -f — Удалить и разблокировать все записи из файла /etc/csf/csf.deny
csf -g
csf -c — Проверить наличие обновлений для csf, но не устанавливать их
csf -u — Проверить наличие обновлений и если есть – установить
Для этого потребуется доставить пакеты
Centos
yum install perl-Crypt-SSLeay perl-Net-SSLeay
csf -x – Отключить csf и lfd
csf -e — Включить csf и lfd
csf -v — Показать версию CSF
csf -h — Показать справочную информацию
7.Добавление в автозагрузку CSF
Centos
chkconfig —level 2345 csf on
Debian
update-rc.d csf defaults
8.Работа в режиме Watch
Если необходимо отследить блокировку/разрешение определенных адресов
Включаем режим Watch
nano /etc/csf/csf.conf
WATCH_MODE = «1»
service csf restart
service lfd restart
csf -r
nano /etc/rsyslog.conf
kern.* /var/log/messages
service rsyslog restart
Запускаем команду для отслеживания конкретного адреса
csf -w 192.168.1.5
После чего в логах /var/log/messages появляется вся информацию по подключению адреса 192.168.1.5
После окончанию отладки
nano /etc/csf/csf.conf
WATCH_MODE = «0»
service csf restart
service lfd restart
csf -r
9.Удаление Config Server Firewall
Если необходимо удалить CSF с сервера используем штатный скрипт
sh /etc/csf/uninstall.sh