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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

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

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

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1095 : 09 Марта 2011, 14:39:38 »
Угу.
Только некрасиво это как-то - потому и не хватает.

Оффлайн bubuntu-ru

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1096 : 09 Марта 2011, 19:33:17 »
Не понял как использовать ULOG - разъясните пожалуйста.

-m limit --limit 3/m -j ULOG --ulog-prefix "flood protection"

Пользователь решил продолжить мысль 09 Марта 2011, 19:35:34:
Берешь другой, и понимаешь. что в нём закрыт весь UDP траф на 53 порт... Интересно автор его проверял? И т.д.

А зачем открывать п53 юдипи в инет?

Пользователь решил продолжить мысль 09 Марта 2011, 19:47:43:
Стандртные политика Firestarter (отрывок):

-A OUTBOUND -p icmp -j ACCEPT
-A OUTBOUND -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTBOUND -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTBOUND -j ACCEPT

Скажите, я дурак или кто-то другой, или в этом есть тайный смысл?
Ну как сказать, ты выдрал из контекста просто, и изменил смысл.
В стартере есть еще и такая фишка
-A OUTBOUND -d 10.227.58.119/32 -j LSO #думаю понятно для чего это
-A OUTBOUND -p tcp -m tcp --dport 137:139 -j LSO
-A OUTBOUND -p udp -m udp --dport 137:139 -j LSO #и это
а потом только
-A OUTBOUND -j ACCEPT
а вот замыкалка
-A LSO -j LOG_FILTER
-A LSO -m limit --limit 5/sec -j LOG --log-prefix "Outbound " --log-level 6
-A LSO -j REJECT --reject-with icmp-port-unreachable
В итоге как и у вас отдача в ассепте :)
-A OUTPUT -o eth0 -j OUTBOUND
Конечно это шикарное правило сразу сет-й карте дать ассепт, без указания адреса.

Пользователь решил продолжить мысль 09 Марта 2011, 19:57:01:

Прикольно у тебя дропает однако
":INPUT DROP [973:123525]"
 у меня так пишет
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 09 Марта 2011, 19:57:01 от bubuntu-ru »

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1097 : 10 Марта 2011, 01:00:12 »
А зачем открывать п53 юдипи в инет?
Не знаю. А вот закрывать наглухо весь UDP траф на все портах, точно на пользу не пойдёт... Ведь я и не писал что он закрыт снаружи.
Сейчас уже лень искать тот скрипт.

Ну как сказать, ты выдрал из контекста просто, и изменил смысл.
1 Неправда - это вся цепочка OUTBOUND которую устанавливает стартер сразу после старта.
2 Как бы там ни было, а первых три правила наглухо бессмысленны в свете 4.

Прикольно у тебя дропает однако
:INPUT DROP [973:123525]
А что не так? Можно словами пояснить?

Оффлайн bubuntu-ru

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1098 : 10 Марта 2011, 01:22:47 »
1. Ну все же было так сначала  "что в нём закрыт весь UDP траф на 53 порт", а стало так "А вот закрывать наглухо весь UDP траф на все портах, точно на пользу не пойдёт."
2. Пример со стартера
-A FORWARD -i eth0 -j OUTBOUND
-A FORWARD -d 192.168.1.0/24 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
убери 1 первую цепочку, что будет? Я не про то, что хорошо а что плохо, а про контекст.
3. :)

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1099 : 10 Марта 2011, 01:29:33 »
1 Ну таки там были открыты порты 67 и 68 - про DHCP не забыли... (DHCP же? Не путаю?)
2 Я понимаю цель цепочки во всём контексте - претензии к самой цепочке - зачем там первые триправила? изменится ли её пропускная способность если их выкинуть? Нет. Так зачем гнать пакеты через лишнии правила?
3 Так и всё же, что не  так с :INPUT DROP [973:123525] ?

Пользователь решил продолжить мысль 12 Марта 2011, 01:07:36:
Несмотря на всю гибкость net filter, большенству пользователей нужны по всей видимости очень похожие настройки, но даже существование огромного количества HOW-TO , не даёт пользователям простого, в их представлении  пути, для настройки файервола.
По этой причине, и результатам собственных мук набросал небольшой комплект скриптов — этакий интерфейс к iptables с мимикрирующим названием — iptabler ;) (что наверное зря, но это же только для пробы).
Основная идея — настроить фильтрацию не вымучивая, страшные для большинства пользователей, правила, а указав параметры сети — все равно это более понятно обычному юзеру.
Итак, скрипты в аттаче, HOW-TO тут.

