Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Vitaly Lopatin, vitls@chat.ru

              Настройка и использование файрволла TIS FWTK
	                   (рассказ подопытного)

				Часть I.

    Итак. Стояла обыкновенная задача: отделить одну часть сетки то другой,
да так, чтобы можно было выполнить тонкую настройку для конкретной задачи.
Встал выбор средств с помощью которых это можно было бы сделал.
    Тут один админ знакомый, сидя вместе со мной за пивом, подсказал:
"А попробуй TIS FWTK!". "А что это?" - я в ответ, - "Программный файрволл.
Сходи на www.tis.com и все узнаешь."
    Ломанулся туда. Нарвался на две ссылки Gauntlet и FWTK. Первый оказался
жутко коммерческим и дорогим, а вот второй... Но распространяется под своей
лицензией, в коей сказано, что не ограничен для некоммерческого личного при-
менения и все такое.
    Скачал версию 2.1. Не помню, сколько она занимает, но не очень большая.
Обычная последовательность make, make install. В результате которой получаю
набор исполняемых файлов в /usr/local/etc.
    Ладно, подумал я, разворачивая доку. К слову, она поставляется ОТДЕЛЬНО
в fwtk-doc-only.tar.z. Дока оказалась в формате postscript. Полез на TIS,
поискал на неофициальных серверах (найти несложно), скачал в формате pdf,
что и распечатал.
    Вот тут и начинается самое интересное. Итак. Принцип действия сего про-
дукта основан на передаче пакетов высокого уровня. Фактически взаимодействие
двух компов (один во внутренней сети - другой во внешней) происходит по
следующей схеме:

    +-----    -----    ----+
    | 1  S----R F T----D 2 |
    +-----    -----    ----+
    клиент    стена    сервер
    
где S - порт приложения, которое посылает пакет, например броузер.
    D - порт приложения на сервере (для http-запроса имеет номер 80)
    R - порт на файрволле, который примет запрос от клиента
    T - порт, с которого файрволл передаст запрос на сервер

По идее, такая схема должна оградить машины внутренней сети от прямого доступа
из вне. Так как разрешается передача данных только уровня приложений.

    Произведем настройку сети (примеры для Slackware):

Содержание /etc/rc.d/rc.inet1
    
#!/bin/sh
#
# rc.inet1	This shell script boots up the base INET system.
#
# Version:	@(#)/etc/rc.d/rc.inet1	1.01	05/27/93
#

HOSTNAME=`hostname`

# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the 
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.

# Edit for your setup.
IPADDR="xxx.xxx.xxx.xxx"	# REPLACE with firewall IP address
NETMASK="255.255.255.224"	# REPLACE with YOUR netmask!
NETWORK="xxx.xxx.xxx.xxx"  	# REPLACE with YOUR network address!
BROADCAST="xxx.xxx.xxx.xxx"  	# REPLACE with YOUR broadcast address, if you
 			      	# have one. If not, leave blank and edit below.
GATEWAY="xxx.xxx.xxx.xxx"  	# REPLACE with YOUR gateway address!

# IntraNet section
IPADDR2="192.168.0.xxx"	 	# REPLACE with firewall IP address!
NETMASK2="255.255.255.0"	# REPLACE with YOUR netmask!
NETWORK2="192.168.0.0"  	# REPLACE with YOUR network address!
BROADCAST2="192.168.0.255"  	# REPLACE with YOUR broadcast address, if you
 			      	# have one. If not, leave blank and edit below.

# Uncomment the line below to initialize the ethernet device.
/sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
/sbin/ifconfig eth1 ${IPADDR2} broadcast ${BROADCAST2} netmask ${NETMASK2}

# Uncomment these to set up your IP routing table.
/sbin/route add -net ${NETWORK} netmask ${NETMASK} eth0
/sbin/route add -net ${NETWORK2} netmask ${NETMASK2} eth1
/sbin/route add default gw ${GATEWAY} netmask 0.0.0.0 metric 1

# End of rc.inet1

Далее в документации указывается примерное содержание файла /etc/rc.d/rc.local.
А точнее того, что в него должны добавить. Он называется rc.local.noyet. Берете
из него и добавляете в rc.local. Забегая вперед скажу, что его все-таки 
придется править из-за кое-каких багов.

