ЗА "ОГНЕННОЙ СТЕНОЙ":
ФАЙРВОЛЛ (БРАНДМАУЭР) И ШЛЮЗ В ИНТЕРНЕТ
В DEBIAN GNU/LINUX 4.0 ETCH

Практическое руководство по организации безопасного доступа в интернет
с отдельного компьютера и из локальной сети в Debian GNU/Linux 4.0 Etch
Немного теории

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

Ситуация усугубляется оттого, что в некоторых (пока еще) широко распространненных операционных системах по умолчанию остаются открытыми многие порты, что позволяет подключаться злоумышленнику из интернета к пользователю незаметно для последнего.

Для предотвращения несанкционированного подключения извне и для фильтрации входящего / исходящего трафика в операционной системе должна быть использована специальная программа - файрволл (англ. firewall), известная также под названиями брандмауэр и межсетевой экран. Ниже описана простая настройка файрволла в свободной операционной системе Debian GNU/Linux 4.0.

Особенно актуальным становится использование файрволла в случае, если у вас имеется не один компьютер, а домашняя или офисная сеть, компьютеры которой выходят в интернет.

Даже небольшая локальная сеть должна быть правильно организована. Допустим, у вас имеется точка доступа высокоскоростного подключения к интернету (например, ADSL модем) с Ethernet (т.е. сетевым) интерфейсом.

Возникает соблазн (подогреваемый безграмотными рекомендациями, как, например, в инструкции к моему ADSL-модему) подключить модем к напрямую коммутатору, а затем к коммутатору подключать все компьютеры локальной сети. В таком случае модем через коммутатор динамически выдает локальные IP-адреса, но получается, что каждый компьютер остается один на один с интернетом! Ни модем, ни коммутатор не могут стать преградой недоброжелателя. Злоумышленник может просканировать все компьютеры организованной таким образом локальной сети.

Логичным и безопасным решением является создание барьера между модемом и локальной сетью - в виде отдельного компьютера с настроенной на нем "огненной стеной" (файрволлом). У этого компьютера два интерфейса - одним он "смотрит" в интернет (т.е. физически подключен к модему), другим обращен в локальную сеть (и физически подключен к коммутатору, к которому также подключены остальные компьютеры). Поскольку наш компьютер с файрволлом является теперь узловой точкой для выхода других компьютеров в интернет, он именуется еще и шлюзом (англ. gateway).

При такой организации локальной сети вероятность взлома значительно снижается - злоумышленник "видит" из интернета только шлюз, а на шлюзе установлен файрволл, и взломать его нелегко. Компьютеры локальной сети могут работать в интернете и оставаться в относительной безопасности.

Настройка файрволла с помощью конфигуратора arno-iptables-firewall

Для организации файрволла в GNU/Linux используется программа iptables, которая, как правило, сразу инсталлируется при установке большинства дистрибутивов. В Debian GNU/Linux проверить это можно, запустив с правами администратора aptitude. При необходимости - устанавливаем iptables.

Однако ручное конфигурирование iptables является нетривиальной задачей и под силу только специалистам в области системного администрирования. Поэтому для настройки правил, по которым будет действовать файрволл, лучше воспользоваться специальным конфигуратором. В Debian GNU/Linux это - программа arno-iptables-firewall. Будучи запущенной, она задает ряд вопросов, на основании которых генерирует правила для функционирования файрволла iptables.

Набираем в консоли с правами суперпользователя:

#aptitude install arno-iptables-firewall

В начале инсталляции программа спросит, действительно ли мы желаем с ее помощью настроить файрволл iptables:

Вначале надо указать внешний интерфейс - "смотрящий" в интернет, т.е. подключенный к модему. Настройки интерфейсов определяются в конфигурационном файле /etc/network/interfaces. Он может иметь, например, такой вид:

# Это интерфейс lo - указывает на саму нашу машину. 

auto lo
iface lo inet loopback
	address 127.0.0.1
	netmask 255.0.0.0

# Это интерфейс eth0, который подключен к интернету (ADSL-модему)
# Его особенностью является то, что IP-адрес ему назначается провайдером динамически,
# поэтому выставлена опция dhcp

auto eth0
iface eth0 inet dhcp

# Это интерфейс, который обращен в локальную сеть
# Адрес локальной сети будет 192.168.2.0/24
# В целях безопасности в локальной сети шлюз имеет статический IP-адрес - 192.168.2.1,
# поэтому выставлена опция static
# Маска сети - 255.255.255.0
# Широковещательный адрес сети в таком случае будет 192.168.2.255

auto eth1
iface eth1 inet static
	address 192.168.2.1
	netmask 255.255.255.0
	broadcast 192.168.2.255

Итак, заглянув в настройки /etc/network/interfaces, указываем конфигуратору файрволла, что у нас внешним является интерфейс eth0:

На вопрос, выдается ли нам от провайдера IP-адрес динамически (с помощью протокола DHCP), отвечаем утвердительно:

Cледует вопрос, какие службы будут предоставлены с нашего компьютера внешним пользователям интернета. У нас - никакие! Мы не занимаемся профессиональным веб-хостингом и не предполагаем раздачу информации вовне. Оставляем строку пустой.

Затем идет вопрос, будем ли мы предоставлять какие-либо службы по протоколу UDP. Тоже нет - и тоже оставляем стрку пустой!

Нужно ли, чтобы нас пинговали из внешнего мира (т.е. проверяли, имеется ли связь с компьютером, на котором установлен файрволл)? В нашем случае это вполне допустимо:

