Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: HOWTO: Iptables для новичков  (Прочитано 526712 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1110 : 15 Марта 2011, 23:23:52 »
Для эффективной защиты от брута необходимо дополнительно ограничить количество попыток ввода пароля.
да... кол-во попыток ввода пароля для SSH задается в параметре MaxAuthTries, файл /etc/ssh/sshd_config
Оно по дефолту ограничено 3.

Вобщем наверно можно промежуточное резюме?
Тогда вот.
TODO:
1 Ограничить флуд в лог во всех правилах логирования.
2 Убрать логирование INVALID пакетов TCP.
3 Добавить защиту от подмены IP в цепочку TCP_BAD_PACKETS
4 Убрать в цепочке UDP_BAD_PACKETS правило --dport 135:139 -j DROP (лишнее)

Спорные моменты:
1 Добавление правил от различного рода атак.
    Их наверное надо собрать в кучу - я ведь небольшой специалист (Спасибо что помогаете и подсказываете мне) по безопасности, о некоторых атаках я просто не знаю... А потом сделать опциональнымы в отдельном блоке, для неикушённых пользователей написать - типа - не знаете - не трожьте.

2 Вынесение всех правил для BAD пакетов в одну цепочку.
       Изначально я так и сделал, а потом распаралелил, и вот для чего - чтобы пакеты не проходили лишнии правила - всё равно потом пакеты раскидываются по типам, так зачем гнать ICMP и UDP пакеты через правила для TCP и наоборот.

Непонятные мне моменты:
1 Какое можно придумать правило от брутфорса? Что-то с модулем recent? Оно же тормозить будет весь траф и машина будет вся на netfilter пахать....
2 И всё таки FORWARD... Да, я понимаю что это не наш трафик - он идёт через нашу машину. НО! Он же идёт к компам в нашей сети. Это же братский тафик - зачем его фильтровать? Внешним он быть не может из-за NAT - значит он полностью инициирован братьями нашими меньшими... Ну я так думаю. Чего-то неправильно?
« Последнее редактирование: 16 Марта 2011, 01:12:48 от dr.Faust »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1111 : 16 Марта 2011, 01:39:34 »
Для эффективной защиты от брута необходимо дополнительно ограничить количество попыток ввода пароля.
да... кол-во попыток ввода пароля для SSH задается в параметре MaxAuthTries, файл /etc/ssh/sshd_config
Оно по дефолту ограничено 3.
Проверь, ты будешь удивлён...

Цитировать
Вобщем наверно можно промежуточное резюме?
Тогда вот.
TODO:
1 Ограничить флуд в лог во всех правилах логирования.
2 Убрать логирование INVALID пакетов TCP.
3 Добавить защиту от подмены IP в цепочку TCP_BAD_PACKETS
4 Убрать в цепочке UDP_BAD_PACKETS правило --dport 135:139 -j DROP (лишнее)

Спорные моменты:
1 Добавление правил от различного рода атак.
    Их наверное надо собрать в кучу - я ведь небольшой специалист (Спасибо что помогаете и подсказываете мне) по безопасности, о некоторых атаках я просто не знаю... А потом сделать опциональнымы в отдельном блоке, для неикушённых пользователей написать - типа - не знаете - не трожьте.

2 Вынесение всех правил для BAD пакетов в одну цепочку.
       Изначально я так и сделал, а потом распаралелил, и вот для чего - чтобы пакеты не проходили лишнии правила - всё равно потом пакеты раскидываются по типам, так зачем гнать ICMP и UDP пакеты через правила для TCP и наоборот.
Лучше раскидывать по частоте. :)
И лучше с этим в какой-нибудь другой топик уже съехать.

Цитировать
Непонятные мне моменты:
1 Какое можно придумать правило от брутфорса? Что-то с модулем recent? Оно же тормозить будет весь траф и машина будет вся на netfilter пахать....
Я же сказал, что искать... Там и готовый рецепт, и ссылки на более подробные инструкции.

Цитировать
2 И всё таки FORWARD... Да, я понимаю что это не наш трафик - он идёт через нашу машину. НО! Он же идёт к компам в нашей сети. Это же братский тафик - зачем его фильтровать? Внешним он быть не может из-за NAT - значит он полностью инициирован братьями нашими меньшими... Ну я так думаю. Чего-то неправильно?
Это сильно зависит от структуры твоей сети. У меня на попечении две... ладно, три, считая домашнюю, сети. Везде стоят Linuxовые серваки, но насколько разные сети... В одной инет приходит прямо в сервер, и выходит на WiFi роутер и локалку. В другой наоборот, инет приходит на роутер, оттуда в локалку, но экранирован от неё настройкой подсетей. Дома вообще зоопарк - два инета, ADSL и PPPoE, все в одной сети, все (оба роутера и сервер) работают NAT'ом. Зоопарк в клиентах (ноуты, коммуникаторы, десктоп). На каждый случай свои рецепты даже разделения трафика. Про защиту надо говорить особо, это целая тема.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

