TORoRAM. Форум ни о чём

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » TORoRAM. Форум ни о чём » Linux » Как настроить iptables для защиты компьютера с Linux от взлома


Как настроить iptables для защиты компьютера с Linux от взлома

Сообщений 1 страница 4 из 4

1

Как настроить iptables для защиты компьютера с Linux от взлома

Хотя Linux славится своей надежностью и безопасностью, светить открытыми портами в сеть, где полно каккеров и прочих извращенцев — не самая хорошая идея. Рассмотрим как обнести все потенциально уязвимые отверстия огненной стеной.

[TOC Настройка IPTables]

Что такое iptables

Для этих целей добрые программисты запилили в Линукс фаейрвол iptables. Он быстр, надежен и бесплатен, однако, мало кто им пользуется по причине сложной и запутанной настройки. Интернет-издание Либератум первым в мире предлагает простой конфиг. Скописатил, запустил, забыл.

Как сохранять настройки iptables в Ubuntu и Debian

Но сначала небольшое отступление. Программа iptables устроена таким хитрым образом, что все сделанные настройки слетят при первой же перезагрузке. Поэтому неопытные админы стараются сохранить настройки в .sh-файле, а сами файлы раскидывают где попало. Мы не будем уподобляться этим наивным слепцам и сделаем все правильно. Есть программа, предоставляющая для iptables стандартный интерфейс Linux-сервиса и умеющая сохранять и восстанавливать правила. Имя ей — iptables-persistent.

apt-get install iptables-persistent

Вот теперь можно переходить к созданию правил для файервола. Все делается от имени суперпользователя.

Базовая настройка iptables

iptables -F
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Этот конфиг предполагает следующее поведение:

  •  все входящие соединения выпиливаются — это для каккеров;
  •  все исходящие соединения устанавливаются — это для хозяина системы;
  •  пропускаются все уже установленные соединения;
  •  пропускается всё в обоих направлениях на интерфейсе lo;
  •  выпиливаются нулевые и syn-flood-пакеты — от пионеров;
  •  пропускаются входящие соединения на 22й порт (это для того, чтобы можно было зайти по ssh, а также для того, чтобы продемонстрировать как пользователь может самостоятельно открыть любой порт — нужно скопировать эту строку и заменить номер порта).

Теперь проверим, правильно ли iptables понял наши указания:

iptables -L -v

Получаем следующую картину:

iptables -L -v
Chain INPUT (policy DROP 3710 packets, 163K bytes)
pkts bytes target prot opt in out source destination
851 77161 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 DROP tcp -- any any anywhere anywhere tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
2 80 DROP tcp -- any any anywhere anywhere tcpflags:! FIN,SYN,RST,ACK/SYN state NEW
0 0 DROP tcp -- any any anywhere anywhere tcpflags: FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
3 180 ACCEPT all -- lo any anywhere anywhere
1 52 ACCEPT tcp -- any any anywhere anywhere tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 1017 packets, 424K bytes)
pkts bytes target prot opt in out source destination

Да, все верно. И что интересно, iptables уже показывает сколько пакетов удалось отбросить — policy DROP 3710 packets. То есть, не успели мы еще настроить всё как следует, а компьютер уже попытались отыметь каккеры — какое всё же опасное место этот ваш интернет!

Netfilter Persistent

Теперь сохраняем правила для последующего употребления:

iptables-save > /etc/iptables/rules.v4

И перезапустим сервис:

service iptables-persistent restart

Все, теперь девственности портов ничего не угрожает.

Примечание

В новых версиях Ubuntu и Debian служба iptables-persistent может называться netfilter-persistent.

2

iptables и динамические правила (keep state)

Такого понятия как динамические правила в iptables не существует. Правильно называть — отслеживание состояния keep state.

В Iptables существуют такие типа состояния (доступно, если модуль ‘state‘ загружен с помощью ‘-m state‘):

NEW — Все пакеты устанавливающие новое соединение (Например, запрос на установление соединения)

ESTABLISHED — Все пакеты принадлежащие установленному соединению (Например, GET ответ web-сервера)

RELATED — Пакеты, не принадлежащие установленному соединению (то есть те пакеты, которые являются частью новых соединений, которые было инициированы уже установленным ESTABLISHED соединением), но связанные с ним. (Например — FTP в активном режиме использует разные соединения для передачи данных. Эти соединения связанны.)

INVALID — Пакеты, которые не могут быть по тем или иным причинам идентифицированны. Например ICMP ошибки не принадлежащие существующим соединениям

Теперь перейдём к созданию правил. Первым делом изменим политики по умолчанию:

iptables -P INPUT DROP
iptables -P OUTPUT DROP

Нужно ещё не забыть разрешить трафик по петлевому интерфейсу (что бы сервер сас с собой мог общаться по адресу 127.0.0.1):

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

И напоследок — правил отслеживающие состояние:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Этим мы создали полностью закрытый файервол. Теперь осталось добавлять разрешающие правила. Вот несколько примеров:

— разрешаем только исходящие пинги

iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

— разрешаем доступ к серверу по ssh:

iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

А вот полный листинг нашего файервола:

iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

Ложка дёгтя.

Дело в том, что при таких правилах файервол не разъединяет ESTABLISHED соединения. Если вы хотите принудительно это сделать — лучший вариант:

iptables -I INPUT 1 -s 10.10.10.10 -m state --state ESTABLISHED,RELATED -j DROP

где 10.10.10.10 — адрес, который установил соединение.

Примечание.

Если вы используете цепочку FORWARD, то для неё будут нужны такие правила:

iptables -P FORWARD DROP
iptables -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $LAN_IFACE -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

3

Простейшие правила iptables

Создание простейших правил для файервола. Все делается от имени суперпользователя.

Базовая настройка iptables

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Этот конфиг предполагает следующее поведение:

• все входящие пакеты блокируются (дропаются);
• все транзитные пакеты блокируются;
• все исходящие пакеты разрешаются;
• разрешаются входящие пакеты на интерфейсе lo (127.0.0.1, localhost);
• разрешаются входящие пакеты уже установленных соединений, инициированных системой.

Теперь выведем правила на экран:

iptables-save

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Теперь сохраняем правила для последующего употребления:

iptables-save > /etc/iptables.up.rules

Откроем файл настройки сети:

nano /etc/network/interfaces

Допишем команду загрузки правил:

pre-up iptables-restore < /etc/iptables.up.rules

У меня выглядит так:

auto lo
iface lo inet loopback
pre-up iptables-restore < /etc/iptables.up.rules

Поскольку управление сетью у меня идёт посредством network-manager — интерфейса eth0 в файле нет. Правила прописываются при поднятии лупбэка, но разницы нет, поскольку эти правила едины для всех интерфейсов.

Загрузим правила в iptables. Можно перезапустить сеть, но мы сделаем так:

iptables-restore < /etc/iptables.up.rules

4

Выход в интернет только через прокси 192.168.0.2:8118 в локальной сети

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A OUTPUT -d 192.168.0.2/32 -p tcp -m tcp --dport 8118 -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -j ACCEPT
COMMIT


Вы здесь » TORoRAM. Форум ни о чём » Linux » Как настроить iptables для защиты компьютера с Linux от взлома