Это даже не статья и не полноценное руководство, а маленький сниппет, который поможет вам в наикратчайшие сроки поднять хорошо защищенный и правильно настроенный роутер на любой 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, внутренними группами и пр. тонкостями.