1.Установка необходимых зависимостей Config Server Firewall
Centos
1 |
# yum install perl-libwww-perl |
1 |
# yum install perl-Time-HiRes |
Debian
1 |
# apt-get install libwww-perl |
1 |
# apt-get install Time-HiRes |
2.Установка Config Server Firewall
1 |
# wget http://www.configserver.com/csf.tgz |
1 |
# tar xvfz csf.tgz |
1 |
# cd csf |
1 |
# sh install.sh |
3.Проверка необходимых модулей iptables
1 |
# perl /usr/local/csf/bin/csftest.pl либо perl /etc/csf/csftest.pl |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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)
1 |
# sh /usr/local/csf/bin/remove_apf_bfd.sh |
либо
1 |
# sh /etc/csf/remove_apf_bfd.sh |
5.Настройка Config Server Firewall
1 |
/etc/csf |
– каталог,содеражащий все конфигураионные файлы
1 |
csf.conf |
– основной конфигурационный файл
1 |
csf.allow |
– список IP-адресов и сетей в формате CIDR, доступ для которых/ые всегда разрешен («белый список»)
1 |
csf.deny |
– список IP-адресов и сетей в формате CIDR, доступ для которых/ые всегда запрещен («черный список»)
1 |
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 минут)
################ Первоначальные настройки
1 |
TESTING = "0" |
– отключение тестового режима
1 |
RESTRICT_UI = "1" |
– ограничение доступа к настройкам CSF через пользовательский интерфейс(Cpanel,DirectAdmin,Webmin etc)
1 |
AUTO_UPDATES = "1" |
– включение проверки доступности обновлений и автоматическое обновление в случае его обнаружения(при установке CSF создается cron-задание /etc/cron.d/csf_update)
################## настройки для Ipv4-протокола
# Фильтрация входящих/исходящих портов для протоколов tcp/udp, а также фильтрация icmp-протокола
#Разрешить входящие подключения на TCP-порты
1 |
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995" |
# Разрешить исходящие подключения на TCP-порты
1 |
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995" |
#Разрешить входящие подключения на UDP-порты
1 |
UDP_IN = "20,21,53" |
# Разрешить исходящие подключения на UDP-порты
1 |
UDP_OUT = "20,21,53,113,123" |
# Разрешить входящий ICMP-запрос(разрешить Ping-овать наш сервер)
1 |
ICMP_IN = "1" |
# Ограничить кол-во входящих ICMP-запросов с одного IP-адреса в единицу времени
1 |
ICMP_IN_RATE = "1/s" |
# Разрешить исходящий ICMP-запрос(разрешить Ping-овать с нашего IP-адреса другие сервера)
1 |
ICMP_OUT = "1" |
# Ограничить кол-во входящих ICMP-запросов с нашего IP-адреса другие сервера)
#0 – отсутствие ограничений
1 |
ICMP_OUT_RATE = "0" |
################## настройки для IPv6-протокола
# Отключение поддержки IPv6
1 |
IPV6 = "0" |
################## Общие настройки
#По умолчанию csf будет фильтровать весь трафик на всех сетевых интерфейсах,за #исключением loopback.Если необходимо фильтровать трафик ТОЛЬКО на конкретных #сет.интерфейсах,тогда указываем ихи здесь
1 |
ETH_DEVICE = "" |
#Если не нужно фильтровать трафик на конкретном интерфейсе,указываем его здесь.
1 |
ETH_DEVICE_SKIP = "" |
#Устанавливает количество заблокированных IP-адресов которые CSF отслеживает. Рекомендуется ограничить число запрещенных IP-адресов, как имеющие слишком много блоков может замедлить производительность сервера.
1 |
DENY_IP_LIMIT = "200" |
#Аналогично, но для временной блокировки IP-адресов
1 |
DENY_TEMP_IP_LIMIT = "100" |
#Включение lfd-службы
1 |
LF_DAEMON = "1" |
################## Защита от Syn-flood-атак
# Включать при наличии/подозрении на Syn-flood-атаку
1 2 3 |
SYNFLOOD = "0" SYNFLOOD_RATE = "100/s" SYNFLOOD_BURST = "150" |
#Ограничивает число одновременных НОВЫХ (new syn packet)соединений на порт c одного IP-адреса
1 |
CONNLIMIT = "" |
#Например
1 |
# CONNLIMIT = "22;5,80;20" |
#Разрешается не более одновременно НОВЫХ 5 соединений на 22 порт и 20 одновременных НОВЫХ соединений на 80 порт
#Ограничивает количество соединений в интервале времени, которые подключаются на указанные порты
1 |
PORTFLOOD = "" |
Синтаксис
1 |
port;protocol;hit count*;interval seconds |
Например
1 |
22;tcp;5;300,80;tcp;20;5 |
Блокировку IP-адреса, если имеется более 5 подключений на порт 22 по протоколу TCP за 300 секунд. Блокировка удаляется после 300 секунд после последнего пакета, отправленного клиентом к этому порту
Блокировку IP-адреса, если имеется более 20 подключений на порт 80 по протоколу TCP за 50 секунд. Блокировка удаляется после 5 секунд после последнего пакета, отправленного клиентом к этому порту
#Включается для отладки
1 |
WATCH_MODE = "0" |
################## Настройки отчетов
# E-mail, на который отпрвалять уведомления от lfd-службы
1 |
LF_ALERT_TO = <your@email> |
################## Настройка блокировок и оповещения
1 |
LF_TRIGGER = "0" |
# Включение оповещения, если IP-адрес блокируется одним из триггеров(условий для #блокировки)
1 |
LF_EMAIL_ALERT = "1" |
#Защита SSH(за 5 неудачных попыток аутентификации постоянная блокировка #LF_SSHD_PERM = «1»).
#Если нужно блокировать не навсегда, а на определенное время, тогда указываем кол-во секунд в параметре LF_SSHD_PERM.
#Например, блокировка на час LF_SSHD_PERM = «3600»
1 2 |
LF_SSHD = "5" LF_SSHD_PERM = "1" |
#Защита FTP
1 2 |
LF_FTPD = "10" LF_FTPD_PERM = "1" |
#Защита SMTP-аутентификации
1 2 |
LF_SMTPAUTH = "5" LF_SMTPAUTH_PERM = "1" |
и т.д.
# каждые 300 секунд lfd-служба будет проверять наличие подозрительных файлов
в /tmp and /dev/shm
1 |
LF_DIRWATCH = "300" |
Форматы файлов csf.allow, csf.deny
Простой
1 2 |
192.168.1.5 192.168.2.0/24 |
Более углубленный
1 |
tcp/udp|in/out|s/d=port|s/d=ip| u=uid |
1 |
tcp/udp |
: tcp,udp или icmp протокол
1 |
in/out |
: входящие/исходящие соедиения
1 |
s/d=port |
: порт источника или назначения (илиICMP тип)
(нижнее подчеркивание используется для диапазона портов, например 2000_3000)
1 |
s/d=ip |
: IP-адрес источника или назначения
1 |
u=uid |
— UID or GID of source packet, implies outgoing connections,
1 |
s/d=IP |
value is ignored
Например
# TCP входящее соединение на порт 3306 с адреса 11.22.33.44
1 |
tcp|in|d=3306|s=11.22.33.44 |
После любого изменения конфигурационных файлов необходимо перезапустить csf командной csf -r
Если используются коамнда csf для добавления/удаления адресов, то она автоматически перезапускает csf
6.Работа с Config Server Firewall
Команды для работы с CSF
1 |
csf -s |
— Запуск файерволла(csf)
1 |
csf -f |
— Остановка файерволла
1 |
csf -r |
— Перезапуск файерволла
1 |
csf -l |
— Просмотр правил файерволла для IPv4-адресов
1 |
csf -l6 |
— Просмотр правил файерволла для IPv6-адресов
1 |
csf -a <IP-adress> |
— Добавить IP адрес в белый список /etc/csf/csf.allow
1 |
csf -ar <IP_adress> |
— Убрать IP из белого списка /etc/csf/csf.allow и удалить правило
1 |
csf -d <IP-adress> |
— Добавить IP адрес в черный список /etc/csf/csf.deny
1 |
csf -dr <IP-adress> |
— Убрать IP из черного списка /etc/csf/csf.deny и удалить правило
1 |
csf -t |
– просмотр списка IP-адресов, ВРЕМЕННО заблокированных
1 |
csf -ta <IP-adress> ttl [-p port] [-d direction] [comment] |
(по умолчанию разрешается input/output)– добавление адреса на время ttl(в секундах)в разрешенные(по умолчанию 3600 секунд)
1 |
csf -td ttl [-p port] [-d direction] [comment] |
(по умолчанию разрешается input/output)– добавление адреса на время ttl(в секундах)в запрещенные(по умолчанию 3600 секунд)
1 |
csf -tr <IP-adress> |
— удаление адреса из списка временно заблокированных
1 |
csf -tf |
– удалить все адреса с обоих списков- заблокированных и разрешенных
1 |
csf -df |
— Удалить и разблокировать все записи из файла /etc/csf/csf.deny
1 |
csf -g <IP-adress>/<CIDR> |
— Поиск существующих IPv4 и IPv6 правил по IP, CIDR или номеру порта
1 |
csf -c |
— Проверить наличие обновлений для csf, но не устанавливать их
1 |
csf -u |
— Проверить наличие обновлений и если есть – установить
Для этого потребуется доставить пакеты
Centos
1 |
# yum install perl-Crypt-SSLeay perl-Net-SSLeay |
1 |
csf -x |
– Отключить csf и lfd
1 |
csf -e |
— Включить csf и lfd
1 |
csf -v |
— Показать версию CSF
1 |
csf -h |
— Показать справочную информацию
7.Добавление в автозагрузку CSF
Centos
1 |
# chkconfig --level 2345 csf on |
Debian
1 |
# update-rc.d csf defaults |
8.Работа в режиме Watch
Если необходимо отследить блокировку/разрешение определенных адресов
Включаем режим Watch
1 |
# nano /etc/csf/csf.conf |
1 |
WATCH_MODE = "1" |
1 |
# csf -r |
1 |
# service lfd restart |
1 |
# nano /etc/rsyslog.conf |
1 |
kern.* /var/log/messages |
1 |
# service rsyslog restart |
Запускаем команду для отслеживания конкретного адреса
1 |
# csf -w 192.168.1.5 |
После чего в логах /var/log/messages появляется вся информацию по подключению адреса 192.168.1.5
После окончанию отладки
1 |
# nano /etc/csf/csf.conf |
1 |
WATCH_MODE = "0" |
1 |
# csf -r |
1 |
# service lfd restart |
9.Удаление Config Server Firewall
Если необходимо удалить CSF с сервера используем штатный скрипт
1 |
# sh /etc/csf/uninstall.sh |
Источник:
http://download.configserver.com/csf/readme.txt
http://linux-notes.org/ustanovka-csf-na-linux-s-cpanel/