LINUX.ORG.RU
ФорумAdmin

Вопрос по применению правил Iptables

 


0

1

ОС Debian 10 подключен через SSH Накидал правила для фаервола, добавил их в автозагрузку через systemd

#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

#Внешний интерфейс Интернет
export WAN=enp0s3
#Интерфейс к которому подключена локальная сеть
export LAN=enp0s8

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

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT
# разрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из-за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP


Применю правила (systemctl restart iptables.service(имя созданного мной юнита))
через iptables -vL вижу что правила применились, однако ssh подключение не отвалилось. Собственно вопрос почему так ?  
★★

Последнее исправление: drac753 (всего исправлений: 2)

однако ssh подключение не отвалилось
Собственно вопрос почему так ?

# Пропускать все уже инициированные соединения, а также дочерние от них

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

Вот слона тоя и не увидел, спасибо за помощь

drac753 ★★
() автор топика

netfilter-persistent? Не, не слышал.

anonymous
()

И это $IPT -P OUTPUT DROP Это очень, ОЧЕНЬ плохая практика, равно как и вообще вешать на OUTPUT какие-то правила без крайней необходимости.

Это делается в исключительных случаях, при отладке сервисов, над которыми ты не имеешь контроля и не доверяешь. Скажем, при ловле злоумешлынников.

anonymous
()

Комплируй на Баше, идиот.

anonymous
()
Ответ на: комментарий от anonymous

И это $IPT -P OUTPUT DROP Это очень, ОЧЕНЬ плохая практика, равно как и вообще вешать на OUTPUT какие-то правила без крайней необходимости.

Глупость. Ты должен фильтровать все как на входе так и на выходе!

Это не очень хорошо:

$IPT -A OUTPUT -o $LAN -j ACCEPT

А вот это совсем очень плохая практика:

$IPT -A OUTPUT -o $WAN -j ACCEPT

anonymous
()

однако ssh подключение не отвалилось

conntrack -F только если что, я вам этого не советовал.
А целом портянка знатная. Успехов вам с таким подходом (накопипастил неизвестно что, неизвестно откуда) Лучше бы iptables tutorial прочитали.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anonymous

Не так не прокатит. Только как сказал ans.

anonymous
()
Ответ на: комментарий от anonymous

Ты должен фильтровать все как на входе так и на выходе!

Зачем на выходе? Так только дебилы делают. Ты фильтруешь трафик, которому не доверяешь. Если ты не доверяешь собственному исходящему трафику - то ты не доверяешь собственной системе. А если система скомпрометирована, то фильтровать в этом случае УЖЕ бесполезно.

Если твоя система потенциально может быть скомпрометирована (например, ты допускаешь подключение внешних пользователей), то её помещают в DMZ и рулят трафиком на внешнем маршрутизаторе.

Это не очень хорошо:
$IPT -A OUTPUT -o $LAN -j ACCEPT
А вот это совсем очень плохая практика:
$IPT -A OUTPUT -o $WAN -j ACCEPT

Разумеется, вышеперечичленное нехорошо. Нормальные люди делают -P OUTPUT ACCEPT и без крайней необходимости не лезут в OUTPUT.

anonymous
()
Ответ на: комментарий от anonymous

Трафик на сетевом экране должен фильтроватся как на входе так и на выходе! Также трафик должен фильтроватся в таблице форвард! По умолчанию весь трафик в этих таблицах дропаем. Потом добавляем только необходимые правила.

У меня в таблице OUTPUT примерно следующие правила:

1. Политика дроп по умолчанию.

2. Пропуск для интерфейса lo.

3. Пропуск только для юзера tor с внешнего интерфейса (DNS тоже с tor берем).

4. Логирование остального трафика. И дальнейшая его обработка для определения возможного взлома.

anonymous
()
Ответ на: комментарий от anonymous

То о чем писали выше. Это ваши индивидуальные «тараканы», раз вам требуется ограничить одним пользователем, то видимо вам так и надо. Но не надо однозначно вашу личную задачу транслировать с «выражениями» однозначности для всех остальных.

anc ★★★★★
()
Ответ на: комментарий от anc

То о чем писали выше.

С вашим первым постом согласен, вместо state использовать -m contrac --ctstate

Очень хороший совет прочесть документацию. В которой написано что порядок правил существенный. Так правила с

INVALID -j DROP

