LINUX.ORG.RU

[iptables]конфигурация для «домашнего» использования


0

1

Всем привет!

На компьютерах домашней сети (ADSL-модем -> wi-fi-точка доступа -> компьютеры) хочу использовать следующую конфигурацию iptables:

#Чистим существующие правила во всех цепочках
iptables -F

#Политики по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#Разрешаем 127.0.0.0 - необходимо для нормальной работы ОС
iptables -A INPUT -i lo -j ACCEPT

#Принимаем пакеты для программ, которые уже установили соединение или требуют создание нового соединения
iptables -A INPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT 

#Запрещаем  трафик не открывающий новое соединение и не принадлежащий никакому установленному соединению
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

#Разрешаем новые ICMP запросы, полезно если что-то пойдёт не так
iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

Вопросы:

  1. Достаточно ли всего этого, или требуются ещё какие-то правила (или вообще лучше явно указывать для каких портов разрешены соединения, без применения модуля conntrack)?
  2. Стоит ли использовать фильтрацию по MAC- и ip-адресам? Если да, то использовать «глобальную» фильтрацию:
    iptables -A INPUT -s 192.168.0.0/24 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -m mac --mac-source mac1,mac2,...,macN -j ACCEPT
    
    или фильтровать пакеты только для отдельных сервисов, например, NFS:
    iptables -A INPUT -p tcp --dport 2049 -s 192.168.0.0/24 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -m mac --mac-source mac1,mac2,...,macN -j ACCEPT,
    
    где нужно использовать MAC-адреса И компьютеров ЛВС И маршрутизатора?
  3. Запрещать все новые входящие соединения, не обработанные предыдущими цепочками, следует используя:
    iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset 
    iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
    iptables -A INPUT -j REJECT --reject-with icmp-proto-unreach
    
    или ограничиться политиками по умолчанию?
  4. Будут ли совместимы настройки iptables различных версий при использовании модулей (или для совместимости лучше использовать «простое решение» - явное указанием портов, для которых разрешено устанавливать соединения)? Будут ли проблемы при применении одних и тех же настроек в различных (более-менее современных) дистрибутивах?

На правах оффтопика:

  • В Ubuntu и Fedora:
    sudo iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain 
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain 
    ACCEPT     udp  --  anywhere             anywhere            udp dpt:bootps 
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:bootps 
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     all  --  anywhere             192.168.122.0/24    state RELATED,ESTABLISHED 
    ACCEPT     all  --  192.168.122.0/24     anywhere            
    ACCEPT     all  --  anywhere             anywhere            
    REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
    REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Это ведь не очень хорошо (из-за INPUT, FORWARD policy ACCEPT)? Или Linux настолько защищён при конфигурации по умолчанию, что даже firewall настраивать не нужно/можно в подавляющем большинстве случаев обходиться такой конфигурацией iptables?
  • Для обеспечения безопасности («на бытовом уровне») достаточно будет настроить только iptables или очень желательно что-то ещё (тщательная настройка apparmor/selinux, управление правами доступа, мониторинг активности портов, трафика, журналов)?
  • Для защиты от дешифровки трафика достаточно использовать WPA2?
  • Можно ли в настройках wi-fi роутера указать тот же диапазон ip-адресов для локальной сети, что и в настройках ADSL-модема?

>Для защиты от дешифровки трафика достаточно использовать WPA2?
К нему нужно добавить ещё и нормальный пароль.

Для обеспечения безопасности («на бытовом уровне») достаточно будет настроить только iptables

Молодец конечно, что маны по iptables куришь (я вот никак себя по хорошему не заставлю), но для обеспечения безопасности достаточно и настройки через банальный ufw/gufw.
Забанить весь входящий трафик и открыть нужные порты для нужных IP.

тщательная настройка apparmor/selinux

AppArmor имеет очень простые конфиги, и настраивается за 20 минут для любого софта/сервиса.
При этом если покрыть конфигами сервисы работающие с сетью, то это повысит безопасность системы в разы.

