Мини-HOWTO: Совместное использование мостов и Firewall в Linux |
---|
Пред. | | След. |
FIREWALL
Программы и дополнительная литература
Вы должны прочитать HOWTO: Firewall.
Там сказано, что вам понадобится утилита ipfwadm, если у вас ее еще нет. Существуют, правда, и другие, но как я начал использовать ipfwadm, так на нем и остановился. Он достаточно удобен и прост! Вы всегда знаете, что конкретно он делает.
Предварительные проверки
Вы уже собрали IP-переадресацию и маскарадинг в ядро, поэтому проверьте,
находится ли firewall в его стандартном (разрешающем) состоянии
командой
ipfwadm -I -l ipfwadm -O -l ipfwadm -F -l |
Эти команды выдадут список правил соответственно для входного, выходного и переадресуемых потоков firewall. Опция "-l" означает "list" (список).
Возможно, вы собрали и систему учета IP-пакетов:
Вы увидите, что ни одно правило не определено, и что, по умолчанию, firewall пропускает все пакеты. Вы всегда можете вернуться к этому состоянию командами
ipfwadm -I -f
ipfwadm -O -f
ipfwadm -F -f |
Опция "-f" означает "flush" (сбросить, очистить). Эта опция вам может понадобиться.
Основное правило
Я хочу отрезать внешний мир от моей сети и не более того, поэтому мое
последнее (воспринимаемое по умолчанию) правило будет следующим - firewall
должен игнорировать любые пакеты, идущие из внутренней сети во внешний мир.
Я поместил все правила в файл /etc/rc.d/rc.firewall и запускаю его из /etc/rc.d/rc.local в процессе загрузки.
ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0 |
Опция "-S" задает адрес источника и маску. "-D" - адрес и маску получателя.
Это - достаточно подробный формат. Ipfwadm
понимает сетевые имена и некоторые сокращения (все это описано в man).
Наверно, более удобно поместить некоторые или все эти правила в выходной
поток firewall, используя "-O" вместо "-I", но я оставлю эти правила на
входящем потоке.
Исключения для адресов
Все исключения этому общему отрицанию я должен поместить до установки основного правила.
Машина, работающая в качестве firewall во внутренней сети, будет иметь некоторые привилегии. Без особого разрешения будет запрещено входить в машину, использующую firewall, но с этим разрешением им можно общаться с внешним миром.
ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \
-D 0.0.0.0/0.0.0.0 |
Я также разрешу клиентам внутренней сети общаться с firewall-машиной. Возможно, они попытаются таким образом постараться выбраться во внешний мир!
ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \
-D 192.168.2.100/255.255.255.255 |
На этом моменте вы можете попытаться добраться до клиентов снаружи firewall, при помощи telnet, но у вас ничего не получится. Это означает, что вы смогли увидеть их машины, но они не могут послать вам ничего. Вы сможете установить контакт с внутренними машинами, если firewall у вас играет роль простого аудитора. Испытайте rlogin и ping ,
а также tcpdump на первой или второй карте. Вы должны понять, что вы увидите.
Исключения для протоколов
Я буду облегчать правила протокол за протоколом. Первое, что я хочу сделать - разрешить ping снаружи внутрь и получать ответ, поэтому я добавлю правило:
ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \
-D 0.0.0.0/0.0.0.0 |
Опция "-P icmp" как раз отвечает за протокол.
Пока я не настроил должным образом ftp-proxy, я также разрешу вызовы ftp, используя конкретные порты - 20, 21 и 115 на внешние машины.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
-D 0.0.0.0/0.0.0.0 20 21 115 |
Я так и не смог заставить работать sendmail
между внутренними машинами без DNS. Вместо настройки собственного DNS-сервера, я просто разрешил запросы с моей сети к внешнему серверу, поместив заодно его адрес в файлы /etc/resolv.conf на машинах моей сети
("nameserver 123.456.789.31" в отдельной строке).
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
-D 123.456.789.31/255.255.255.255 54 |
Номер порта и протокол определенного сервиса вы можете узнать при помощи
tcpdump. Задействуйте этот сервис при
помощи ftp или telnet или чего-нибудь подобного с внутренней машины
или на нее, и затем проверяйте порты firewall при помощи tcpdump, например:
tcpdump -i eth1 -e host client04 |
В файле /etc/services
также есть много интересного. Чтобы разрешить telnet и ftp ВНУТРЬ сети ИЗВНЕ через firewall, вам придется разрешить локальным клиентам производить вызовы НАРУЖУ на определенных портах. С ftp все понятно - это сервер, организующий собственное соединение с получателем - но я не очень понимаю, зачем это необходимо для telnet.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \
-D 0.0.0.0/0.0.0.0 |
Иногда возникает проблема с некоторыми демонами, которые пытаются выяснить имя машины-firewall, чтобы узнать собственный сетевой адрес. У меня лично возникла проблема с Rpc.yppasswdd. Он настаивал на передаче информации наружу от firewall (через вторую карту). Это привело к тому, что клиенты изнутри его не видели.
Вместо запуска IP-алиасинга или правки кода демона, я просто переписал имя машины на адрес внутренней карты в клиентских файлах /etc/hosts.
Проверка
Вам, наверное, надо будет проверить работу telnet, rlogin и
ping снаружи. Изнутри вы должны смочь
произвести ping наружу. Вы также должны
иметь возможность команды telnet на
firewall-машину изнутри сети, а на самой этой машине должно быть возможно
все.
Вот и все. Далее вам, наверно, стоит узнать подробнее про rpc/Yellow Pages и работу с файлом паролей. Сеть с firewall
должна работать так, чтобы обычные пользователи не могли войти в firewall
(если они смогут зайти в него, они смогут выбраться наружу). Хороших вам
HOWTO!