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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

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

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

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1605 : 10 Марта 2012, 12:58:13 »
Вот что вышло:
firewall.sh
(Нажмите, чтобы показать/скрыть)
и iptables-save на основе firewall.sh
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 10 Марта 2012, 13:05:04 от novis »
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1606 : 10 Марта 2012, 13:06:33 »
Цитировать
iptables -t nat -X
iptables -t nat -F
iptables -t nat -Z
Цитировать
# Сбрасываем цепочку POSTROUTING в таблице nat
iptables -t nat -F POSTROUTING
Цитировать
# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
Это все на всякий случай? Как покупать второй билет в автобусе, на случай потери первого))) Наверно iptables -t nat -F достаточно один раз использовать.
Фильтрация в цепочке FORWARD тоже возможна, к примеру:
iptables -I FORWARD 1 -m state --state INVALID -j DROPПо крайней мере я заметил, что у меня это правило срабатывает... Тут наверно какая та особенность состояния INVALID, точно не скажу.
P.S.
Что-то не пойму. Привала/цепочки для fail2ban-ssh чистятся, а само правила как и цепочка не создаются/существуют.
« Последнее редактирование: 10 Марта 2012, 13:20:02 от ivsatel »

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1607 : 10 Марта 2012, 13:18:49 »
Благодарю Вас за помощь. На основании Вашей корректировки изменил скрипт.
Да, верно, при применении скрипта выскакивает три раза ошибка
iptables v1.4.8: can't initialize iptables table `fail2ban-ssh': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Видимо нужно сделать как сказал AnrDaemon
Цитировать
1. При старте сети
  a) Загружаете шаблон правил через iptables-restore
  b) Вызываете скрипт f2b для набивания правил мясом.
2. При изменении мяса, только дёргать скрипт перебивки мяса.
« Последнее редактирование: 10 Марта 2012, 13:22:24 от novis »
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1608 : 10 Марта 2012, 13:30:38 »
Ага, понятно. Есть еще вопрос. Глобальное разрешение NEW на 80,21,22,443,8080,1194 порты, это действительно нужно, подняты http ftp и т.д. наружу?

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1609 : 10 Марта 2012, 13:42:01 »
Ага, понятно. Есть еще вопрос. Глобальное разрешение NEW на 80,21,22,443,8080,1194 порты, это действительно нужно, подняты http ftp и т.д. наружу?
Конечно нужны. Порты 80,8080и 443 думаю потом прикрыть в зависимости от задач.
А вот порты 21,22 и 1194 нужны соответственно для ftp ssh и openvpn, также как и нужен порт для jabber'a чтобы был доступен извне.
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1610 : 10 Марта 2012, 13:47:11 »
Сам я f2b не пользовался, но думаю все можно решить с помощью iptables. К примеру:
iptables -N F2B

iptables -A INPUT -p tcp -m multiport --dports 80,21,22,443,8080 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j F2B

iptables -A F2B -m recent --set --name f2b --rsource
iptables -A F2B -m recent --update --seconds 1 --hitcount 15 --name f2b --rsource -j DROP
iptables -A F2B -j RETURN

Можно и по другому.
Все равно открытие наружу портов, это приглашение для всякого рода неприятностей. Нужно по любому как-то их ограничивать.
« Последнее редактирование: 10 Марта 2012, 13:49:25 от ivsatel »

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1611 : 10 Марта 2012, 13:56:25 »
Все равно открытие наружу портов, это приглашение для всякого рода неприятностей. Нужно по любому как-то их ограничивать.
Вы имеете ввиду такие ограничения?
Цитировать
Блокирование bruteforce-атак (подбор пароля вслепую) на SSH и аналогичные сервисы.
iptables -N ssh_brute_check # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 10 минут (600 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес
iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 600 --hitcount 3 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A ssh_brute_check -m recent --set -j ACCEPT
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check
Теперь все попытки открыть новое SSH-соединение проверяются, и с одного IP-адреса можно открывать не более 2 соединений за 10 минут.
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1612 : 10 Марта 2012, 14:03:21 »
Вы имеете ввиду такие ограничения?
Цитировать
Блокирование bruteforce-атак (подбор пароля вслепую) на SSH и аналогичные сервисы.
iptables -N ssh_brute_check # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 10 минут (600 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес
iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 600 --hitcount 3 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A ssh_brute_check -m recent --set -j ACCEPT
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check
Теперь все попытки открыть новое SSH-соединение проверяются, и с одного IP-адреса можно открывать не более 2 соединений за 10 минут.

Да, таких "гадостей" предостаточно. И не только снаружи, внутри (в локалке) зараженные машины пользователей и т.д.

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1613 : 10 Марта 2012, 14:06:52 »
Вы имеете ввиду такие ограничения?
Цитировать
Блокирование bruteforce-атак (подбор пароля вслепую) на SSH и аналогичные сервисы.
iptables -N ssh_brute_check # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 10 минут (600 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес
iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 600 --hitcount 3 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A ssh_brute_check -m recent --set -j ACCEPT
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check
Теперь все попытки открыть новое SSH-соединение проверяются, и с одного IP-адреса можно открывать не более 2 соединений за 10 минут.

