IZONE - http://www.izcity.com/ - бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Linux обеспечивает безопасность в сети

Первая часть статьи об обеспечении безопасности Linux в сети на примере дистрибутива Red Hat Linux 7.0. Настройка firewall с помощью ipchains и выявление сканирования с помощью portsentry.

Андрей Матвеев

Введение

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

Основными типами нападений являются: несанкционированный доступ, т.е. злоумышленник, которому не разрешается использовать сервисы вашего хоста, сможет подключиться и работать с ними; использование "багов" в сетевых службах, которые оказываются уязвимыми из внешней сети; Denial of Service (отказ в обслуживании) – такие нападения приводят к выходу из строя аппаратного и/или программное обеспечение хоста, в результате чего система становится недоступной для пользователей, при атаке на службы цель атакующего проста – выбить хост из сети; мистификация – когда атакующий имитирует подключение к системе с хоста, пользующегося доверием; прослушивание трафика – злоумышленник настраивает сетевой интерфейс таким образом, чтобы получать все пакеты, проходящие в сети, а не только его системе с целью извлечения имен и паролей пользователей.

Надежными путями борьбы с подобными нападениями являются: повышение безопасности ядра и IP-стека; построение брандмауэра (firewall); выявление сканирования, определения типа и версии используемой операционной системы, вторжения; журналирование, с максимальным уровнем подробности; защита от подслушивания; полное отключение всех небезопасных служб или замена альтернативами. В цикле статей "Обеспечиваем безопасность OS Linux в сети на примере дистрибутива Red Hat Linux 7.0" попробуем разобраться с такими способами борьбы против направленных деструктивных действий злоумышленников.

1. Перекомпилируем ядро

По умолчанию ядро осуществляет недостаточный уровень безопасности. Включаем в ядро все опции firewall.

 CONFIG_FIREWALL = y
 CONFIG_NET_ALIAS = y
 CONFIG_INET = y
 CONFIG_SYN_COOKIES = y
 CONFIG_RST_COOKIES = y
 CONFIG_IP_FIREWALL = y
 CONFIG_IP_FIREWALL_VERBOSE = y
 CONFIG_IP_ALWAYS_DEFRAG = y
 CONFIG_IP_ACCT = y
 CONFIG_IP_ALIAS = m

2. Правим /etc/sysctl.conf

Эти настройки повышают устойчивость IP-стека к Denial Of Service атакам, уменьшают время TCP/IP подключения, чтобы можно было обработать больше соединений за тот же интервал. Также будет уменьшено время, которое Linux ждет до закрытия соединения и время через которое Linux разрывает устаревшее соединение. Эти настройки отключат некоторые расширения протокола TCP/IP, которые нам не нужны.

net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.conf.all.forwarding = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1

3. Поиграем с цепочками

Фильтрация IP – механизм, являющийся средством сетевого уровня, т.е. он ничего не знает о приложениях, использующие сетевые соединения, определяет, что нужно делать с принятым или отправленным пакетом: обработать "нормально" или проигнорировать. Набор правил фильтрации IP состоит из комбинации критериев, которые определяют пакеты, подлежащие фильтрации: тип протокола TCP, UDP, ICMP и т.д., номер сокета, тип пакета (флаги, данные, эхо-запрос …), адреса отправителя и получателя пакетов.

В состав Red Hat 7.0 входит программа администрирования ipchains, для построения и управления брандмауэра. Она обладает упрощенным синтаксисом команд по сравнению с ipfwadm, гибкостью, а также механизмом сцепления, позволяющим создавать наборы правил и их объединения.

Некоторые параметры ipchains:
-N - создает новую цепочку
-A - добавляет правило к концу цепочки
-I - включает правило в начало цепочки
-X - удаление цепочки
-F - удаление правил из всех цепочек
-i - сетевой интерфейс (eth0, eth1, ppp0, lo)
-p - протокол TCP/IP, возможны записи tcp, udp, icmp, all
-y - проверка состояния флагов SYN и ACK при установке TCP- соединения (SYN установлен, ACK сброшен)
!-y - проверка состояния флага ACK в ответе на запрос на установление TCP-соединения (ACK установлен)
-s - адрес источника и порт
-d - адрес назначения и порт
-j - действие над пакетом (ACCEPT, REJECT, DENY)
-l - производится запись пакета, удовлетворяющего правилу в лог (KERN_INFO)

