[sisyphus] Q: Куда сейчас идейно правильно вписывать маскарадинг?
Michael A. Kangin
=?iso-8859-1?q?mak_=CE=C1_rsmu=2Eru?=
Ср Авг 6 10:51:18 MSD 2008
В сообщении от Wednesday 06 August 2008 09:53:42 Dmitriy Kruglikov написал(а):
> > А у меня на всех рутерах традиционно файрвол поднимается скриптом. Ибо
> > очень
> > много правил генерится в циклах, с подстановками переменных...
>
> Однажды, когда я начал заблуждаться в своих скриптах с кучей подстановок,
> я взял огромный рашпиль, маны, трубку-воскурку для манов и задумался ...
> Как оказалось, масса правил заменилась одной строкой...
> Например, вместо обработки каждого нового PPP соединения
> я написал правила типа
> -i ppp+ и далее по тексту ...
Да, где можно, это используется, но когда для каждого ppp требуется
индивидуальный подход? Реальный случай: в зависимости от юзера, стучащегося в
VPN, давать доступ на разные машины в сети и порты.
> И все работало точно так же, но управлялось гораздо проще ...
> Опять же, много правил можно убрать, если применить
> -p icmp -m state --state RELATED,ESTABLISHED
Без этого ни куда, да...
> для уже открытых соединений ...
> И быстрее, и проще для глаз и мозга ...
Избранное:
--------------
[ -r $ADDR_FILE ] && {
grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}[[:space:]]*([0-9a-fA-F]{2}\:){5}
[0-9a-fA-F]{2}" $ADDR_FILE | \
tr -s ';\t' '# \n' | cut -f1 -d '#' | cut -f1,2,4 -d " " |grep " 1$" |
\
while read ALLOWED_ADDR
do
ALLOWED_ADDR_MAC=`echo $ALLOWED_ADDR | cut -f2 -d' '`
ALLOWED_ADDR_IP=`echo $ALLOWED_ADDR | cut -f1 -d' '`
${IPT} -I check_allowed -s $ALLOWED_ADDR_IP -m
mac --mac-source $ALLOWED_ADDR_MAC -j RETURN
${IPT} -t mangle -A traf_out -s $ALLOWED_ADDR_IP -j RETURN
${IPT} -t mangle -A traf_in -d $ALLOWED_ADDR_IP -j RETURN
done
} || {
echo "WARNING! Can't read ${ADDR_FILE}, access closed for all."
}
---------------------
читаем пару IP/MAC из файла клиентов, и, у кого разрешён выход в интернет,
ставим правило соответствия IP/MAC и правила для подсчета трафика на mangle
-------------------
for IFACE in $INT_IFACE; do
for NET in `get_subnets_by_iface $IFACE`; do
${IPT} -A check_addr -i $IFACE -s $NET -j RETURN
for EIFACE in $EXT_IFACE; do
${IPT} -A check_addr -i $EIFACE -s $NET -j mism_addr
done
done
done
-----------------
Боремся со спуфингом;
ну и банальное
for NET in $OUR_NETS; do
${IPT} -A tcp_packets -p tcp -s $NET --dport 22 -j ACCEPT
done
Как это реализовать на уровне статической таблицы правил? Абсолютно
непереносимой к тому же между рутерами.
--
wbr, Michael A. Kangin
Подробная информация о списке рассылки Sisyphus