Да, таких "гадостей" предостаточно. И не только снаружи, внутри (в локалке) зараженные машины пользователей и т.д.

Если Вам не трудно, подскажите как должна обрабатываться новая цепочка. Т.е. допустим в скрипте где должно быть раположение такого рода цепочки.
Вы правы, как-то ограничивать нужно. Допустим берем правило для ограничения ssh
iptables -I INPUT 7 -m conntrack --ctstate NEW -p tcp --dport 22 -m hashlimit --hashlimit-mode srcip --hashlimit-upto 5/hour --hashlimit-name ssh -j ACCEPT

Получается следующим образом:
Из правила #Открываем порты для входящих соединений http-ftp-ssh-https-openVPN
iptables -I INPUT 6 -p tcp -m multiport --dports 80,21,22,443,8080,1194 --syn -m conntrack --ctstate NEW -j ACCEPT
убираю порт 22
И сразу же за этим правилом вставляю правило ограничения по ssh ?
« Последнее редактирование: 10 Марта 2012, 14:18:49 от novis »
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1614 : 10 Марта 2012, 14:20:27 »
Если Вам не трудно, подскажите как должна обрабатываться новая цепочка. Т.е. допустим в скрипте где должно быть раположение такого рода цепочки.

# Очистка правил
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t fail2ban-ssh -F

# Очистка всех цепочек
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -t fail2ban-ssh -X

# Очистка контейнеров
iptables -Z
iptables -Z -t nat
iptables -Z -t mangle
iptables -Z -t fail2ban-ssh

#######################################################

# Определяем политику по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Создание пользовательской цепочки
iptables -N F2B

# Задаем правила для пользовательской цепочки
iptables -A F2B -m recent --set --name f2b --rsource
iptables -A F2B -m recent --update --seconds 1 --hitcount 15 --name f2b --rsource -j DROP
iptables -A F2B -j RETURN

#######################################################

iptables -I INPUT 1 -j DROP
# Указываем при каких соответствиях направлять в пользовательскую цепочку
iptables -I INPUT 2 -p tcp -m multiport --dports 80,21,22,443,8080 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j F2B
iptables -I INPUT 3 -j DROP
iptables -I INPUT 4 -i lo -j ACCEPT
iptables -I INPUT 5 ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 6 NEW -j ACCEPT

*************************************************

hashlimit это ограничение, по этому оно должно стоять перед правилом с accept. Я по крайней мере придерживаюсь - "С начало все лишнее отсеять, а потом оставшееся/нужное разрешить"
По этому ограничение будет перед "#Открываем порты для входящих соединений http-ftp-ssh-https-openVPN"
« Последнее редактирование: 10 Марта 2012, 14:29:28 от ivsatel »

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1615 : 10 Марта 2012, 14:33:27 »
Если Вам не трудно, подскажите как должна обрабатываться новая цепочка. Т.е. допустим в скрипте где должно быть раположение такого рода цепочки.

# Очистка правил
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t fail2ban-ssh -F

# Очистка всех цепочек
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -t fail2ban-ssh -X

# Очистка контейнеров
iptables -Z
iptables -Z -t nat
iptables -Z -t mangle
iptables -Z -t fail2ban-ssh

#######################################################

# Определяем политику по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Создание пользовательской цепочки
iptables -N F2B

# Задаем правила для пользовательской цепочки
iptables -A F2B -m recent --set --name f2b --rsource
iptables -A F2B -m recent --update --seconds 1 --hitcount 15 --name f2b --rsource -j DROP
iptables -A F2B -j RETURN

#######################################################

iptables -I INPUT 1 -j DROP
# Указываем при каких соответствиях направлять в пользовательскую цепочку
iptables -I INPUT 2 -p tcp -m multiport --dports 80,21,22,443,8080 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j F2B
iptables -I INPUT 3 -j DROP
iptables -I INPUT 4 -i lo -j ACCEPT
iptables -I INPUT 5 ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 6 NEW -j ACCEPT

*************************************************

hashlimit это ограничение, по этому оно должно стоять перед правилом с accept. Я по крайней мере придерживаюсь - "С начало все лишнее отсеять, а потом оставшееся/нужное разрешить"
По этому ограничение будет перед "#Открываем порты для входящих соединений http-ftp-ssh-https-openVPN"
понял, Спасибо большое, Вы мне помогли решить много проблем, на начальной стадии.

Пользователь решил продолжить мысль 10 Марта 2012, 16:36:17:
Попробовал пробиться по этим правилам iptables-save на ftp не получается, зависает на проверке PORT (PORT — Войти в активный режим.)
Вот Log c клиента:
(Нажмите, чтобы показать/скрыть)
Подскажите, что не так.
iptables-save
(Нажмите, чтобы показать/скрыть)