В ipchains существует три встроенные цепочки: input (входная цепочка), forward (цепочка перенаправления) и output (выходная цепочка). Пакеты продвигаются по созданным цепочкам в этом порядке до тех пор, пока не обнаружится совпадение, затем определяется действие над пакетом, указанное в составе правила (приводятся чаще всего используемые правила):
ACCEPT – результат сопоставления положительный;
DENY – происходит отброс пакета;
REJECT – тоже самое, что и DENY, только высылается сообщение ICMP типа 3 – destination host unreachable (один из маршрутизаторов не может доставить пакет на следующий узел);
MASQ – маскарадинг (маскировка), применяется только в цепочке forward.
Примечание: действие над пакетом можно и не определять, например, для учета трафика: ipchains –A forward –i eth0 –p tcp –d 0/0

Внешний вид:
-ipchains –A|I [цепочка] [-i интерфейс] [-p протокол] [ [!] –y] [-s адрес [порт]] [-d адрес[порт]] –j действие над пакетом [l]

Имеем адрес сети 192.168.5.0, маску сети 255.255.255.0, широковещательный адрес 192.168.5.255, IP-адрес 192.168.5.21, сетевой интерфейс eth0.
Нужно запретить подключения к нашему компьютеру к любым портам, кроме 137-139 (для работы протокола SMB), 80 (для работы www- сервера), 22 (для работы SSH), 20, 21 (FTP-сервера) и разрешить подключения к удаленным узлам со службами WWW, SMTP, POP3, AUTH, FTP, SSH.

Создаем сценарий для ipchains:
cd /etc touch ipchains.rules

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

Теперь:
chmod +x /etc/ipchains.rules
и в /etc/rc.d/rc.local для автоматического запуска нашего сценария прописываем путь к /etc/ipchains.rules:
sh /etc/ipchains.rules

Проверить работу нашего скрипта можно выполнив команду:
/etc/rc.d/init.d/ipchains status

4. Фильтруем порты

PortSentry – это средство для выявления сканирования портов. Оно практически определяет и блокирует попытки атак. Распаковываем скаченный с freshmeat.net архив и устанавливаем:
tar zxvf portsentry-1.1.tar.gz Переходим в созданный каталог и:
make –f Makefile
make linux
make install

Теперь правим /usr/local/psionic/portsentry/portsentry.conf
#задаем прослушиваемые порты
TCP_PORTS = "1, 11, 15, 23, 25, 79, 110, 111, 119, 143, 540, 635, 1080, 1524, 2000, 57 42, 6667, 12345, 12346, 20034, 27665, 31337, 32771, 32772, 32773, 32774, 40421, 49 724, 54320"
UDP_PORTS = "1, 7, 9, 53, 69, 161, 162, 513, 635, 640, 641, 700, 37444, 34555, 31335, 32770, 32771, 32772, 32773, 32774, 31337, 54321"
#задаем границу фильтруемых портов для определения скрытого сканирования
ADVANCED_PORTS_TCP = "1024"
ADVANCED_PORTS_UDP = "1024"
#исключаемые порты
ADVANCED_EXCLUDE_TCP = "20, 21, 22, 80, 139"
ADVANCED_EXCLUDE_UDP = "138, 137"
#пути к файлам
IGNORE_FILE = "/usr/local/psionic/portsentry/portsentry.ignore"
HISTORY_FILE = "/usr/local/psionic/portsentry/portsentry.history"
BLOCKED_FILE = "/usr/local/psionic/portsentry/portsentry.blocked"
#не будем резолвить
RESOLVE_HOST = "0"
#немедленная блокировка
BLOCK_UDP = "1"
BLOCK_TCP = "1"
#создадим правило для ipchains
KILL_ROUTE = "/sbin/ipchains -I input -s $TARGET$ -j DENY -l"
#так пропишем запись в /etc/hosts.deny
KILL_HOSTS_DENY = "ALL: $TARGET$"
#при обнаружении сканирования создадим еще один файл
KILL_RUN_CMD = "echo PortSentry detect port scanning from $TARGET$ on $PORT$ > /root/scan.new"
#сразу реагируем на сканирование портов
SCAN_TRIGGER = "0"

Возможные варианты запуска PortSentry: -tcp, -udp, -stcp, -sudp, -atcp, - audp. Комбинировать варианты типа –tcp и –stcp нельзя.

Для автоматической загрузки теперь в /etc/rc.d/rc.local прописываем путь к PortSentry для выявления скрытого сканирования:
/usr/local/psionic/portsentry/portsentry -stcp
/usr/local/psionic/portsentry/portsentry -sudp

Продолжение следует…

Источник - SoftТерра, http://www.softerra.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com