На этом настройка для отдельного компьютера, не являющегося шлюзом локальной сети, будет закончена. Если же мы предполагаем использовать компьютер как шлюз, нужно ответить еще на несколько вопросов. Указываем интерфейс, которым шлюз обращен в локальную сеть - в нашем случае это eth1, как явствует из /etc/network/interfaces (в противном случае, для "одинокого" компьютера, оставляем это поле незаполненным):

Далее, на основании данных из /etc/network/interfaces, указываем спецификацию локальной сети, к которой подключен наш компьютер: в данном примере это 192.168.2.0/24

На вопрос позволить ли NAT-трансляцию, т.е. переадресацию траффика из интернета через шлюз в локальную сеть и обратно, отвечаем "да" - это является одной из основных наших задач в данном случае:

Тогда встает вопрос: а какой сегмент локальной сети может быть допущен через переадресацию к внешним сетям? У нас право доступа в интернет имеют все компьютеры локальной сети; опять указываем значение 192.168.2.0/24

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

После этого, если все прошло успешно, выдается сообщение, подобное приведенному ниже. Оно будет появляться теперь при каждой загрузке компьютера-шлюза и информировать об успешном запуске файрволла:

Arno's Iptables Firewall Script v1.8.8c
-------------------------------------------------------------------------------
Sanity checks passed...OK
Detected IPTABLES module... Loading additional IPTABLES modules:
All IPTABLES modules loaded!
Configuring /proc/.... settings:
 Enabling anti-spoof with rp_filter
 Enabling SYN-flood protection via SYN-cookies
 Disabling the logging of martians
 Disabling the acception of ICMP-redirect messages
 Setting the max. amount of simultaneous connections to 16384
 Enabling protection against source routed packets
 Setting default conntrack timeouts
 Enabling reduction of the DoS'ing ability
 Setting Default TTL=64
 Disabling ECN (Explicit Congestion Notification)
 Enabling support for dynamic IP's
 Flushing route table
/proc/ setup done...
Flushing rules in the filter table
Setting default (secure) policies
Using loglevel "info" for syslogd

Setting up firewall rules:
-------------------------------------------------------------------------------
Accepting packets from the local loopback device
Enabling setting the maximum packet size via MSS
Enabling mangling TOS
Logging of stealth scans (nmap probes etc.) enabled
Logging of packets with bad TCP-flags enabled
Logging of INVALID packets disabled
Logging of fragmented packets enabled
Logging of access from reserved addresses enabled
Setting up anti-spoof rules
Reading custom IPTABLES rules from /etc/arno-iptables-firewall/custom-rules
Loading (user) plugins
Setting up INPUT policy for the external net (INET):
Enabling support for a DHCP assigned IP on external interface(s): eth0
Logging of explicitly blocked hosts enabled
Logging of denied local output connections enabled
Packets will NOT be checked for private source addresses
Allowing the whole world to send ICMP-requests(ping)
Logging of dropped ICMP-request(ping) packets enabled
Logging of dropped other ICMP packets enabled
Logging of possible stealth scans enabled
Logging of (other) connection attempts to PRIVILEGED TCP ports enabled
Logging of (other) connection attempts to PRIVILEGED UDP ports enabled
Logging of (other) connection attempts to UNPRIVILEGED TCP ports enabled
Logging of (other) connection attempts to UNPRIVILEGED UDP ports enabled
Logging of other IP protocols (non TCP/UDP/ICMP) connection attempts enabled
Logging of ICMP flooding enabled
Applying INET policy to external (INET) interface: eth0 (without an external subnet specified)
Setting up INPUT policy for internal (LAN) interface(s): eth1
 Allowing ICMP-requests(ping)
 Allowing all (other) protocols
Setting up FORWARD policy for internal (LAN) interface(s): eth1
 Logging of denied LAN->INET FORWARD connections enabled
 Setting up LAN->INET policy:
  Allowing ICMP-requests(ping)
  Allowing all (other) protocols
Enabling masquerading(NAT) via external interface(s): eth0
 Adding (internal) host(s): 192.168.2.0/24
Security is ENFORCED for external interface(s) in the FORWARD chain
Jan 16 23:53:12 All firewall rules applied.

Примечание 1. В большинстве случаев успешный запуск файрволла происходит уже после первого общения с конфигуратором. Если что-то не заработало, настоятельно рекомендуется повторить конфигурацию, запустив вновь конфигуратор с правами суперпользователя:

# dpkg-reconfigure arno-iptables-firewall

Это позволит устранить случайную ошибку, которая могла возникнуть при ответах на вопросы конфигуратора при первом опыте общения с ним. В случае, если и это не помогло, можно попробовать вручную подправить конфигурационный файл программы arno-iptables-firewall, а именно: /etc/arno-iptables-firewall/firewall.conf . Полезным может оказаться посещение домашнего сайта создателя этой программы по адресу: http://rocky.eld.leidenuniv.nl/ . Там содержится весьма содержательное руководство по работе с программой, интересный FAQ и, кроме того, имеется информация о новых версиях программы.

Примечание 2. Не нужно забывать, что ни один файрволл не может дать 100% гарантии безопасности работы компьютера в интернете. Однако пренебрегать защитой файрволла нельзя. Надо сделать, все, от нас зависящее, чтобы затем уповать на милость Божию. "Если Господь не сохранит город, напрасно бодрствует страж" (Пс. 126:1).

Источник статьи