Ещё можно добавить в автостарт (у меня гном):
aa-notify -f /var/log/syslog -p -v
Можно им же мониторить логи с серверов, и переписать не сложно.
Только сначало надо немного поправить «/usr/bin/aa-notify»:
1 - Найти в коде «sub send_message {»
2 - Заменить стандартный код уведомления на этот:
system «$notify_exe», "-t", «0», "-i", «gtk-dialog-warning», "-u", «critical», "--", «AppArmor Message», «$msg»;
Фишка в том, что по дефолту aa-notify посылает уведомление как например IM клиент.
Т.е оно отображается в области уведомлений, и через 5 секунд(вроде) пропадает.
А если прописать опцию "-t 0" для notify-send, то сообщение появится в виде окошка.
Скрин короче:
http://imageshack.us/photo/my-images/830/screenshotyk.png/

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

PS: Вообще вопрос в том, от кого ты городишь защиту?
От мимо проходящих ботов, или от тех кто целенаправленно будет ломать машину, например чтобы попасть в локалку (фирма например)?

winddos ★★★ ()

Придерживайся принципа: защита не должна мешать тебе в работе в системе.
Т.е например не стоит делать долбанутое фильтрование по mac*у, которое тебе будет мешать если например надо будет подключить в сеть несколько ноутбуков с шиндовс.
А ещё не стоит делать мониторинг, который будет тебя отвлекать как антивирус касперского, который отображает кучу бесполезной инфы.

Иначе в один прекрасный день какой то из твоих «уровней защиты» тебя задолбает, и ты плюнешь на все вообще.
Поэтому настраивать надо так, чтобы оно работало само, но при явных признаках вторжения - рапортовало тебе всеми доступными способами, или схороняло логи и отключало сеть.

У меня весь guiшный софт который работает с сетью имеет профиль AppArmor, и никуда дальше своей папки он лезть не может.
Это совершенно мне не мешает (т.к файлы в интернет я заливаю редко, не лень перенести их в папку откуда браузер может читать).

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

Конфигурация зависит в первую очередь от того, кем является потенциальный атакующий, и зачем он может атаковать машину.
Сервер с БД или репозиторием компании, согласись, это не домашний комп параноика васи, который может себе позволить ядро с grsec и noexec везде куда может писать пользователь.

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

Забанить весь входящий трафик и открыть нужные порты для нужных IP.

Т.е. использовать конструкции вида:

iptables -A INPUT -p tcp -s X.X.X.X --dport Y -j ACCEPT

предпочтительнее (лучше), чем модуль conntrack?

Вообще вопрос в том, от кого ты городишь защиту?

И от ботов, и от целенаправленного взлома лицами с избытком свободного времени. Защищаю обычную локальную сеть (три-четыре компьютера, на каждом Linux).

За совет по мониторингу журналов спасибо.

В этой же теме: что безопаснее: NFS- или ssh-сервер на нестандартном порту (для scp)?

bor-e ()
Ответ на: комментарий от bor-e

>предпочтительнее (лучше), чем модуль conntrack?
Я, увы, не разбираюсь в iptables, юзаю скрипт ufw :)

И от ботов, и от целенаправленного взлома лицами с избытком свободного времени. Защищаю обычную локальную сеть (три-четыре компьютера, на каждом Linux).

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

Лучше ориентируйся вот на что:
1 - Со внешки твоя локалка (ip ведь один внешний?) не должна никак отличаться от других машин в подсети.
2 - Желательно чтобы IP её не палился в гугле, например если ты заведешь бложек с DDNS, то сканить будут постоянно.
3 - Желательно чтобы на nmap -A со внешки твоя машина отдавала как можно меньше информации.
4 - Если провайдер не фильтрует сам, то ICMP тоже отключить, hostname во внешку тоже отдовать не должно (или он должен быть похож на те которые рядом в подсети).

что безопаснее: NFS- или ssh-сервер на нестандартном порту (для scp)?

OpenVPN для доступа в локалку, а далее уже что угодно, у меня например в локалке git и веб сервер.
Т.е открытый порт только один - VPN.

Либо вариант проще в настройке, и может даже надежнее: sshd (по сертификатам) + port knocking

winddos ★★★ ()

ADSL-модем -> wi-fi-точка доступа -> компьютеры

iptables -P INPUT DROP

Это ведь не очень хорошо (из-за INPUT, FORWARD policy ACCEPT)?

за двойным натом ты боишься открыть input ?

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

Если ценного контента внутри нет

Контент как у всех: личная переписка, архив фото. С одной стороны, ничего особо ценного, с другой стороны, всё равно не хочется, чтобы это увидел тот, кому это не предназначается. Да и потерять (в смысле rm -rf /) всё это никак нельзя.

За советы спасибо, буду иметь ввиду.

bor-e ()
Ответ на: комментарий от xtraeft

за двойным натом ты боишься открыть input ?

Я очень плохо разбираюсь в вопросах работы сетей и обеспечения безопасности, с трудом представляю себе, как всё это работает. Поэтому и боюсь.

bor-e ()

Может быть, кто-нибудь подскажет, нужно ли разрешать новые соединения (--ctstate NEW) или нет, не то в одних примерах это есть, а в других обходятся только ESTABLISHED, RELATED.

bor-e ()
Ответ на: комментарий от bor-e

нужно ли разрешать новые соединения (--ctstate NEW) или нет, не то в одних примерах это есть, а в других обходятся только ESTABLISHED, RELATED

Нет, не нужно.

Я очень плохо разбираюсь в вопросах работы сетей и обеспечения безопасности, с трудом представляю себе, как всё это работает. Поэтому и боюсь.

Подход верный: сначала всё запретить, а потом разрешить только необходимое.

aidaho ★★★★★ ()
Ответ на: комментарий от bor-e

Ты сидишь за натом? Или у твоего сетевого интерфейса реальный IP? Если за натом, то нафиг тебе по большому счёту ковыряться с файрволлом. Порты вовне открыты? Если нет, то того, что ты в первом сообщении привёл вполне достаточно.

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