Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #58, ОКТЯБРЬ 2003 г.

Как за каменной стеной!

Докучаев Дмитрий aka Forb

Xakep, номер #058, стр. 058-066-3


Вроде все! Осталось только сменить политику цепи INPUT:

# /sbin/iptables -P INPUT DROP

Если все было сделано верно, то после смены политики соединения не пропадут, а твоя машина будет в относительной безопасности ;).

Кстати, существует возможность производить сравнение не только по ip, но и по MAC-адресу, что положительно повлияет на защиту твоего сервера. Например, правило

# /sbin/iptables -A INPUT -s 192.168.0.1 -m mac --mac-source 00:C0:DF:10:19:FB -j ACCEPT

пропустит пакеты лишь с MAC-адресом 00:C0:DF:10:19:FB.

Слово об icmp

Пока я рассказал о способах фильтрации только tcp-пакетов. Теперь поговорим про icmp-протокол. Правила обработки таких пакетов должны содержать в себе параметр -p со значением icmp. Можно указывать тип пакета с помощью опции --icmp-type. Типы могут быть различными: echo-request, echo-reply и т.д. (полный список можно посмотреть командой /sbin/iptables -p icmp -h). Особый интерес представляет тип ответа на фильтрованные запросы. Например, ты с легкостью можешь сделать так, чтобы iptables отвечал пингующему, что твой узел недоступен либо permission denied (на кой фиг, ты, собственно, сюда пришел? ;)). Это осуществляется опцией --reject-with, значением которой будет, собственно, тип ответа на запрос. В итоге получаем правило:

# /sbin/iptables -A input -s ! 192.168.0.1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-prohibited

Восклицательный знак, разделенный пробелом со значением параметра, означает, что правило распространяется на все пакеты, кроме тех, которые удовлетворяют данному параметру. В нашем случае, проброс icmp-пакетов с доверенного 192.168.0.1 будет разрешен.

Всех впускать, никого не выпускать!

У тебя, наверное, не раз выпрашивали шелл. Конечно, давать акцес к своей тачке – не самая приятная вещь. Мало ли чего там наделает эта компьютерная братия, плюс придется оплачивать трафик, который они нагенерят. Но не стоит отчаиваться. В решении этой задачи нам опять поможет iptables. Он имеет встроенный модуль iptables_owner.so, который может закрывать соединения по uid, gid, pid, cmd и прочим атрибутам пользователя. Как ты понимаешь, модуль обрабатывает OUTPUT-цепочку. Давай потренируемся. Заведем в системе тестового пользователя tables с уидом 4000:

# /usr/sbin/useradd tables -s /bin/bash -u 4000

Наша задача: сделать так, чтобы юзер не мог серфить инет через твой шелл. Правило будет выглядеть следующим образом:

# /sbin/iptables -A OUTPUT -m owner --uid-owner 4000 -j REJECT

Логинимся под пользователем tables и пробуем куда-нибудь зателнетиться. Убеждаемся, что правило работает как надо.

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

Назад на стр. 058-066-2  Содержание  Вперед на стр. 058-066-4