должны быть в самом начале.

Также в хорошей документации написано что фильтрацию стоит проводить в таблице filter для INPUT, OUTPUT всегда, а на роутере еще и для FORWARD. Если этого не сделать то сетевой экран считается некорректным, а админ халтурщиком.

anonymous
()
Ответ на: комментарий от anonymous

вместо state использовать -m contrac --ctstate

Столько ошибок в «написании слова xyz» и вы ещё раздаете советы другим...

Также в хорошей документации написано что фильтрацию стоит проводить в таблице filter для INPUT, OUTPUT всегда

в хорошей документации

Огласите весь список пжлуста.

anc ★★★★★
()
Ответ на: комментарий от anc

Столько ошибок в «написании слова ...

Такой аргумент в теме о корректности пакетного фильтра мне просто нечем крыть.

anonymous
()
Ответ на: комментарий от anonymous

Чтобы РКН забанил хорошие доки? Или кто похерил?

Так я и прошу вас дать ссылки на эти «хорошие доки», я видимо читаю «плохие», а вот «хорошие» не попадались.

Такой аргумент в теме о корректности пакетного фильтра мне просто нечем крыть.

Естессно нечем, если вы даже не знаете написание слова.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

я видимо читаю «плохие»,

Какое действие предполагает слово filter?

Мы, для конкретности, обсуждаем реализацию пакетного фильтра на основе iptables.

Для чего нужна таблица filter в пакетном фильтре? Из каких подтаблиц она состоит?

Ты не похож на админа халтурщика который ленится настроить [b]корректный пакетный фильтр с пропуском только необходимого входящего И ИСХОДЯЩЕГО трафика[/b]. Учитывая что хороший пакетный фильтр блокирует ~100% сетевых вирусов/ботнетов и то как ты здесь ссышь кипятком когда речь заходит о [b]необходимости фильтрации всего ИСХОДЯЩЕГО трафика[/b] предполагаю твою прямую заинтересованность в уменьшении корректности работы сетевых систем.. Делаю вывод - ты обеспечивает работу вредоносного/вирусного/ботнета в сети!

anonymous
()
Ответ на: комментарий от anc

Держите вредителя в наших рядах!

Ты не только вводишь людей в заблуждение с пакетным фильтром, препятствуя [b]корректной фильтрации всего ИСХОДЯЩЕГО трафика[/b].

Ты также препятствует соблюдению главного правила построения корректных ОС: [b]все что исполняется не должно изменятся, а что изменяется исполнятся[/b]: Сравнение SysV и systemd (комментарий)

anonymous
()
Ответ на: комментарий от anonymous

Делаю вывод - ты обеспечивает работу вредоносного/вирусного/ботнета в сети!

Цитата от другого анона выше «Ты фильтруешь трафик, которому не доверяешь. Если ты не доверяешь собственному исходящему трафику - то ты не доверяешь собственной системе. А если система скомпрометирована, то фильтровать в этом случае УЖЕ бесполезно.»

Так вот следуя вашей логике, вы тяните всякую каку в свою систему, и это вообще нормальное явление, все так делают, которая там плодиться и размножается. И при этом искренне уверены что вас спасет iptables якобы он будет блокировать исходящие пакеты, вот правда правда будет. Это что-то в духе, я пускаю себе домой всяких нариков, гопников, урок, это не страшно, я продолжаю верить что замок на двери (я все ещё верю что он есть, хотя от него уже одна видимость осталась) не выпустит их и они без моего ведома не выйдут.

Продолжая цитаты того же анона «Если твоя система потенциально может быть скомпрометирована (например, ты допускаешь подключение внешних пользователей), то её помещают в DMZ и рулят трафиком на внешнем маршрутизаторе.»
Что как раз верно.

ЗЫ Эх, видимо ссылок на эти «хорошие доки» я так и не дождусь.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anonymous

Упс, на ночь глядя случайно перечитал это:

Для чего нужна таблица filter в пакетном фильтре? Из каких подтаблиц она состоит?

Доставило:

таблица filter
Из каких подтаблиц она состоит?

Что такое «подтаблиц» ведомо только тараканам в вашей голове.
http://inai.de/images/nf-packet-flow.svg
таблиц filter ровно столько сколько их есть, понятия «подтаблиц» пока не завезли.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)

Собственно, вопрос: почему так ?

По кочану папайе…

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.