alexxnight

  • Гость
Re: HOWTO: Iptables для новичков
« Ответ #1112 : 16 Марта 2011, 15:25:01 »
Вобщем наверно можно промежуточное резюме?
Тогда вот.
TODO:
...
4 Убрать в цепочке UDP_BAD_PACKETS правило --dport 135:139 -j DROP (лишнее)

я думаю, что можно оставить, без указания IP адресов:
iptables -A UDP_BAD_PACKETS -p udp --dport 135:139 -j DROP

Спорные моменты:
1 Добавление правил от различного рода атак.
    Их наверное надо собрать в кучу - я ведь небольшой специалист (Спасибо что помогаете и подсказываете мне) по безопасности, о некоторых атаках я просто не знаю... А потом сделать опциональнымы в отдельном блоке, для неикушённых пользователей написать - типа - не знаете - не трожьте.

Да, согласен, потом после составления основного скелета можно будет вставить цепочки защит от атак.

2 Вынесение всех правил для BAD пакетов в одну цепочку.
       Изначально я так и сделал, а потом распаралелил, и вот для чего - чтобы пакеты не проходили лишнии правила - всё равно потом пакеты раскидываются по типам, так зачем гнать ICMP и UDP пакеты через правила для TCP и наоборот.

Здесь 2 соображения:
1. Распараллелить пакеты по цепочкам и не гонять их по заведомо неподходящим правилам - это хорошо и это правильно.
2. Но, во избежание путаницы и удобочитаемости лучше, чтобы логически объединенные правила были в одном месте.

Я думаю, что можно и так и так... Вычислительных мощностей сейчас достаточно. Да и к тому же мы ограничиваем не весь трафик, а только попытки установить соединения, а это менее значительная часть трафика...

Непонятные мне моменты:
1 Какое можно придумать правило от брутфорса? Что-то с модулем recent? Оно же тормозить будет весь траф и машина будет вся на netfilter пахать....

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

2 И всё таки FORWARD... Да, я понимаю что это не наш трафик - он идёт через нашу машину. НО! Он же идёт к компам в нашей сети. Это же братский тафик - зачем его фильтровать? Внешним он быть не может из-за NAT - значит он полностью инициирован братьями нашими меньшими... Ну я так думаю. Чего-то неправильно?

Согласен с AnrDaemon, сильно зависит от структуры сети.
Если машина не шлюз, а обычный десктоп, то можно не гонять трафик через FORWARD. этот трафик к нам отношения не имеет - он проходящий.

И если резюмировать, то какая картина получается?

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1113 : 18 Марта 2011, 01:21:00 »
Ну где-то примерно такая как под сполером.
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 18 Марта 2011, 01:40:56:
Лучше раскидывать по частоте.
Э... это как?

И лучше с этим в какой-нибудь другой топик уже съеха
Написал модерам.

Значит FORWARD остаёстся сейчас открытым, если в конфиге указано, что мы НАТ - как в примере, иначе - DROP.
Правила блокирования собрал в одном месте - в принципе цепочек осталось гораздо меньше и теперь они читаемей (соглашусь - это логично - тут простота чтения важнее, чем производительность).


« Последнее редактирование: 18 Марта 2011, 01:40:56 от dr.Faust »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1114 : 18 Марта 2011, 01:57:54 »
Наоборот вообще-то. Если NAT включен, то -P FORWARD DROP + правильные фильтры, если NAT выключен, то без разницы - до форварда ничего не дойдёт.