Если вы ничего не знаете о iptables, протоколах, скриптах, TCP/IP и прочих HTML'ах, и у вас самый обычный домашний компьютер, поступаете следующим образом.

1. Скачиваете архив и разорхивируте его.
2. Запускаете скрипт install.sh, (здесь придётся ввести пароль, а пользователям неGnome лучше сразу запустить от root'а).
3. Открываете терминал суаерпользователя (чтобы не писать sudo перед каждой командой), и вводите:
iptablerдолжна появится краткая справка.
4. Теперь, вводите:
iptabler config gedit5. В открывшемся файле внимательно прочитываете комментарии и указываете требуемые параметры (всё вроде несложно).
6. Сохраняете файл.
7. Выполняете:
iptabler runБудут сгенерированы и применены на 60 секунд (если не меняли параметры отладки) правила. За это время вы должны убедится, что всё работает как надо. Если так и есть то переходим к следующему пункту, а если нет, возварщаемся к пункту 4. или редактируем правила с помощью iptables.
8. Теперь для применения созданных правил достаточно ввести команду:
iptabler up (кстати iptabler down полностью очищает таблицы правил и устанавливает политики по умолчанию).
9. Чтобы правила сохранялись после перезагрузки надо включить «файерволл»:
iptabler on (выключить автозагрузку можно соответственно командой iptabler off)

Резюмируя:
iptabler config gedit ; # и редактируем правила
iptabler run
iptabler up
iptabler on

Если вы что-то да знаете, то можете:
1. Попробовать добавить свои правила — сохранить текущие правила net filter можно командой iptabler save — именно они будут автоматом подниматься при перезагрузке, если iptabler включен.
2. Выполнить команду iptabler edit gedit (или iptabler edit kate, или что там у вас...) и поковыряться в скриптах которые генерят правила.

Если вы разбираетесь в iptables так что вам нафик не нужны какие-то скрипты, то может вам понравится нескучный вывод команд iptabler rules и iptabler list. Кроме того, вы всегда можете помочь улучшить эти скрипты и/или генерируемые ими правила, и тогда это сообщение можно будет вынести в отдельную тему.

В любом случае iptabler команда help — покажет help по команде.

UPD: Чуть изменилась логика генерируемых правил - они стали более вменяемыми. Когда доведу до ума создам отдельную тему.
UPD: Последняя версия здесь: https://forum.ubuntu.ru/index.php?topic=20334.msg1061912#msg1061912
« Последнее редактирование: 21 Марта 2011, 23:37:35 от dr.Faust »

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1100 : 14 Марта 2011, 01:42:19 »
Следующие правила получились у меня на deskop'е:
# Generated by iptables-save v1.4.4 on Mon Mar 14 01:40:35 2011
*nat
:PREROUTING ACCEPT [110:11524]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.8.0/24 -o eth0 -j SNAT --to-source 86.110.МОЙ.IP
COMMIT
# Completed on Mon Mar 14 01:40:35 2011
# Generated by iptables-save v1.4.4 on Mon Mar 14 01:40:35 2011
*filter
:INPUT DROP [23:2256]
:FORWARD ACCEPT [305:153369]
:OUTPUT ACCEPT [47:5036]
:ICMP_BAD_PACKETS - [0:0]
:ICMP_PACKETS - [0:0]
:SAFETY_TRACE - [0:0]
:TCP_BAD_PACKETS - [0:0]
:TCP_PACKETS - [0:0]
:TCP_PORTS - [0:0]
:UDP_BAD_PACKETS - [0:0]
:UDP_PACKETS - [0:0]
:UDP_PORTS - [0:0]
-A INPUT -j SAFETY_TRACE
-A INPUT -p tcp -j TCP_PACKETS
-A INPUT -p udp -j UDP_PACKETS
-A INPUT -p icmp -j ICMP_PACKETS
-A ICMP_BAD_PACKETS -f -j LOG --log-prefix "icmp fragment:"
-A ICMP_BAD_PACKETS -f -j DROP
-A ICMP_PACKETS -j ICMP_BAD_PACKETS
-A ICMP_PACKETS -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ICMP_PACKETS -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A ICMP_PACKETS -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A SAFETY_TRACE -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A SAFETY_TRACE -i lo -j ACCEPT
-A SAFETY_TRACE -s 192.168.8.0/24 -i wlan0 -j ACCEPT
-A TCP_BAD_PACKETS -m conntrack --ctstate INVALID -j LOG --log-prefix "INVALID state:"
-A TCP_BAD_PACKETS -m conntrack --ctstate INVALID -j DROP
-A TCP_BAD_PACKETS -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j LOG --log-prefix "NEW without SYN:"
-A TCP_BAD_PACKETS -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j DROP
-A TCP_PACKETS -j TCP_BAD_PACKETS
-A TCP_PACKETS -j TCP_PORTS
-A TCP_PORTS -p tcp -m tcp --dport 3417 -j ACCEPT
-A TCP_PORTS -p tcp -m tcp --dport 58846 -j ACCEPT
-A UDP_BAD_PACKETS -p udp -m udp --dport 113 -j REJECT --reject-with icmp-port-unreachable
-A UDP_BAD_PACKETS -d 255.255.255.255/32 -p udp -m udp --dport 135:139 -j DROP
-A UDP_PACKETS -p udp -j UDP_PORTS
-A UDP_PACKETS -p udp -m udp --sport 53 --dport 1024:65535 -j ACCEPT
-A UDP_PACKETS -j UDP_BAD_PACKETS
-A UDP_PACKETS -p udp -m udp --dport 123 -j ACCEPT
COMMIT
# Completed on Mon Mar 14 01:40:35 2011
# Generated by iptables-save v1.4.4 on Mon Mar 14 01:40:35 2011
*mangle
:PREROUTING ACCEPT [409:162152]
:INPUT ACCEPT [7521:1510543]
:FORWARD ACCEPT [11653:9454695]
:OUTPUT ACCEPT [47:5036]
:POSTROUTING ACCEPT [18840:11627628]
COMMIT
# Completed on Mon Mar 14 01:40:35 2011

alexxnight

  • Гость
Re: HOWTO: Iptables для новичков
« Ответ #1101 : 14 Марта 2011, 19:51:47 »
to dr.Faust

Спасибо, что проделали такую большую работу. Я хочу присоединиться.
У меня, пожалуй, будет несколько вопросов:
1. может имеет смысл при логировании ограничивать скорость поступления в лог?
-m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "....."
2. почему фильтруются только icmp фрагментированные пакеты? Цепочка ICMP_BAD_PACKETS. И зачем они логируются?
3. почему фильтруются только tcp INVALID пакеты? Цепочка TCP_BAD_PACKETS. И зачем они логируются?
4. не совсем понятно, зачем это правило? UDP_PACKETS -p udp -m udp --sport 53 --dport 1024:65535 -j ACCEPT Вроде на DNS не похоже?
5. небольшое замечание: отсутствует цепочка UDP_PORTS, хотя ссылка на не есть в цепочке UDP_PACKETS

Теперь предложения :)
1. добавить защиту от подмены IP в цепочку TCP_BAD_PACKETS
iptables -A TCP_BAD_PACKETS -p tcp --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-reset
2. В принципе, можно было бы выделить в отдельную цепочку BAD_PACKETS. Но и так как сделано тоже логично.
3. в цепочке UDP_BAD_PACKETS ... --dport 135:139 -j DROP можно опустить -d 255.255.255.255/32
4. в цепочке TCP_BAD_PACKETS ! --tcp-flags FIN,SYN,RST,ACK SYN можно заменить на ! --syn
5. и можно было бы добавить еще несколько защит по желанию (syn-fllood, bruteforce)
« Последнее редактирование: 14 Марта 2011, 21:01:38 от alexxnight »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1102 : 14 Марта 2011, 20:46:39 »
1. Непонятно, на что вы отвечаете.
2. Накручивать "фичи" можно до бесконечности. К теме "для новичков" это не имеет отношения.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1103 : 15 Марта 2011, 02:40:14 »
По вопросам:
Большую часть правил я просто взял из какого-то мана, выкинув бессмысленные - осталось то, что осталось. Возможно что-то надо править - основой была сама идея - что-то типа файервола, но с максимумом понятных правил применимых в 80% ситуаций.
При этом идею раскидывания по цепочкам взял с первой или второй странице этой темы.