При очищенном iptables-save вход на фтп выполняется как в активном так и в пассивном режиме.
iptables-save
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 10 Марта 2012, 16:38:17 от novis »
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1616 : 10 Марта 2012, 16:57:58 »
-A INPUT -f -j DROP Это для чего?
А так, самый простой способ проверить правила это добавлять их по одному.
Разумеется внеся основные с начала:

# Очистка правил
iptables -F
iptables -t nat -F
iptables -t mangle -F

# Очистка всех цепочек
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Очистка контейнеров
iptables -Z
iptables -Z -t nat
iptables -Z -t mangle

# Определяем политику по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#отбрасываем пакеты, которые невозможно идентифицировать
iptables -I INPUT 1 -m state --state INVALID -j DROP
iptables -I INPUT 2 -m state --state NEW -p tcp ! --syn -j DROP

# Разрешаем трафик на loopback-интерфейсе
iptables -I INPUT 3 -i lo -j ACCEPT

#Разрешаем хосту принимать пакеты от уже установленных соединений
iptables -I INPUT 4 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Открываем порты для входящих соединений http-ftp-ssh-https-openVPN
iptables -I INPUT 5 -i $локальный_интерфейс -p tcp --syn -m conntrack --ctstate NEW -j ACCEPT
« Последнее редактирование: 10 Марта 2012, 17:05:10 от ivsatel »

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1617 : 10 Марта 2012, 17:57:02 »
-A INPUT -f -j DROP Это для чего?
А так, самый простой способ проверить правила это добавлять их по одному.
Разумеется внеся основные с начала:

# Очистка правил
iptables -F
iptables -t nat -F
iptables -t mangle -F

# Очистка всех цепочек
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Очистка контейнеров
iptables -Z
iptables -Z -t nat
iptables -Z -t mangle

# Определяем политику по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#отбрасываем пакеты, которые невозможно идентифицировать
iptables -I INPUT 1 -m state --state INVALID -j DROP
iptables -I INPUT 2 -m state --state NEW -p tcp ! --syn -j DROP

# Разрешаем трафик на loopback-интерфейсе
iptables -I INPUT 3 -i lo -j ACCEPT

#Разрешаем хосту принимать пакеты от уже установленных соединений
iptables -I INPUT 4 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Открываем порты для входящих соединений http-ftp-ssh-https-openVPN
iptables -I INPUT 5 -i $локальный_интерфейс -p tcp --syn -m conntrack --ctstate NEW -j ACCEPT

У меня в правиле было -I
-A INPUT -f -j DROP
-I вставить правило в цепочку
-A добавить новое правило в конец заданной цепочки.
INPUT входящие пакеты
-f распространяется на все фрагменты фрагментированного пакета, кроме первого, сделано это потому, что нет возможности определить исходящий/входящий порт для фрагмента пакета, а для ICMP-пакетов определить их тип. С помощью фрагментированных пакетов могут производиться атаки на ваш брандмауэр, так как фрагменты пакетов могут не отлавливаться другими правилами. (Force Fragments packets check. Packets with incoming fragments drop them. This attack result into Linux server panic such data loss.)
-j выполнить действие
DROP отбросить пакеты (само действие)
Т.е. правило отбрасывает фрагментированные пакеты. И ещё где-то прочитал что это защита от атаки.
ЗЫ: Строго не судите....)
« Последнее редактирование: 10 Марта 2012, 18:08:05 от novis »
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1618 : 10 Марта 2012, 18:21:16 »
-A INPUT -f -j DROP
-I вставить правило в цепочку
-A добавить новое правило в конец заданной цепочки.
INPUT входящие пакеты
-f распространяется на все фрагменты фрагментированного пакета, кроме первого, сделано это потому, что нет возможности определить исходящий/входящий порт для фрагмента пакета, а для ICMP-пакетов определить их тип. С помощью фрагментированных пакетов могут производиться атаки на ваш брандмауэр, так как фрагменты пакетов могут не отлавливаться другими правилами. (Force Fragments packets check. Packets with incoming fragments drop them. This attack result into Linux server panic such data loss.)
-j выполнить действие
DROP отбросить пакеты (само действие)
Т.е. правило отбрасывает фрагментированные пакеты. И ещё где-то прочитал что это защита от атаки.
О раньше не обращал внимания.
А по поводу ftp вот http://www.opennet.ru/docs/RUS/iptables/#COMPLEXPROTOCOLS

Оффлайн novis

  • Любитель
  • *
  • Сообщений: 68
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1619 : 10 Марта 2012, 18:53:39 »
ivsatel,
Благодарю, помогло это:
#Подгрузка необходимых модулей
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

Добавил после очистки и перед определением политики.
Помогите решить проблему https://forum.ubuntu.ru/index.php?topic=176398.msg1408153#msg1408153

 

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