На следующем этапе настраиваем внутренний DNS-сервер. На этом месте я горестно
вздохнул, пожал плечами и сделал что-то вроде этого:

Содержание /etc/hosts
------8<--------------------------------------------------------
127.0.0.1	localhost
xxx.xxx.xxx.xxx	gate.your.domain.dom gate #Внешнее имя файрволла
192.168.0.xxx	local.net local #Внутреннее имя файрволла
------8<--------------------------------------------------------

Содержание /etc/named/boot
------8<--------------------------------------------------------
directory /var/named
cache	.	root.cache
primary	net net
primary 0.168.192.IN-ADDR.ARPA	net.rev
primary 0.0.127.IN-ADDR.ARPA local.rev
xfrnets 192.168.0.0
------8<--------------------------------------------------------

Файлы зон:
root.cache - создается с помощью команды 'dig @ns.internic.net > root.cache'

Содержание файла local.rev
------8<--------------------------------------------------------
@ IN SOA local.net. root.local.net. (
	2000062801
	10000
	1800
	604800
	40000)
	IN NS local.net.
1	IN PTR localhost.local.net.
------8<--------------------------------------------------------

Содержание файла net, описывающкего прямую зону
------8<--------------------------------------------------------
@ IN SOA local.net. root.local.net. (
	2000062801	;serial number
	10000		;update frequrency
	1800		;retrain query interval
	604800		;zone TTL
	40000)		;minimum TTL
;
;Define nameserver
;
@ IN NS local.net.
;
;Define names of computers
;
localhost	IN A 127.0.0.1
local		IN A 192.168.0.xxx
vasya		IN A 192.168.0.yyy
;... и так далее ...
------8<--------------------------------------------------------

Содержание net.rev
------8<--------------------------------------------------------
@ IN SOA local.net. root.local.net. (
	2000062801
	10000
	1800
	604800
	40000)
@ IN NS local.net.
;
xxx IN PTR local.net.
yyy IN PTR vasya.net.
;... и так далее...
------8<--------------------------------------------------------

Содержание /etc/inetd.conf: ВСЕ ЗАКОММЕНТИРОВАТЬ

    Вот наконец пришло время самого главного - настройки системы разрешений.
Вся система работает по принципу "что не разрешено - запрешено", что в общем
здраво. Настройки хранятся в /usr/local/etc/netperm-table. Я приведу куски
реально работающего с комментариями.

-----8<--------------------------------------------------------
# Это работающий пример netperm-table, просто замените YOURNET
# на ваш сетевой адрес (e.g.; 666.777.888), а YOURADDRESS на ваш IP

# Пример правил netacl (эта прога делает списки доступа к протоколам):
# --------------------------------------------------------------------
# Если расскоментировать следующие 2 строки, народ получит login
# на firewall через telnet прокси
# Я закрыл во избежание атак из внутренней стороны. Звездочка исп-ся как
# метасимвол
#netacl-telnetd: permit-hosts 127.0.0.1 -exec /usr/libexec/telnetd

# разрешить ваи и кому-то еще коннектиться к вам
#netacl-telnetd: permit-hosts YOURADDRESS 198.6.73.2 -exec /usr/libexec/telnetd

# разрешить локальным машинам телнетиться  к вам
#netacl-telnetd: permit-hosts 192.168.0.* -exec /usr/sbin/in.telnetd

# если расскомментировать, доступен telnet прокси
#netacl-telnetd: permit-hosts * -exec /usr/local/etc/tn-gw

# если расскомментировать, народ получит login
# на файрволле через rlogin прокси
#netacl-rlogind: permit-hosts 127.0.0.1 -exec /usr/libexec/rlogind -a
#netacl-rlogind: permit-hosts YOURADDRESS -exec /usr/libexec/rlogind -a
#netacl-rlogind: permit-hosts 192.168.0.* -exec /usr/sbin/in.rlogind -a

# если расскомментировать, доступен rlogin прокси
#netacl-rlogind: permit-hosts * -exec /usr/local/etc/rlogin-gw