"По частосте" - первыми расположить правила, в которые попадёт (и уйдёт из цепочки по ACCEPT/DROP/REJECT/etc.) наибольшее количество пакетов, чтобы правила, расположенные после них, не замедляли работу системы.
« Последнее редактирование: 18 Марта 2011, 01:59:44 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1115 : 18 Марта 2011, 02:39:13 »
Наоборот вообще-то. Если NAT включен, то -P FORWARD DROP + правильные фильтры, если NAT выключен, то без разницы - до форварда ничего не дойдёт.
Логично, но тут вопрос как раз в правильных фильтрах. Мне лично в голову тут ничего не приходит...
Я ведь и писал раньше, что если нет форвардинга - смысл в DROP, а если он есть, то входящих пакетов там просто небудет. А что фильтровать в исходящем трафике я не представляю. (входящий и исходящий я имею ввиду по отношению к локальной сети)
"По частосте" - первыми расположить правила, в которые попадёт (и уйдёт из цепочки по ACCEPT/DROP/REJECT/etc.) наибольшее количество пакетов, чтобы правила, расположенные после них, не замедляли работу системы.
Понятно. Но ведь вроде так и есть. Нет?
Сначала пакет попадает в цепочку SAFETY_TRACE где пропускается подавляющая часть трафика.
Потом выбрасываем плохие пакеты и наконец разрешаем валидным пакетам установить соединение на разрешёных портах. Если это сделать раньше, не получится ли так, что соединение будет установлено плохим пакетом, например фрагментированным?
« Последнее редактирование: 18 Марта 2011, 02:41:33 от dr.Faust »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1116 : 18 Марта 2011, 03:07:19 »
А что такого плохого во фрагментированном пакете? O.o

По правилам - вообще не читал, голова не тем занята.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1117 : 19 Марта 2011, 00:01:35 »
А что такого плохого во фрагментированном пакете? O.o
Ну как же - что бы пройти правило NEW без SYN...

По правилам - вообще не читал, голова не тем занята.
Понимаю...
Там меня вот такой вопрос волнует - в правиле от подмены адреса:
-p tcp --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-resetзачем  SYN и ACK? Почему не просто:
-p tcp --tcp-flags ACK SYN -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-reset?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1118 : 19 Марта 2011, 00:08:36 »
NEW и INVALID это два состояния...
Моя имха, должно быть достаточно

-p tcp -m conntrack --ctstate INVALID -j REJECT --reject-with tcp-reset

но я не вчитывался в документацию, так что самому бы хотелось услышать мнение людей знающих.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1119 : 19 Марта 2011, 02:00:24 »
Вот ещё проблемка выплыла - не загружаются правила после перезагрузки в 10.04 (в 10.10 всё нормально).
Сделано там так - правила сохраняются в исполняемый /etc/iptabler/iptabler.rules и на него делается ссылка /etc/network/if-pre-up.d/netfilter-rules

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1120 : 19 Марта 2011, 02:09:38 »
Link точно без точек в имени?
В файле строка загрузки присутствует? ("#! /sbin/iptables-restore")
И, у меня в if-up.d лежит, работает.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1121 : 19 Марта 2011, 02:53:17 »
Дык он же скриптом создается - должно быть всё одинаково.
Проверю конечно завтра всё ещё раз, но уже завтра. Сегодня точнее.

alexxnight

  • Гость
Re: HOWTO: Iptables для новичков
« Ответ #1122 : 19 Марта 2011, 09:20:18 »
А что такого плохого во фрагментированном пакете? O.o
Ну как же - что бы пройти правило NEW без SYN...

Верно, есть такая разновидность атак

Там меня вот такой вопрос волнует - в правиле от подмены адреса:
-p tcp --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-resetзачем  SYN и ACK? Почему не просто:
-p tcp --tcp-flags ACK SYN -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-reset?

--tcp-flags работает так: вначале через запятую указывается список флагов, которые нужно проверить, а затем, после пробела, указываются флаги, которые должны быть подняты (указываются также через запятую). Поэтому SYN,ACK SYN,ACK говорит о том, что нужно проверять флаги SYN,ACK и должны быть установлены SYN,ACK.

А если указать --tcp-flags ACK SYN - это значит что нужно проверять флаг ACK и установлен должен быть флаг SYN. Вобщем не логично...

Пользователь решил продолжить мысль 19 Марта 2011, 09:23:45:
NEW и INVALID это два состояния...
Моя имха, должно быть достаточно

-p tcp -m conntrack --ctstate INVALID -j REJECT --reject-with tcp-reset

но я не вчитывался в документацию, так что самому бы хотелось услышать мнение людей знающих.

Если речь идет о правиле защиты от spoofing, то
-p tcp --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-reset

Если интересно, спросите, объясню почему именно так
« Последнее редактирование: 19 Марта 2011, 09:23:45 от alexxnight »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1123 : 19 Марта 2011, 14:54:47 »
Думаю, я понял из вашего предыдущего объяснения.
ctstate=NEW для отказа в установлении новых кривых соединений, INVALID - для отказа в подмене адреса во время сессии.
У меня только вопрос, ESTABLISHED|RELATED сработает до или после INVALID?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн bubuntu-ru

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1124 : 19 Марта 2011, 17:41:16 »
А так если
for a in /proc/sys/net/ipv4/conf/*/rp_filter;
do
echo 1 > $a
done

 

Страница сгенерирована за 0.399 секунд. Запросов: 25.