Конкретно по 3 - По чему только INVALID - ещё и NEW без SYN
Конкретно по 5 - она не отсутствует а пуста, на случай если пользователю надо открыть порт для UDP (open и close как раз это и делают - добавляют/удаляют разрешительные правила в цепочки TCP/UDP_PORTS)

По предложениям:
1 Можно подробнее - правило я понял, а для чего нет...
2 Много чепочек разводить нельзя - путаница для пользователя.
3 Да его всё наверно можно опустить - политика-то DROP. Тут надо подумать как лучше сделать.
4 Можно, но в сообщении вывод iptables-save - он его один черт покажет так как показал, а в скрипте и есть ! --syn
5 Можно подробнее о bruteforce и защите от него?

2AnrDaemon
2 Да тут дело не в фичах, а в грамотной архитектуре правил.


Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1104 : 15 Марта 2011, 03:16:21 »
:FORWARD ACCEPT
Я бы таки DROP поставил. Безотносительно режима работы системы.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн dr.Faust

  • Активист
  • *
  • Сообщений: 435
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1105 : 15 Марта 2011, 09:05:49 »
А почему?
Входящих соединений там быть не может - мы ведь за NAT'ом, а зачем нам боятся своего трафика?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1106 : 15 Марта 2011, 12:30:39 »
Он не твой. Форвард - это чужой трафик, проходящий через тебя.
Твой трафик только в INPUT и OUTPUT.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

