Защити себя сам (часть 2)

В прошлой статье я рассказал о том, что такое файрволл iptables и привёл пример файрволла для простейшей конфигурации, когда компьютер подключен к Интернету через DSL-модем, настроенный, как мост. Усложним задачу.

Имеем десктоп с Ubuntu и двумя сетевыми картами eth0 и eth1. Бортовая карта eth0 c адресом 192.168. 1.2 постоянно подключена к DSL-модему, настроенному, как маршрутизатор, имеющий шлюз-адрес 192.168. 1.1. PCI-карта eth1 c адресом 192.168. 2.2 время от времени подключается кроссоверным кабелем к розетке RJ45 нетбука с Windows-XP и с адресом 192.168. 2.1 для обмена файлами. Разумееется, адреса могут быть и другими. Интернет не раздаётся. С помощью сетевого менеджера (штатного или другого, например, рекомендую wicd) десктоп можно программно подключать либо к модему, либо к нетбуку. Предполагается, что десктоп имеет настроенный пакет samba, обеспечивающую взаимный доступ к «расшаренным» ресурсам. Так сделано, чтобы не переключать кабель и не разбивать разъёмы RJ45 на материнской плате и модеме, да и поберечь встроенную карту. Требуется настроить файрволл iptables. Привожу скрипт простой настройки.

#!/bin/bash

# путь к файлу запуска iptables.

IPT="/sbin/iptables"

start_fw()

{

# Сбросить правила и удалить цепочки.

$IPT -F

$IPT -X

# Политики по умолчанию.

$IPT -P INPUT DROP

$IPT -P FORWARD ACCEPT

$IPT -P OUTPUT ACCEPT

# Новые пользовательские цепочки:

$IPT -N ENEMY

$IPT -N BOGUS

$IPT -N ALLOW

$IPT -N GOOD_IN

$IPT -N GOOD_OUT

$IPT -N CONNECT

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A INPUT -j GOOD_IN

$IPT -A INPUT -j CONNECT

$IPT -A INPUT -j ENEMY

$IPT -A INPUT -j BOGUS

$IPT -A INPUT -j ALLOW

$IPT -A GOOD_IN -i eth0 -d 192.168.1.2/32 -j RETURN # адрес приёмника м.б. 192.168.1.2

$IPT -A GOOD_IN -i eth1 -d 192.168.2.2/32 -j RETURN # адрес приёмника м.б. 192.168.2.2

$IPT -A GOOD_IN -j DROP

$IPT -A CONNECT -i eth0 -s 192.168.1.1/32 -m state --state NEW -j ACCEPT # или модем может подключаться

$IPT -A CONNECT -i eth1 -s 192.168.2.1/32 -m state --state NEW -j ACCEPT # или комп может подключаться

$IPT -A CONNECT -j RETURN

$IPT -A ENEMY -s 0.0.0.0/32 -j DROP # запретить адрес по умолчанию

$IPT -A ENEMY -s 224.0.0.0/8 -j DROP # запретить мультикаст

$IPT -A ENEMY -s 255.255.255.255/32 -j DROP # запретить бродкаст

# (сюда можно вставить адреса плохих парней)

$IPT -A ENEMY -j RETURN

$IPT -A BOGUS -m state --state INVALID -j DROP

$IPT -A BOGUS -f -m limit --limit 10/min -j DROP # запретить фрагменты

$IPT -A BOGUS -p tcp -m tcp ! --syn -m state --state NEW -j DROP # устранить SYN-наводнение

$IPT -A BOGUS -j RETURN

$IPT -A ALLOW -p icmp -m limit --limit 10/sec -j ACCEPT

$IPT -A ALLOW -m state --state RELATED,ESTABLISHED -j ACCEPT

# (сюда можно вставить номера портов, к которым разрешается обращаться извне)

$IPT -A ALLOW -j RETURN

$IPT -A OUTPUT -o lo -j ACCEPT

$IPT -A OUTPUT -j GOOD_OUT

$IPT -A OUTPUT -m state --state INVALID -j DROP

$IPT -A OUTPUT -d 0.0.0.0/32 -j DROP # запретить адрес по умолчанию

$IPT -A OUTPUT -d 224.0.0.0/8 -j DROP # запретить мультикастинг

$IPT -A OUTPUT -d 255.255.255.255/32 -j DROP # запретить бродкаст

# запросить IP:

$IPT -A OUTPUT -d 192.168.1.1/32 -p tcp -m tcp --dport 53 -j ACCEPT

$IPT -A OUTPUT -d 192.168.1.1/32 -p udp -m udp --dport 53 -j ACCEPT

$IPT -A GOOD_OUT -o eth0 -s 192.168.1.2/32 -j RETURN

$IPT -A GOOD_OUT -o eth1 -s 192.168.2.2/32 -j RETURN

$IPT -A GOOD_OUT -j DROP

}

case "$1" in

start) echo -n "Start firewall: iptables "

start_fw

echo "."

;;

stop) echo -n "Stop firewall: iptables "

iptables -F

iptables -X

echo "."

;;

save) echo -n "Save firewall: iptables "

iptables-save > /etc/rules-save

echo "."

;;

restart) echo -n "Restart firewall: iptables "

iptables -F

iptables -X

cat /etc/rules-save | iptables-restore

echo "."

;;

reload|force-reload) echo -n "Reload firewall: iptables "

echo "."

;;

*) echo "Usage: /etc/init.d/rc.firewall start|stop|restart|reload|force-reload "

exit 1

;;

esac

exit 0

С этим скриптом надо поступить точно так же, как и с предыдущим. Обратите внимание, как пользовательские цепочки GOOD_IN, CONNECT и GOOD_OUT позволяют реализовать мультипроверку адресов источников и приёмников. Обратите также внимание, что в отличие от предыдущего файрволла, в этом файрволле нельзя обойтись без цепочки OUTPUT, так как именно в ней десктоп запрашивает из модема IP-адреса веб-ресурсов. Правила для DHCP отсутствуют, так как процедуру получения динамического адреса взял на себя модем, настроенный, как маршрутизатор.

Кстати, ADSL-модемы минского ОАО «Промсвязь» настраиваются так же, как и модемы ZTE 831, но в настройках модема рекомендую разрешить DHCP и вписать в модем адреса конкретных серверов DNS (не обязательно белорусских).

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!