Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет cats_shadow ([info]cats_shadow)
@ 2008-05-14 08:36:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Вопрос к пингвиноводителям...
Возникла необходимость вобрать рутер/брандмауэр на debian. Проблема в том, что на этом же компе файл/веб сервера живут.
Ну и, как всегда, цейтнот (долго рыть по сети в поисках нужной документации не успеваю). :)

Следовательно 2 вопроса:
1. как это сделать? (желательно "для чайников")
2. какие в этом случае проблемы с безопасностью и методы их решения?


(Добавить комментарий)


[info]checat@lj
2008-05-14 04:21 (ссылка)
Ты как-то неконкретно формулируешь.
Телепатия докладывает, что у тебя на "файлсервере" 2 сетевых карточки, одна смотрит внутрь, другая в интернет, и ты хочешь закрыться от всех входящих соединений.

в редхате это файл /etc/sysconfig/iptables (который состоит из определений цепочек и определений правил, определения правил - просто аргументы для команды iptables, man iptables)

Блин, хотел тебе свой скинуть, но там понаворочено всякого, всё к IP адресам привязано, и запрещено всё, что не разрешено, просто порезать его не получится.

Опять же, в редхате есть стандартные утилиты system-config-*, какая-то из них по-быстрому закрывает всё фаерволлом.

Есть ещё графическая утилитя firestarter, но я её не пробовал.

(Ответить) (Ветвь дискуссии)


[info]cats_shadow@lj
2008-05-14 04:31 (ссылка)
Ситуация простая... заглючил аппаратный рутер после долгих лет жизни...

Если комп под линуксом (Debian), на котором подняты Apache/MySQL/PHP/... и Samba (без функций PDC, только файл/принтер-шаринг). Есть мысль воткнуть в него вторую сетевуху и заодно подгрузить его работой рутером/брандмауэром.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]checat@lj
2008-05-14 05:00 (ссылка)
Если во внешний мир у тебя никаких сервисов не открыто, то тебя волнуют только дыры в настройке и реализации фаервола.
Если во внешний мир смотрят какие-то сервисы на фаерволе, то уязвимость в них потенциально делает уязвимыми и фаервол, и всю закрываемую фаерволом сеть.
Не защищает любой раутерный фаервол и от троянов, если их поймать на клиентскую машину (фаервол на клиентской машине с контролем приложений - может защитить).

Стратегию настройки фаервола я использую следующую:
1. разделить все используемые протоколы на "чисто внутренние" и все остальные.
2. написать правила, разрешающие внутренним протоколам ходить по внутренней сети и на сервер.
3. написать правила, запрещающие внутренним протоколам ходить где бы то ни было (если они не попали под правило 2)
4. написать правила, разрешающее создание новых tcp соединений и исходящие udp пакеты из внутренней сети для "всех остальных" протоколов
5. написать правило, разрешающее прохождение пакетов для уже установленных соединений
6. написать правила, запрещающее всё остальное

Надо ещё подгрузить модуль ip_conntrack, чтобы правило 5 могло работать и для UDP.

Разделение правил по внешним - внутренним адресам у меня сделано на IP адресах, хотя можно было бы сделать на именах интерфейсов eth0, eth1...


Блин, можно гораздо проще, но мне уже "мизинцы не позволяют". Проще - это выкинуть пункты 1, 2, 3. Тогда весь конфиг состоит что-то правил из 4х.

(Ответить) (Уровень выше)


[info]checat@lj
2008-05-14 05:14 (ссылка)

*filter

# by default drop incoming
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# chain for intellectual drop
:DROP-CHAIN - [0:0]
-A DROP-CHAIN -p tcp -j REJECT --reject-with icmp-admin-prohibited
-A DROP-CHAIN -m udp -p udp --src 192.168.1.1/24 -m pkttype --pkt-type unicast -j REJECT
-A DROP-CHAIN -m udp -p udp --src $EXTERNAL_IP -m pkttype --pkt-type unicast -j REJECT
-A DROP-CHAIN -j DROP

# create chain for all packets
# specifically allow packets, drop all unlisted
:MAIN-CHAIN - [0:0]

-A INPUT -j MAIN-CHAIN
-A FORWARD -j MAIN-CHAIN
-A OUTPUT -j MAIN-CHAIN


# allow local
-A MAIN-CHAIN -i lo -j ACCEPT
-A MAIN-CHAIN -o lo -j ACCEPT

# allow all ICMP
-A MAIN-CHAIN -p icmp --icmp-type any -j ACCEPT

# open ms protocols for internal-to-internal and drop for others
# notice: may be not all UDP broadcasts included
-A MAIN-CHAIN -m tcp -p tcp --src 192.168.1.1/24 --dst 192.168.1.1/24 --dport 135 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src 192.168.1.1/24 --dst 192.168.1.1/24 --dport 139 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src 192.168.1.1/24 --dst 192.168.1.1/24 --dport 445 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src 192.168.1.1/24 --dst $EXTERNAL_IP --dport 135 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src 192.168.1.1/24 --dst $EXTERNAL_IP --dport 139 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src 192.168.1.1/24 --dst $EXTERNAL_IP --dport 445 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src $EXTERNAL_IP --dst 192.168.1.1/24 --dport 135 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src $EXTERNAL_IP --dst 192.168.1.1/24 --dport 139 -j ACCEPT
-A MAIN-CHAIN -m tcp -p tcp --src $EXTERNAL_IP --dst 192.168.1.1/24 --dport 445 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst 192.168.1.1/24 --dport 137 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst 192.168.1.1/24 --sport 137 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst 192.168.1.1/24 --dport 138 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst $EXTERNAL_IP --dport 137 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst $EXTERNAL_IP --sport 137 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst $EXTERNAL_IP --dport 138 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src $EXTERNAL_IP --dst 192.168.1.1/24 --dport 137 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src $EXTERNAL_IP --dst 192.168.1.1/24 --sport 137 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src $EXTERNAL_IP --dst 192.168.1.1/24 --dport 138 -j ACCEPT

# and specifically drop for others
-A MAIN-CHAIN -m tcp -p tcp --dport 135:139 -j DROP-CHAIN
-A MAIN-CHAIN -m tcp -p tcp --dport 445 -j DROP-CHAIN
-A MAIN-CHAIN -m udp -p udp --dport 135:139 -j DROP-CHAIN
-A MAIN-CHAIN -m udp -p udp --dport 445 -j DROP-CHAIN
-A MAIN-CHAIN -m tcp -p tcp --sport 135:139 -j DROP-CHAIN
-A MAIN-CHAIN -m tcp -p tcp --sport 445 -j DROP-CHAIN
-A MAIN-CHAIN -m udp -p udp --sport 135:139 -j DROP-CHAIN
-A MAIN-CHAIN -m udp -p udp --sport 445 -j DROP-CHAIN


# allow all other tcp from internal to any
# includes http, smtp, ftp, ssh, pop3, etc.
-A MAIN-CHAIN -m state --state NEW -m tcp -p tcp --src 192.168.1.1/24 -j ACCEPT
-A MAIN-CHAIN -m state --state NEW -m tcp -p tcp --src $EXTERNAL_IP -j ACCEPT

# allow all packets for established and 'related' connections
-A MAIN-CHAIN -m state --state ESTABLISHED,RELATED -j ACCEPT

# allow outgoing from router to all dns
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dport 53 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src $EXTERNAL_IP --dport 53 -j ACCEPT

# allow local UDP traffic
# -A MAIN-CHAIN -m udp -p udp --src 127.0.0.1/8 --dst 127.0.0.1/8 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst 192.168.1.1/24 -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src 192.168.1.1/24 --dst $EXTERNAL_IP -j ACCEPT
-A MAIN-CHAIN -m udp -p udp --src $EXTERNAL_IP --dst 192.168.1.1/24 -j ACCEPT

# reject other UDP traffic
# -A MAIN-CHAIN -p udp -j DROP-CHAIN

# reject unlisted by default
-A MAIN-CHAIN -j DROP-CHAIN

COMMIT

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]checat@lj
2008-05-14 05:15 (ссылка)
Примерно так.
Здесь подразумевается, что все IP фиксированы, надо вручную заменить $EXTERNAL_IP на реальный IP.
Если он динамический, то такой конфиг использовать не получится (либо надо генерить скриптом на каждую смену внешнего IP).
Этот конфиг в редхате обрабатывается скриптом /etc/init.d/iptables, или где они там валяются.

(Ответить) (Уровень выше)


[info]checat@lj
2008-05-14 05:21 (ссылка)
А, здесь ещё UDP весь запрещён, кроме DNS. То есть в контру не поиграешь, надо ещё правило дописывать. Можно даже, в принципе, весь исходящий UDP разрешить.

И здесь нет лазеек для раздач основных p2p сетей, будешь личером натуральным. Не получится принимать файлы по ICQ. Скайп будет, но, кажется, с пониженным качеством. На всё надо правила дописывать.

(Ответить) (Уровень выше)


[info]awind@lj
2008-05-14 05:17 (ссылка)
http://netfilter.org/documentation/HOWTO//NAT-HOWTO.html
http://netfilter.org/documentation/HOWTO//packet-filtering-HOWTO.html
оно про 2.4, но на 2.6 принципиально ничего не поменялось.
ну и туториал какой посимпатичнее почитать с http://netfilter.org/documentation/index.html

(Ответить)


[info]elinaarsenyeva@lj
2008-05-14 14:49 (ссылка)
Кстати, мастера утвердили меня на роль к тебе на радио. Но - мышью. Только так :-)

(Ответить)


[info]kolloid@lj
2008-05-15 18:46 (ссылка)
Про безопасность в общих чертах сказали.

Про настройку - самое удобное, что я нашел для себя - пакет shorewall. Там такой высокоуровневый язычок для описания структуры сети (вот firewall, вот dmz, вот здесь нужно NAT, отсюда-сюда такой-то трафик ходить может и т.п.), потом генерируются правила для iptables. Правда изучить все это ненамного проще, чем сами iptables, но читать конфигурацию shorewall проще, чем правила iptables.

В ubuntu 8.04 появилось совсем простое средство - ufw, не знаю, насколько легко будет водрузить его на Debian.

(Ответить)