alexxnight

  • Гость
Re: HOWTO: Iptables для новичков
« Ответ #1107 : 15 Марта 2011, 12:58:23 »
...основой была сама идея - что-то типа файервола, но с максимумом понятных правил применимых в 80% ситуаций...
Это мне и понравилось, поэтому решил поучаствовать :) ...

Конкретно по 3 - По чему только INVALID - ещё и NEW без SYN

ок. нехай логится. но добавить ограничение по кол-ву логированния пакетов, я думаю, стоит...

Конкретно по 5 - она не отсутствует а пуста, на случай если пользователю надо открыть порт для UDP (open и close как раз это и делают - добавляют/удаляют разрешительные правила в цепочки TCP/UDP_PORTS)

ок.

По предложениям:
1 Можно подробнее - правило я понял, а для чего нет...

Если коротко, то это правило не позволит злоумышленнику взламывать чужой компьютер от нашего "имени".

2 Много чепочек разводить нельзя - путаница для пользователя.

согласен. я бы предложил вынести в отдельную цепочку общие блокирующие правила.

3 Да его всё наверно можно опустить - политика-то DROP. Тут надо подумать как лучше сделать.
4 Можно, но в сообщении вывод iptables-save - он его один черт покажет так как показал, а в скрипте и есть ! --syn

да. точно.

5 Можно подробнее о bruteforce и защите от него?

bruteforce - это атака типа подбор пароля, например на сервис ssh. суть защиты - запретить доступ злоумышленнику, если с его компьютера слишком большое кол-во подключений в единицу времени.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1108 : 15 Марта 2011, 13:06:38 »
Для эффективной защиты от брута необходимо дополнительно ограничить количество попыток ввода пароля. Правда, это выходит за рамки топика, но безопасность системы - задача комплексная...
Подробности на форуме - искать SSH_CHECK
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

alexxnight

  • Гость
Re: HOWTO: Iptables для новичков
« Ответ #1109 : 15 Марта 2011, 14:43:34 »
Для эффективной защиты от брута необходимо дополнительно ограничить количество попыток ввода пароля. Правда, это выходит за рамки топика, но безопасность системы - задача комплексная...
Подробности на форуме - искать SSH_CHECK

да... кол-во попыток ввода пароля для SSH задается в параметре MaxAuthTries, файл /etc/ssh/sshd_config

 

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