вторник, 17 мая 2011 г.

Shorewall - Firewall для Linux машин


Shorewall - это легко настраиваемый, удобный файрволл для малых сетей. Оно является надстройкой над системой Netfilter (iptables/ipchains) ядра Linux. Оно на выходе генерирует из своих правил правила (конфигурации) понятные для iptables/ipchains. В ней не предоставлено какие либо пользовательские интерфейсы для конфигурирования. Правка конфигурационных файлов можно сделать любым текстовым редактором.
Это было краткое ознакомление, а теперь перейдем к установке и конфигурированию.

Установка

Установку можно произвести скачав .rpm или .deb пакет или же автоматически.
Для Fedora/CentOS
# rpm -ivh shorewall-x.x.x.noarch.rpm
Или
# yum install shorewall

Для Ubuntu/Debian
# dpkg -i shorewall-x.x.x.deb
Или
# apt-get install shorewall

Конфигурация

Конфигурационные Shorewall лежат в папке /etc/shorewall 
Часто используемые и основные конфигурационные файлы это:
# /etc/shorewall/policy
# /etc/shorewall/interfaces
# /etc/shorewall/zones
# /etc/shorewall/rules
# /etc/shorewall/tunnels

/etc/shorewall/interfaces
В данном файле содержиться описание интерфейсов. То есть какой интерфейс (сетевой адаптер) должен распознаваться каким образом.
К примеру.
#ZONE    INTERFACE    BROADCAST    OPTIONS
net        eth0        detect
loc        eth1        detect

Правило выше говорит что сетевой адаптер eth0 должен распознаваться как "МИР", в то время как сетевой адаптер eth1 должен распознаваться как локаль.
Если вы не знаете какой из интерфейсов у вас выходит в "МИР". то наберите следующую команду
# ip route ls 
Данная команда покажет вам какой интерфейс через какой шлюз выходит в интернет
192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.2  metric 1
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.3  metric 1
default via 192.168.0.4 dev eth0  proto static

В моем случае это интерфейс eth0 выходить в интернет через 192.168.0.4
Если вы поднимаете файрволл по локальной сети для тестирования. Как и в моем случае так как маска обеих моих интерфейсов 192.168.0.0/24 то вы можете в этом же конфигурационном файле указать, какие адреса понимать как внешние а какие локальные. Пример
#ZONE    INTERFACE    BROADCAST    OPTIONS
net        eth0        detect        
loc        eth1        detect        nets=(192.168.0.110,192.168.0.100)

Пример выше обясняет что адреса 192.168.0.110 и 192.168.0.100 понимать как локальные адреса для интерфейса eth1 и все остальное как внешние адреса eth0.
Если у вас кроме eth0 имеется и другие соединения к примеру VPN то необходимо и ее определить и ее интерфейс. К примеру у вас есть VPN соединение и она создает программный сетевой адаптер tun0 .
#ZONE    INTERFACE    BROADCAST        OPTIONS
net        eth0        detect                
loc        eth1        detect
vpn        tun0        detect        routeback

К vpn соединениям обязательно в Опциях необходимо писать routeback. Данная опция говорит о том что ответы на запрос по данному туннелю передавались по этому же туннелю. Кроме этого необходимо также последовательно изменить конфигурационные файлы в /etc/shorewall/tunnels и /etc/shorewall/policy для того чтобы VPN трафик между двумя сетями проходило и соединение состоялось. Это мы узнаем при рассмотрение соотвествующих конфигурационных файлов.
/etc/shorewall/zones
Данный конфигурационный файл используется для определния зон.
#ZONE    TYPE        OPTIONS        IN            OUT
#                                OPTIONS        OPTIONS
fw        firewall
net        ipv4
loc        ipv4
vpn        ipv4

Это говорит что fw это файрволл a все отальное net, loc, vpn это зоны определющиеся по ipv4.
/etc/shorewall/policy
В этом конфигурационном файле описывается абстрагированное правило - это означает если какое то правило не был найден в конфигурационном файле правил /etc/shorewall/rules то примениться данное правило. То есть последовательность чтения правил это /etc/shorewall/rules потом /etc/shorewall/policy.
Пример:
#SOURCE            DEST        POLICY        LOG LEVEL        LIMIT:BURST
$FW            net        ACCEPT        info
net            all        DROP        info
loc            net        REJECT        info
# THE FOLLOWING POLICY MUST BE LAST
all            all        REJECT        info

Первая строка разрешает все соединения от файрвола к "МИРУ". Вторая строка сбрасывает все соеднинения от интернета ко всем. Третья строка запрещает все соединения от локальных компьютеров к файрволу. И Последняя строка, она не должна изменяться и должна быть последним всегда, данная строка запрещает все соединения которые не описаны правилами выше.
/etc/shorewall/rules
Написание правил в shorewall очень просты. В каждой строке пишется одно правило в последовательности команда, источник, назначение, протокол, порт назначенного, порты источника и т.д как показано внизу
#ACTION  SOURCE  DEST  PROTO  DEST  SOURCE  ORIGINAL  RATE  USER  MARK
#                             PORT  PORT(S)   DEST    LIMIT GROUP

Теперь к примеру нам необходимо все веб соединения c мира на этот компьютер перенаправить на локальный 192.168.0.110, так как у нас веб сервер находиться на этой машине для это мы пишем.
ACCEPT   net     loc:192.168.0.110:80  tcp  80,443
И все этого достаточно. Ну вы можете это же правило написать по другому. Shorewall для общеизвестных программ предлагаем свои макросы. К примеру правило выше можно было так же написать следующим образом
Web/ACCEPT  net   loc:192.168.0.110:80
По написанию правил есть у shorewall своя хорошо написанная документация вот тут

Комментариев нет:

Отправить комментарий