Параметры /proc
Метки: ICMP | marshrutizator | proc | SYN-atak
Понедельник, 16 марта 2009 г.
Просмотров: 6703
Опции маршрутизации.
В каталоге /proc/sys/net/ipv4/conf содержится подкаталоги для каждого интерфейса, в частности для default и all.
dr-xr-xr-x 2 root root 0 Мар 16 09:25 all
dr-xr-xr-x 2 root root 0 Мар 16 09:25 br0
dr-xr-xr-x 2 root root 0 Мар 16 09:25 default
dr-xr-xr-x 2 root root 0 Мар 16 09:25 lo
dr-xr-xr-x 2 root root 0 Мар 16 09:25 eth0
Для каждого интерфейса в каталогах находятся параметры сетевых интерфейсов:
# ls -l /proc/sys/net/ipv4/conf/all/
-rw-r--r-- 1 root root 0 Мар 16 09:26 accept_redirects
-rw-r--r-- 1 root root 0 Мар 16 09:26 accept_source_route
-rw-r--r-- 1 root root 0 Мар 16 09:26 arp_filter
-rw-r--r-- 1 root root 0 Мар 16 09:26 bootp_relay
-rw-r--r-- 1 root root 0 Мар 16 09:26 forwarding
-rw-r--r-- 1 root root 0 Мар 16 09:26 log_martians
-r--r--r-- 1 root root 0 Мар 16 09:26 mc_forwarding
-rw-r--r-- 1 root root 0 Мар 16 09:26 medium_id
-rw-r--r-- 1 root root 0 Мар 16 09:26 proxy_arp
-rw-r--r-- 1 root root 0 Мар 16 09:26 rp_filter
-rw-r--r-- 1 root root 0 Мар 16 09:26 secure_redirects
-rw-r--r-- 1 root root 0 Мар 16 09:26 send_redirects
-rw-r--r-- 1 root root 0 Мар 16 09:26 shared_media
-rw-r--r-- 1 root root 0 Мар 16 09:26 tag
Во всех каталогах интерфейсов содержится файл accept_source_routing. Когда в файле записано значение 1, маршрутизатор может принимать маршрутизацию от источника. В целях безопасности эту функцию нужно выключить, то есть записать 0 во все файлы accept_source_routing для каждого интерфейса.
Эту задачу можно автоматизировать следующим образом: просто добавьте следующие команды в файл /etc/sysctl.conf:
net.ipv4.conf.all.accept_source_routing = 0
net.ipv4.conf.default.accept_source_routing = 0
net.ipv4.conf.lo.accept_source_routing = 0
net.ipv4.conf.br0.accept_source_routing = 0
net.ipv4.conf.eth0.accept_source_routing = 0
Но лучше использовать следующий фрагмент сценария:
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $f done
Команды будут разные, в зависимости от установленных в системе интерфейсов , следовательно лучше использовать такой метод - он будет работать на всех компьютерах.
Проверка маршрутизации - это попытка ядра убедиться, что интерфейс принимает только пакеты с корректными IP-адресами. В частности, если пакет с внутренними адресами поступает на внешний интерфейс, ядро должно отбросить такой пакет. Эту функцию нужно включить:
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f done
Маршрутизаторы используют ICMP-перенаправления для уведомления узлов о наилучшем маршруте. Функция нужная, но она может быть использована хакерами для MITM-атак, следовательно лучше ее выключить:
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $f done
Безопасные перенаправления (secure redirects) отправляются шлюзом по умолчанию, их нужно принимать:
for f in /proc/sys/net/ipv4/conf/*/secure_redirects; do echo 1 > $f done
Отправку перенаправлений другим узлам сети нужно запретить:
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo 0 > $f done
Параметры безопасности.
ICMP-пинги, отправленные в широковещательную сеть, могут использоваться для DoS-атаки (Smurf), следовательно, данные «пинги» нужно запрещать или игнорировать:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Игнорировать подделанные сообщения об ошибках тоже нужно:
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
Есть еще файл log_martians, присутствующий в каталоге каждого интерфейса. Martians - это так называемые Марсиане (юмористы). Под марсианами рассматриваются странные неуместные пакеты, такие пакеты отправляются хакером с бессмысленного адреса. Лучше протоколировать все эти пакеты для последующего анализа:
for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo 1 > $f done
ICMP-сообщения.
«Пинги» используются в диагностических целях и бывают полезны, но они могут использоваться для DoS-атак. Отвечая на «пинг», система сообщает хакеру, что по этому адресу есть машина и она включена.
Обычно «пинги» разрешаются, но ограничивается их частота, чтобы их нельзя было использовать для DoS-атак. В некоторых системах частота ICMP-сообщений типа 0 (эхо-ответ) устанавливается в файле /proc/sys/net/ipv4/icmp_echoreply_rate, в других — /proc/sys/net/ipv4/icmp_ratelimit.
Установим ограничение: 1 ответ каждые 2 секунды:
echo 200 > /proc/sys/net/ipv4/icmp_ratelimit
Если нужен 1 ответ в секунду, указываем значение 100.
Файл /proc/sys/net/ipv4/icmp_ratelimit задает ограничение для ICMP-сообщений всех типов. Если нужно установить ограничение частоты в зависимости от типа пакетов, нужно оперировать файлом /proc/sys/net/ipv4/icmp_ratemask. Значение в этом файле хранится в виде маски, которая получается суммированием слагаемых 2n,где n - это тип ICMP-сообщения.
Номер (n) |
ICMP-тип |
0 |
Эхо-ответ (echo reply) |
3 |
Получатель недоступен (destination unreachable) |
4 |
Подавление источника (source quench) |
5 |
Подавление источника (source quench) |
8 |
Эхо (echo) |
11 |
Время вышло (time exceeded) |
12 |
Проблема с параметром (parameter problem) |
13 |
Временная метка (timestamp) |
14 |
Ответ временной метки (timestamp reply) |
15 |
Информационный запрос (information request) |
16 |
Информационный ответ (information reply) |
17 |
Запрос адреса (address request) |
18 |
Ответ адреса (address reply) |
Маска по умолчанию - 6188, в ней используются сообщения типов 3, 4, 11 и 12:
ratemask = 23 + 24 + 211 + 212
Параметры TCP.
DoS-атака «SYN-flood», при которой жертва получает большое количество SYN-пакетов, запрашивающих открытие соединения. Эти SYN-пакеты используют системные ресурсы жертвы и не дают устанавливать соединения обычным пользователям. С помощью файловой системы /рrос можно предотвратить атаки подобного рода и повысить производительность. Описываемые в этом пункте файлы находятся в каталоге /proc/sys/net/ipv4/.
Если клиент закрывает соединение, он посылает удаленному сервису пакет FIN, удаленный компьютер в ответ на этот пакет отправляет подтверждение - пакет АСК и пакет FIN, который клиент должен подтвердить, то есть отправить собственный АСК.
Не все клиенты отправляют последний АСК. Это является причиной «подвисания» соединения - ресурсы, используемые соединением, не освобождаются, пока не пройдет определенное время (таймаут). Установить таймаут можно в файле tcp_fin_timeout. Значение по умолчанию - 60 секунд. 20 - это наименьшее допустимое значение для таймаута.
Дополнительной защитой от SYN-атаки является так называемый SYN-Cookies. Относительно SYN-пакета Cookies означает номер ISN - начальный порядковый номер. ISN - это число, которое выбирает ядро при обмене пакетами для установки соединения. SYN Cookies поддерживаются всеми стандартами TCP и для их использования не нужно производить какую-то дополнительную настройку клиента. Чтобы включить поддержку SYN Cookies в Linux, запишите значение 1 в файл tcp_syncookies:
echo l > /proc/sys/net/ipv4/tcp_syncookies
Если эта функция не поддерживается ядром, то этого файла в системе не будет. Для поддержки этого вида защиты в этом случае придется перекомпилировать ядро.
Еще один вид защиты от SYN-атаки - так называемый SYN BACKLOG. Подробности рассмотрены ниже.
Также можно увеличить размер очереди SYN-пакетов - установить максимальное число входящих SYN-пакетов. При превышении этого числа сервер будет отбрасывать SYN-пакеты. Максимальный размер очереди SYN-пакетов задается в файле tcp_max_syn_backlog . Значение в этом файле напрямую зависит от размера оперативной памяти. Если у компьютера более 1024 Мб оперативной памяти, можно установить значение 8192 или больше.
# echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog