Как за каменной стеной! Докучаев Дмитрий 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-бота. Подобное реализуется такой вот командой: |