# чтобы разрешить сервис finger расскомментируйте следующие две строки
#netacl-fingerd: permit-hosts YOURNET.* -exec /usr/libexec/fingerd
#netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt

# позволяет трансляцию сервиса FTP
netacl-ftpd: permit-hosts 192.168.0.* -exec /usr/local/etc/ftp-gw

# Правила smap (это перекачка почтового трафика): 
# -----------------------------------------------
smap, smapd:	userid 6
smap, smapd:	directory /var/spool/smap
smapd:		executable /usr/local/etc/smapd
smapd:		sendmail /usr/sbin/sendmail
smap:		timeout 3600

# Пример правил шлюза ftp:
# ------------------------
#ftp-gw:	denial-msg	/usr/local/etc/ftp-deny.txt
#ftp-gw:	welcome-msg	/usr/local/etc/ftp-welcome.txt
#ftp-gw:	help-msg	/usr/local/etc/ftp-help.txt
ftp-gw:		timeout 3600

# расскоммнтировать если вы хотите, чтобы внутренние пользователи имели
# доступ к FTP-серверам во внешней сети на чтение-запись
ftp-gw:		permit-hosts 192.168.0.* retr stor

# расскоммнтировать если есть желание пустить внешних пользователей
# к FTP серверам во внутренней сети через аутентификацию
#ftp-gw:		permit-hosts * -auth -log { retr stor }

# Пример правил шлюза telnet:
# ---------------------------
#tn-gw:		denial-msg	/usr/local/etc/tn-deny.txt
#tn-gw:		welcome-msg	/usr/local/etc/tn-welcome.txt
#tn-gw:		help-msg	/usr/local/etc/tn-help.txt
#tn-gw:		timeout 3600
#tn-gw:		permit-hosts * -passok -xok
# если раскомментировать то входящий трафик нуждается в аутентификации
#tn-gw:		permit-hosts * -auth

# Пример правил шлюза rlogin:
# ---------------------------
#rlogin-gw:	denial-msg	/usr/local/etc/rlogin-deny.txt
#rlogin-gw:	welcome-msg	/usr/local/etc/rlogin-welcome.txt
#rlogin-gw:	help-msg	/usr/local/etc/rlogin-help.txt
#rlogin-gw:	timeout 3600
#rlogin-gw:	permit-hosts 192.168.0.* -passok -xok
# если раскомментировать то входящий трафик нуждается в аутентификации
#rlogin-gw:	permit-hosts * -auth -xok


# Пример правил сервера аутентификации
# ------------------------------------
authsrv:	hosts 127.0.0.1
authsrv:	database /usr/local/etc/fw-authdb
authsrv:	badsleep 1200
authsrv:	nobogus true

# клиенты, использующие сервер атентификации
*:		authserver 127.0.0.1 7777
# правил трансляций
#tn-gw, rlogin-gw:	xforwarder /usr/local/etc/x-gw

# настройка передачи протокола WWW
# разрешить указанный машинам доступ ко всем серверам
http-gw: permit-hosts 192.168.0.yyy
http-gw: permit-hosts 192.168.0.zzz
# разрешить указанной машине доступ только на указанный сервер
http-gw: permit-hosts 192.168.0.xxx -dest database.my.domain.dom

# настройки передачи протокола POP3
# разрешить всем машинам принимать e-mail.
pop3: permit-hosts 192.168.0.*
pop3: port 110 192.168.0.* -plug-to mail.server.dom -port 110
pop3: port 110 mail.server.dom -plug-to 192.168.0.* -port 110

# настройки передачи протокола SMTP от всех машин локальной сети
smtp: permit-hosts 192.168.0.*
smtp: port 25 192.168.0.* -plug-to mail.server.dom -port 25

# настройки передачи протокола NNTP
nntp: permit-hosts 192.168.0.*
nntp: port 119 192.168.0.* -plug-to news.server.dom -port 119
nntp: port 119 news.server.dom -plug-to 192.168.0.* -port 119

