Это даже не статья и не полноценное руководство, а маленький сниппет, который поможет вам в наикратчайшие сроки поднять хорошо защищенный и правильно настроенный роутер на любой GNU/Linux машине. И это при полном отсутствии необходимости знания iptables.
Firehol, в отличие от shorewall, это даже не набор скриптов, а всего лишь один bash скрипт. Поэтому для его использования необходимость в perl и других интерпретаторах отпадает.
Firehol ближе к старому доброму narc (netfilter automatic rule configurator), но последний не обновлялся уже 6 лет и представляет из себя достаточно простой скрипт, который не совместим с последними версиями iptables. Ближе он тем, что позволяет писать правила практически народном человеческом языке.
Для gentoo это как всегда emerge -av net-firewall/firehol (не забудьте добавить ~arch в /etc/portage/package.keywords или использовать ACCEPT_KEYWORDS= «~arch»)
После установки, извлекаем из архива firehol-1.273.tar.bz2 файл get-iana.sh и запускаем его. Возможно, в других дистрибутивах этот файл копируется в систему. В gentoo ebuild егоналево не трогает. Суть работы данного скриптика — загрузить зарезервированные IP'шники прямо из IANA.
Самая распространённая конфигурация.
Пример конфигурации для роутера в небольшой компании. Разрешены все исходящие соединения, одно входящее ssh на нестандартном порту, кроме того весь http трафик будет заворачиваться на squid. Для экономии места опущу некоторые блоки комментариев.
��олитика построения правил в firehol: запретить всё, разрешить только явно указанное.
Пример, указанный выше создаёт около 400(!) правил, включая правила против атак типа флуда или xmas.
С Firehol также можно не бояться внести какие-то изменения в конфиг, превращающие удаленный сервер в груду неотзывчивого железа. Он всегда оставит вашу текущую сессию ssh открытой, даже если вы в правилах напортачили с настройками ssh! Во-вторых, rc скрипт имеет несколько полезнейших параметров. Пожалуй, наиболее используемый из них — try.
Перед окончательным применением параметров у вас есть возможность проверить их работоспособность. Для этого достаточно вызвать скрипт с параметром try: /etc/init.d/firehol try
Firehol загрузит свежепоправленные конфигурационные файлы и будет покорно ждать от вас слова commit. Если такового не поступит в течении тридцати секунд, то будут восстановлены прежние работоспособные параметры.
Помимо стандартных start,stop,restart и только что описанного try существуют ещё три:
status — выводит текущие правила iptables
save — сохраняет текущие правила iptables
panic — используется при обнаружении вторжения, перекрываются ВСЕ контакты с внешним миром, включая внутреннюю сеть.
Заинтересовавшихся, милости просим на сайт программы, где вы найдёте исчерпывающую документацию по этому прекрасному продукту, а также множество примеров конфигураций от домашнего NAT до межофисного маршрутизатора с DMZ, внутренними группами и пр. тонкостями.
Firehol, в отличие от shorewall, это даже не набор скриптов, а всего лишь один bash скрипт. Поэтому для его использования необходимость в perl и других интерпретаторах отпадает.
Firehol ближе к старому доброму narc (netfilter automatic rule configurator), но последний не обновлялся уже 6 лет и представляет из себя достаточно простой скрипт, который не совместим с последними версиями iptables. Ближе он тем, что позволяет писать правила практически на
emerge or not apt-get?
Для gentoo это как всегда emerge -av net-firewall/firehol (не забудьте добавить ~arch в /etc/portage/package.keywords или использовать ACCEPT_KEYWORDS= «~arch»)
После установки, извлекаем из архива firehol-1.273.tar.bz2 файл get-iana.sh и запускаем его. Возможно, в других дистрибутивах этот файл копируется в систему. В gentoo ebuild его
Самая распространённая конфигурация.
Пример конфигурации для роутера в небольшой компании. Разрешены все исходящие соединения, одно входящее ssh на нестандартном порту, кроме того весь http трафик будет заворачиваться на squid. Для экономии места опущу некоторые блоки комментариев.
cat /etc/firehol/firehol.conf
# ----------------------------------------------------------------------------
# НЕСТАНДАРТНЫЕ СЛУЖБЫ
# ----------------------------------------------------------------------------
server_ssh_ports="tcp/2202" # Демон SSH слушает на порту 2202
# ----------------------------------------------------------------------------
# СЕТЕВЫЕ НАСТРОЙКИ
# ----------------------------------------------------------------------------
# --- ВНУТРЕННИЙ ИНТЕРФЕЙС ---
HOME_MYIP="192.168.1.1" # Статический IP адрес нашего внутреннего интерфейса
HOME_MYIF="eth1" # Собственно сам интерфейс
HOME_BCAST="192.168.1.255" # броадкаст
HOME_LAN="192.168.1.0/24" # сеть
HOME_SERVICES="all" # службы, в нашей сети
HOME_DHCP=1 # Устанавливаем в 1, если наш сервер также предоставляет службу DHCP
FIREHOL_LOG_MODE="LOG" # Уровни логирования
FIREHOL_LOG_LEVEL="error" #Он очень разговорчив даже на этом уровне :)
# --- ВНЕШНИЙ ИНТЕРФЕЙС ---
PUBLIC_MYIP="87.250.251.11" # Оставьте пустым, если IP является динамическим
PUBLIC_MYIF="eth0" # Собственно сам публичный интерфейс
PUBLIC_SERVICES="ssh" # Службы, которые видны извне для всех.
DIAL_ON_DEMAND=0 # Устанавливаем в 1, если внешний интерфейс нуждается в автодозвоне
# --- ДОВЕРЕННАЯ ЗОНА ---
TRUSTED_PCS="209.85.135.104" # Этому IP адресу разрешено подключаться к
TRUSTED_SERVICES="ssh http" # ssh и http службам.
#Обратите внимание, что http будет доступен только IP из TRUSTED_PCS.
# --- ПРОЗРАЧНЫЙ ПРОКСИ ---
SQUID_PORT="3128" # Оставляем пустым, если п��окси не используется
SQUID_USERS="squid" # Пользователи, которых пропускать напрямую
SQUID_EXCLUDE="192.168.1.1" # IP адреса, которые пропускать напрямую
# --- ЧЕРНЫЙ СПИСОК ---
blacklist="" # Запрещенные IP адреса
# ----------------------------------------------------------------------------
# ПОМОЩНИКИ (ниже редактировать только после ознакомления с параметрами firehol)
# ----------------------------------------------------------------------------
if [ ! -z "${blacklist}" ]
then
blacklist full "${blacklist}"
fi
if [ ! -z "${SQUID_PORT}" ]
then
transparent_squid "${SQUID_PORT}" "${SQUID_USERS}" \
inface "${HOME_MYIF}" src "${HOME_LAN}" \
`test ! -z "${SQUID_EXCLUDE}" && echo "dst not ${SQUID_EXCLUDE}"`
fi
if [ ! -z "${PUBLIC_MYIP}" ]
then
snat to "${PUBLIC_MYIP}" \
outface "${PUBLIC_MYIF}" \
src "${HOME_LAN}" dst not "${UNROUTABLE_IPS}"
else
masquerade "${PUBLIC_MYIF}"
fi
interface "${HOME_MYIF}" home src "${HOME_LAN}" dst "${HOME_MYIP} ${HOME_BCAST}"
policy reject
server "${HOME_SERVICES}" accept
client all accept
if [ ${HOME_DHCP} -eq 1 ]
then
interface "${HOME_MYIF}" dhcp
server dhcp accept
fi
interface "${PUBLIC_MYIF}" internet \
src not "${UNROUTABLE_IPS}" \
`test ! -z "${PUBLIC_MYIP}" && echo "dst ${PUBLIC_MYIP}"`
protection strong
policy drop
if [ ! -z "${TRUSTED_PCS}" -a ! -z "${TRUSTED_SERVICES}" ]
then
server "${TRUSTED_SERVICES}" accept src "${TRUSTED_PCS}"
fi
server "${PUBLIC_SERVICES}" accept
client all accept
if [ ${DIAL_ON_DEMAND} -eq 1 ]
then
interface "${PUBLIC_MYIF}" dialup
client all accept
fi
router internet2lan inface "${PUBLIC_MYIF}" outface "${HOME_MYIF}" \
src not "${UNROUTABLE_IPS}" dst "${HOME_LAN}"
client all accept
Забыли что-то закрыть/запретить?
��олитика построения правил в firehol: запретить всё, разрешить только явно указанное.
Пример, указанный выше создаёт около 400(!) правил, включая правила против атак типа флуда или xmas.
Ага, вот это правило… Не-не-не!
С Firehol также можно не бояться внести какие-то изменения в конфиг, превращающие удаленный сервер в груду неотзывчивого железа. Он всегда оставит вашу текущую сессию ssh открытой, даже если вы в правилах напортачили с настройками ssh! Во-вторых, rc скрипт имеет несколько полезнейших параметров. Пожалуй, наиболее используемый из них — try.
Перед окончательным применением параметров у вас есть возможность проверить их работоспособность. Для этого достаточно вызвать скрипт с параметром try: /etc/init.d/firehol try
Firehol загрузит свежепоправленные конфигурационные файлы и будет покорно ждать от вас слова commit. Если такового не поступит в течении тридцати секунд, то будут восстановлены прежние работоспособные параметры.
Помимо стандартных start,stop,restart и только что описанного try существуют ещё три:
status — выводит текущие правила iptables
save — сохраняет текущие правила iptables
panic — используется при обнаружении вторжения, перекрываются ВСЕ контакты с внешним миром, включая внутреннюю сеть.
Гиммемоа
Заинтересовавшихся, милости просим на сайт программы, где вы найдёте исчерпывающую документацию по этому прекрасному продукту, а также множество примеров конфигураций от домашнего NAT до межофисного маршрутизатора с DMZ, внутренними группами и пр. тонкостями.