# Настройки для "левого" протокола типа ICQ
# разрешить указанным машинам
# с учетом, что клиентская машина отткрывает для протокола ICQ свой порт
# номер 4000
icq: permit-hosts 192.168.0.yyy
icq: permit-hosts 192.168.0.zzz
icq: port 4000 192.168.0.* -plug-to icq.mirabilis.com -port 4000
icq: port 4000 icq.mirabilis.com -plug-to 192.168.0.* -port 4000
------8<--------------------------------------------------------

    Последние штрихи. Были замечены некоторые баги при работе rc.local,
предложенного TIS. Например, передача почтового трафика изнутри наружу
передается посредством обращения клиента к почтовой службе файрволла.
Та, в свой черед, ставит сообщения в очередь на отправку и после передает
их на почтовый сервер, указанный в DNS. Чего она с успехом НЕ делает.
Очередь создается, письма несколько раз могут даже отправиться, а затем просто
накапливаются в очереди и отправляются только после перезапуска файрволла.
Кроме того, при запуске программы, обслуживающей почтовую очередь НЕ
запускаются остальные демоны. Поэтому было принято решение отказаться от
стандартной процедуры передачи почты и сделать все по своему.
    Дело в том, что в состав программ FWTK входит демон plug-gw, который
предназначен для передачи пользовательских протоколов. Указав smtp как
пользовательский протокол, я фактически отключил у себя sendmail, тем
самым повысив защиту внутреннего сегмента и самого файрволла.
    Вот как выглядит мой /etc/rc.d/rc.local в окончательном варианте:
------8<--------------------------------------------------------
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local setup commands in here:

echo 'Starting Name Server'
ndc start

echo 'starting FWTK daemons:'

# формат запуска:
# путь	-daemon	порт [протокол]&

echo "    http-gw"
/usr/local/etc/http-gw -daemon http &

echo "    ftp-gw"
/usr/local/etc/netacl -daemon ftp ftpd  &

echo "    nntp"
/usr/local/etc/plug-gw -daemon 119 nntp &

echo "    pop3"
/usr/local/etc/plug-gw -daemon 110 pop3 &

echo  "    mail"
/usr/local/etc/plug-gw -daemon 25 smtp &

echo  "    icq"
/usr/local/etc/plug-gw -daemon 4000 icq &

------8<--------------------------------------------------------

    Все. Можно перегрузится и спокойненько забыть про существование файрволла.
Но все же есть несколько слов в догонку: при работе файрволла очень
быстро распухает системный журнал /var/log/messages. На каком-то сайте
(куда вышел с tis.com) я откопал ФАК, и попытался сделать раздельное
логирование, но у меня не получилось.
    
    И самое главное. После всех настроек добавить или убрать новый протокол
или новую машину в список протокола очень просто. Для запуска протокола
запускаете plug-gw на желаемый порт, правите /usr/local/etc/netperm-table
и... продолжаете работать. Перегружаться не надо. Система работает на лету.


				Часть II

    Теперь предстоит настроить клиентское программное обеспечение. Так как
вся работа проводилась для того, чтобы оградить рабочие станции под МД95-98,
то все будет описано именно для этого случая.
    Перво-наперво, в свойствах сетевого окружения выставляем использование
протокола TCP/IP. Далее в настройках TCP/IP указываем использование DNS и
говорим, что в качестве DNS сервера будет машина с файрволлом.
    После перезагрузки можно настроить броузер и почтового клиента. Браузеру 
скажем, что мы используем прокси-сервер. В качестве прокси указываем наш
файрволльчик, ну а порты естесственно за номером 80.
    Почтовому клиенту говорим о существовании SMTP и POP3 серверов на файр-
волле с правильными значениями портов.
    Для FTP клиентов общий алгоритм следующий. Чтобы добраться до какого-либо
сервера обращаемся к файрволлу, например:
	ftp portal
    Далее указываем нужный сервер в формате user@site
	User: anonymous@some.server.ru
	Password:
    И работаем как ни в чем не бывало. Любой другой клиент FTP настраивается
аналогичным образом.
    Совсем недавно придумали еще один способ использования ICQ. Для этого в 
настройках клиента нужно сказать, что вы используете http-проски, в качестве 
которого указываете машину с FWTK и ее 80 порт. Говорят, что работает.
			        Вот и все!


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP