* [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах
@ 2006-08-04 15:20 Andrew Kornilov
2006-08-04 16:01 ` Sergey Vlasov
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Andrew Kornilov @ 2006-08-04 15:20 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list
Это повтор, предыдущее письмо было от hiddenman@altlinux.ru, вроде не
прошло. Если что, sorry.
=======================
Привет всем.
Проводится соцопрос на тему: "Нужна ли поддержка shell-переменных в
конфигурационных файлах etcnet".
То бишь, чтобы была возможность писать строки вида:
ipv4rule:
add from $FRIEND_NET1 table friend_net1
ipv4route:
default via $ISP1_GW table friend_net1
и т.д. и т.п.
А в файлах options уже задавать переменные как обычно:
FRIEND_NET1=1.2.3.0/24
ISP1_GW=4.5.6.7
Я пытаюсь убедить Дениса, что это очень полезно и никаких проблем не
принесет (в firewall-коде я сразу такое сделал), он пока мне не очень
верит. В более-менее сложных конфигурациях (один из примеров которых я
на днях добавил в svn), когда много каналов, шлюзов, меняются IP и т.д.,
весьма напряжно и неудобно каждый раз менять эти значения в десятке
разных файлов.
Поэтому и проводится это голосование, просьба ответить на hiddenman@ и
pilot@, можно просто "нужно", "не нужно", можно (и лучше :) с
аргументацией и приведением примеров из собственной практики.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах
2006-08-04 15:20 [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Andrew Kornilov
@ 2006-08-04 16:01 ` Sergey Vlasov
2006-08-04 16:28 ` [sisyphus] etcnet poll: ��� Andrew Kornilov
2006-08-04 18:20 ` [sisyphus] etcnet poll: поддержка shell-переменных в конфигур� Aleksey Avdeev
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Sergey Vlasov @ 2006-08-04 16:01 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list
[-- Attachment #1: Type: text/plain, Size: 1917 bytes --]
On Fri, Aug 04, 2006 at 06:20:33PM +0300, Andrew Kornilov wrote:
> Проводится соцопрос на тему: "Нужна ли поддержка shell-переменных в
> конфигурационных файлах etcnet".
> То бишь, чтобы была возможность писать строки вида:
> ipv4rule:
> add from $FRIEND_NET1 table friend_net1
> ipv4route:
> default via $ISP1_GW table friend_net1
> и т.д. и т.п.
> А в файлах options уже задавать переменные как обычно:
> FRIEND_NET1=1.2.3.0/24
> ISP1_GW=4.5.6.7
Тогда нужно как-то разграничить пространства имён для переменных,
встроенных в etcnet и добавленных пользователем, чтобы исключить
случаи, когда в новой версии etcnet добавляется какая-то новая
переменная, и при этом ломаются старые конфигурации, где переменная с
таким же именем использовалась для собственных целей.
Вариант с использованием имён в нижнем регистре здесь не проходит
из-за возможности конфликтов с локальными переменными функций etcnet,
которые сейчас выглядят именно так (local в shell только сохраняет
старое значение переменной, при этом доступ к старому значению
пропадает до возврата из функции, где была использована команда
local).
> Я пытаюсь убедить Дениса, что это очень полезно и никаких проблем не
> принесет (в firewall-коде я сразу такое сделал), он пока мне не очень
> верит. В более-менее сложных конфигурациях (один из примеров которых я
> на днях добавил в svn), когда много каналов, шлюзов, меняются IP и т.д.,
> весьма напряжно и неудобно каждый раз менять эти значения в десятке
> разных файлов.
> Поэтому и проводится это голосование, просьба ответить на hiddenman@ и
> pilot@, можно просто "нужно", "не нужно", можно (и лучше :) с
> аргументацией и приведением примеров из собственной практики.
Подозреваю, что после добавления простых переменных захочется ещё и
возможности засовывать в такие переменные более одного значения для
автоматической генерации нескольких аналогичных строк.
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: ���
2006-08-04 16:01 ` Sergey Vlasov
@ 2006-08-04 16:28 ` Andrew Kornilov
2006-08-04 17:12 ` [sisyphus] etcnet poll: ????????? Sergey Vlasov
0 siblings, 1 reply; 8+ messages in thread
From: Andrew Kornilov @ 2006-08-04 16:28 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list
Sergey Vlasov wrote:
>Вариант с использованием имён в нижнем регистре здесь не проходит
>из-за возможности конфликтов с локальными переменными функций etcnet,
>которые сейчас выглядят именно так (local в shell только сохраняет
>старое значение переменной, при этом доступ к старому значению
>пропадает до возврата из функции, где была использована команда
>local).
>
>
Да, с этим согласен, может где-то вылезти, хотя вероятность достаточно
низкая. Можно какой-то префикс для них использовать, можно поискать в
man bash что-нибудь интересное. На самом деле переопределение системных
переменных etcnet полезно и некоторые этим пользуются (я, например). Это
гибко и удобно. Для того же ppp/multicast ppp нужные разные
BASIC_PPPOPTIONS, раньше её не получалось менять, сейчас можно. Есть и
другие примеры, вплоть до переопределения функций (try_rmmod() одно
время пришлось пустой сделать, прямо в файле options, был глюк с
некоторыми драйверами сетевух, переставали работать, если была попытка
выгрузить модуль). В общем, тут или делать вид, что мы "заботимся" о
"неломаемости" и не давать такое делать или все-таки быть в меру гибкой
утилитой, а уж если админ не соображает, то он и в другом месте успешно
всё может разломать :)
>Подозреваю, что после добавления простых переменных захочется ещё и
>возможности засовывать в такие переменные более одного значения для
>автоматической генерации нескольких аналогичных строк.
>
>
Угадал, я такое тоже хотел изначально. Пока еще не придумал, как это
сделать красиво (хотя бы для себя). :)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: ?????????
2006-08-04 16:28 ` [sisyphus] etcnet poll: ��� Andrew Kornilov
@ 2006-08-04 17:12 ` Sergey Vlasov
2006-08-07 8:04 ` Sergey
0 siblings, 1 reply; 8+ messages in thread
From: Sergey Vlasov @ 2006-08-04 17:12 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list
[-- Attachment #1: Type: text/plain, Size: 2380 bytes --]
On Fri, Aug 04, 2006 at 07:28:31PM +0300, Andrew Kornilov wrote:
> Sergey Vlasov wrote:
> >Вариант с использованием имён в нижнем регистре здесь не проходит
> >из-за возможности конфликтов с локальными переменными функций etcnet,
> >которые сейчас выглядят именно так (local в shell только сохраняет
> >старое значение переменной, при этом доступ к старому значению
> >пропадает до возврата из функции, где была использована команда
> >local).
> >
> Да, с этим согласен, может где-то вылезти, хотя вероятность достаточно
> низкая. Можно какой-то префикс для них использовать, можно поискать в
> man bash что-нибудь интересное.
Нет там ничего интересного - всё интересное в man perl (или tcl, или
что ещё кому нравится).
> На самом деле переопределение системных
> переменных etcnet полезно и некоторые этим пользуются (я, например). Это
> гибко и удобно. Для того же ppp/multicast ppp нужные разные
> BASIC_PPPOPTIONS, раньше её не получалось менять, сейчас можно. Есть и
> другие примеры, вплоть до переопределения функций (try_rmmod() одно
> время пришлось пустой сделать, прямо в файле options, был глюк с
> некоторыми драйверами сетевух, переставали работать, если была попытка
> выгрузить модуль). В общем, тут или делать вид, что мы "заботимся" о
> "неломаемости" и не давать такое делать или все-таки быть в меру гибкой
> утилитой, а уж если админ не соображает, то он и в другом месте успешно
> всё может разломать :)
Копание в недокументированных переменных etcnet - это другой случай,
когда вряд ли стоит обижаться на то, что при обновлении вдруг всё
сломалось. Я имел в виду другую ситуацию - когда пользовательская
переменная вдруг в новой версии etcnet начинает использоваться внутри
самого etcnet; вот этого быть не должно.
> >Подозреваю, что после добавления простых переменных захочется ещё и
> >возможности засовывать в такие переменные более одного значения для
> >автоматической генерации нескольких аналогичных строк.
> >
> Угадал, я такое тоже хотел изначально. Пока еще не придумал, как это
> сделать красиво (хотя бы для себя). :)
Тут ещё возникает вопрос - что делать, если в одной строке делается
подстановка нескольких таких переменных? Возможны как минимум две
интерпретации - декартово произведение (вложенные foreach) и
параллельные списки (как foreach с несколькими списками в tcl).
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: поддержка shell-переменных в конфигур�
2006-08-04 15:20 [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Andrew Kornilov
2006-08-04 16:01 ` Sergey Vlasov
@ 2006-08-04 18:20 ` Aleksey Avdeev
2006-08-07 8:04 ` [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Sergey
2006-08-07 21:15 ` Sviatoslav Sviridov
3 siblings, 0 replies; 8+ messages in thread
From: Aleksey Avdeev @ 2006-08-04 18:20 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list; +Cc: pilot, hiddenman
[-- Attachment #1.1: Type: text/plain, Size: 2313 bytes --]
Andrew Kornilov пишет:
> Это повтор, предыдущее письмо было от hiddenman@altlinux.ru, вроде не
> прошло. Если что, sorry.
> =======================
> Привет всем.
>
> Проводится соцопрос на тему: "Нужна ли поддержка shell-переменных в
> конфигурационных файлах etcnet".
> То бишь, чтобы была возможность писать строки вида:
> ipv4rule:
> add from $FRIEND_NET1 table friend_net1
> ipv4route:
> default via $ISP1_GW table friend_net1
> и т.д. и т.п.
> А в файлах options уже задавать переменные как обычно:
> FRIEND_NET1=1.2.3.0/24
> ISP1_GW=4.5.6.7
>
>
> Я пытаюсь убедить Дениса, что это очень полезно и никаких проблем не
> принесет (в firewall-коде я сразу такое сделал), он пока мне не очень
> верит. В более-менее сложных конфигурациях (один из примеров которых я
> на днях добавил в svn), когда много каналов, шлюзов, меняются IP и т.д.,
> весьма напряжно и неудобно каждый раз менять эти значения в десятке
> разных файлов.
> Поэтому и проводится это голосование, просьба ответить на hiddenman@ и
> pilot@, можно просто "нужно", "не нужно", можно (и лучше :) с
> аргументацией и приведением примеров из собственной практики.
Нужно: если сущность определена в одном месте -- меньше вероятность
ошибок. Ещё удобнее -- если будет возможность определения массивов (с
последующих их итерацией).
PS: Использую подобное в скриптах генерации firewall (см. вложения), но
пока -- не под etcnet.
--
С уважением. Алексей.
[-- Attachment #1.2: firewall.const --]
[-- Type: text/plain, Size: 6806 bytes --]
#!/bin/sh
#
# $Id: firewall.const v 1.0 2004/07/27 16:11:06 root Exp $
#
# Name: firewall.const
# Summary: IPtable based firewall script const
# Author: Aleksey Avdeev <solo at ramax . ru>
# Organization: RAMAX International
# Comments [ru]: ëÏÎÓÔÁÎÔÙ ÓËÒÉÐÔÁ ÎÁÓÔÒÏÊËÉ firewall-Á Ó ÐÏÍÏÝØÀ iptables
#
IPT="/sbin/iptables"
DEPMOD="/sbin/depmod"
MODPROBE="/sbin/modprobe"
IFCONFIG="/sbin/ifconfig"
GREP="/bin/grep"
FGREP="/bin/fgrep"
CUT="/bin/cut"
SORT="/bin/sort"
UNIQ="/usr/bin/uniq"
EXT_INT="ppp_ext" # ×ÎÅÛÎÉÊ ÓÅÔÅ×ÏÊ ÉÎÔÅÒÆÅÊÓ
#DMZ_INT="eth1" # ÓÅÔÅ×ÏÊ ÉÎÔÅÒÆÅÊÓ dmz
LAN_INT="eth0" # ÓÅÔÅ×ÏÊ ÉÎÔÅÒÆÅÊÓ ÌÏËÁÌØÎÏÊ ÓÅÔÉ
LOOPBACK_INT="lo" # ÉÎÔÅÒÆÅÊÓ "ÌÏËÁÌØÎÏÊ ÐÅÔÌÉ"
LAN_PROXY="sl0" # ÓÅÔÅ×ÏÊ ÐÒÏËÓÉ ÉÎÔÅÒÆÅÊÓ
#EXT_INT="eth0_1" # ×ÎÅÛÎÉÊ ÓÅÔÅ×ÏÊ ÉÎÔÅÒÆÅÊÓ
# ÷ÎÅÛÎÉÅ ÉÎÔÅÒÆÅÊÓÙ:
declare -a EXT_INTS=(
"$LAN_PROXY"
"$EXT_INT"
"eth1"
"eth1_1"
)
# Nat ÉÎÔÅÒÆÅÊÓÙ
declare -a NAT_INTS=(
"$LAN_PROXY"
"$EXT_INT"
)
# ÷ÎÕÔÒÅÎÎÉÅ ÉÎÔÅÒÆÅÊÓÙ:
declare -a LAN_INTS=(
"$LAN_INT"
"eth1_0"
)
# ÷ÎÕÔÒÅÎÎÉÅ ÉÎÔÅÒÆÅÊÓÙ:
declare -a DMZ_INTS="eth1"
ANYWHARE="0/0"
IP_LO="127.0.0.0/8"
IP_A="10.0.0.0/8"
IP_B="172.16.0.0/12"
IP_C="192.168.0.0/16"
IP_D="224.0.0.0/4" # multicast, ÎÅÍÏÇÕÔ ÂÙÔØ ÉÓÔÏÞÎÉËÏÍ
IP_E="240.0.0.0/5" # ÜËÓÐÉÒÉÍÅÎÔÁÌØÎÙÅ
# ûÉÒÏËÏ×ÅÛÁÔÅÌØÎÙÅ:
IP_BC_SRC="0.0.0.0"
IP_BC_DEST="255.255.255.255"
# IP ×ÎÅÛÎÉÅ
declare -a INT_ppp_ext=(
"ppp0"
"ppp1"
"ppp2"
"ppp3"
)
declare -a INT_sl0=("sl0")
NET_sl0="$ANYWHARE"
# IP ÓÅÔÉ
declare -a INT_eth0=("eth0")
IP_eth0="192.168.0.1"
NET_eth0="192.168.0.0/25"
declare -a IP_BC_SRC_eth0=(
"192.168.0.0"
"0.0.0.0"
)
declare -a IP_BC_DEST_eth0=(
"192.168.0.127"
"192.168.0.255"
"192.168.255.255"
"255.255.225.255"
)
declare -a INT_eth1=("eth1")
IP_eth1="192.168.1.2"
NET_eth1="192.168.1.0/24"
declare -a IP_BC_SRC_eth1=(
"192.168.1.0"
"0.0.0.0"
)
declare -a IP_BC_DEST_eth1=(
"192.168.1.255"
"255.255.255.255"
)
declare -a INT_eth1_0=("eth1")
IP_eth1_0="10.8.8.7"
NET_eth1_0="10.0.0.0/8"
declare -a IP_BC_SRC_eth1_0=(
"10.0.0.0"
"0.0.0.0"
)
declare -a IP_BC_DEST_eth1_0=(
"10.255.255.255"
"255.255.255.255"
)
declare -a INT_eth1_1=("eth1")
IP_eth1_1="xxx.xxx.xxx.xxx"
NET_eth1_1="xxx.xxx.xxx.0/24"
declare -a IP_BC_SRC_eth1_1=(
"xxx.xxx.xxx.0"
"0.0.0.0"
)
declare -a IP_BC_DEST_eth1_1=(
"xxx.xxx.xxx.255"
"255.255.255.255"
)
# îÅËÏÒÒÅËÔÎÙÅ ÁÄÒÅÓÁ:
BAD_IP_HACK=(
"212.18.63.105" # ÷ÓË îÏÑ 13 17:38:51 MSK 2005
"212.49.98.34" # ðÎÄ îÏÑ 14 06:32:52 MSK 2005
"84.244.3.70" # óÒÄ îÏÑ 30 21:12:01 MSK 2005
"67.43.159.57" # óÂÔ äÅË 3 03:14:34 MSK 2005
"202.90.158.204" # ðÔÎ äÅË 30 01:28:47 MSK 2005
"63.228.246.2" # ðÔÎ äÅË 30 03:05:51 MSK 2005
)
# All
BAD_IP_ALL=(
"$IP_LO"
"$IP_B"
"$IP_D"
"$IP_E"
${BAD_IP_HACK[@]}
)
# ÷ÈÏÄÑÝÉÅ ÎÁ ×ÎÅÛÎÉÅ ÁÄÒÅÓÁ
BAD_IP_SRC_ppp_ext=(
"$IP_A"
"$IP_C"
"$IP_BC_DEST"
)
# ÷ÈÏÄÑÝÉÅ ÎÁ ×ÎÕÔÒÅÎÎÉÅ ÁÄÒÅÓÁ
BAD_IP_SRC_eth0=(
"$IP_A"
"$IP_BC_DEST_eth0"
"$IP_BC_DEST"
)
BAD_IP_SRC_eth1=(
"$IP_BC_DEST_eth1"
"$IP_BC_DEST"
)
BAD_IP_ALL_DEST=(
"$IP_LO"
"$IP_B"
"$IP_E"
"$IP_BC_SRC"
)
UNPRIVPORTS="1024:"
declare -a ALARM_PORTS=(
"135:139" # rpc, netbios-*
"1433:1434" # ms-sql-*
"445" # microsoft-ds
"1025"
"1512" # wins
"2745"
"3127"
"6129"
"5000"
"4444"
)
declare -a MAIL_TCP=(
"25" # smtp
"143" # imap
"993" # imaps
"110" # pop3
"995" # pop3s
)
declare -a PUBLIC_ALL=(
"53" # domain
)
declare -a PUBLIC_TCP=(
${PUBLIC_ALL[@]}
"22" # ssh
# "20" # ftp-data
# "21" # ftp
# "25" # smtp
"80" # http
${MAIL_TCP[@]}
)
declare -a PUBLIC_UDP=(
${PUBLIC_ALL[@]}
"123" # ntp
)
#echo ${PUBLIC_UDP[@]}
declare -a PRIVAT_TCP=(
# "80" # http
# "8200" # httpd-perl
# ${MAIL_TCP[@]}
)
declare -a PRIVAT_UDP=(
"514" # syslog
)
declare -a LAN_ALL=(
"53" # domain
"631" # ipp
)
declare -a LAN_TCP=(
# "80" # http
# "8200" # httpd-perl
"3128" # squid
"139" # netbios-ssn
"445" # microsoft-ds
"139" # netbios-ssn
"7741" # lisa
"8080" # webcache
"8081" # tproxy
${LAN_ALL[@]}
)
declare -a LAN_UDP=(
# "67" # bootps
# "68" # bootpc
"137" # netbios-ns
"138" # netbios-dgm
# "123" # ntp
${LAN_ALL[@]}
)
declare -a FORVARD_TCP=(
${MAIL_TCP[@]}
)
declare -a FORVARD_UDP=(
)
declare -a REJECT_ALL=(
"113" # auth
)
declare -a REJECT_TCP=(
${REJECT_ALL[@]}
)
declare -a REJECT_UDP=(
${REJECT_ALL[@]}
)
declare -a LAN_FIZ_INTS
LAN_FIZ_INTS=(`for INT in ${LAN_INTS[@]}
do
eval INT=\\${INT_$INT[@]}
for I in ${INT[@]}
do
echo $I
done
done|$SORT|$UNIQ`
)
declare -a EXT_FIZ_INTS
EXT_FIZ_INTS=(`for INT in ${EXT_INTS[@]}
do
eval INT=\\${INT_$INT[@]}
for I in ${INT[@]}
do
echo $I
done
done|$SORT|$UNIQ`
)
declare -a NAT_FIZ_INTS
NAT_FIZ_INTS=(`for INT in ${NAT_INTS[@]}
do
eval INT=\\${INT_$INT[@]}
for I in ${INT[@]}
do
echo $I
done
done|$SORT|$UNIQ`
)
declare -a LAN_IP
LAN_IP=(`for INT in ${LAN_INTS[@]} ${DMZ_INTS[@]}
do
eval IP=\\${NET_$INT[@]}
for I in ${IP[@]}
do
echo $I
done
done|$SORT|$UNIQ`
)
declare -a PRIVAT_IP=(
${LAN_IP[@]}
192.168.1.1
10.8.8.8
)
Ipt()
{
echo "$IPT $@"
$IPT "$@"
} # Ipt
IptMass()
{
# çÅÎÅÒÉÔ ÍÁÓÓÉ× ÐÒÁ×ÉÌ ×ÉÄÁ:
# Ipt $1 $n $2
# ÇÄÅ n>2
local sfirst="$1"
local send="$2"
shift 2
# echo "$@"
declare -a PARAMS
local PARAMS=(`for I in $@; do echo $I; done|$SORT|$UNIQ`)
# echo ${PARAMS[@]}
for I in ${PARAMS[@]}
do
Ipt $sfirst $I $send
done
} #IptMass
IptPorts()
{
# $1 - ÎÁÐÒÁ×ÌÅÎÉÅ <-s|-d|-a>
# S2 - ÓÔÒÏËÁ ÕÓÌÏ×ÉÑ (ÄÏ ÓÐÉÓËÁ ÐÏÒÔÏ×)
# $3 - ÄÅÊÓÔ×ÉÅ (ÐÏÓÌÅ ÓÐÉÓËÁ ÐÏÒÔÏ×)
# $5 - ÓÐÉÓÏË ÐÏÒÔÏ×
local DestPort
case "$1" in
-s)
DestPort="--source-port"
;;
-d)
DestPort="--destination-port"
;;
-a)
DestPort="--port"
;;
*)
exit 1
;;
esac
local sfirst="$2"
local send="$3"
shift 3
#echo $@
# çÒÕÐÐÙ ÐÏÒÔÏ×
declare -a PORTS
local PORTS=(`for I in $@; do echo $I; done|$SORT|$UNIQ|$GREP '^[0-9]*:[0-9]*$'`)
#echo ${PORTS[@]}
if [ "${#PORTS[@]}" -gt 0 ]
then
if [ "$DestPort" != "--port" ]
then
IptMass "$sfirst $DestPort" "$send" ${PORTS[@]}
else
IptMass "$sfirst --destination-port" "$send" ${PORTS[@]}
IptMass "$sfirst --source-port" "$send" ${PORTS[@]}
fi
fi
# ïÔÄÅÌØÎÙÅ ÐÏÒÔÙ
local PORTS=(`for I in $@; do echo $I; done|$SORT|$UNIQ|$GREP '^[0-9]*$'`)
#echo ${PORTS[@]}
if [ "${#PORTS[@]}" -gt 0 ]
then
local I=1
local LP=""
for P in ${PORTS[@]}
do
if [ $I -eq 1 ]
then
LP="$P"
elif [ $I -eq 15 ]
then
Ipt $sfirst -m multiport $DestPort "${LP},$P" $send
I=0
LP=""
else
LP="${LP},$P"
fi
(( I++ ))
done
if [ $I -gt 0 ]
then
Ipt $sfirst -m multiport $DestPort "$LP" $send
fi
fi
} # IptPorts
#echo ${ALARM_PORTS[@]}
#echo ${ALARM_MPORTS[@]}
#echo ${ALARM_PORTS[@]} ${ALARM_MPORTS[@]}
[-- Attachment #1.3: rc.firewall --]
[-- Type: text/plain, Size: 9410 bytes --]
#!/bin/sh
#
# $Id: rc.firewall,v 3.0 2003/11/12 16:11:06 root Exp $
#
# Name: rc.firewall
# Summary: IPtable based firewall script
# Author: Igor Homyakov <homyakov at ramax . ru>
# Organization: RAMAX International
# Comments [ru]: óËÒÉÐ ÎÁÓÔÒÏÊËÉ firewall-Á Ó ÐÏÍÏÝØÀ iptables
#
. /etc/firewall/firewall.const
#. firewall.const
# úÁÇÒÕÚËÁ ÎÅÏÂÈÏÄÉÍÙÈ ÍÏÄÕÌÅÊ
$DEPMOD -a
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_nat_ftp
# õÓÔÁÎÏ×ËÁ ÐÏÌÉÔÉËÉ ÐÏ ÕÍÏÌÞÁÎÉÀ
# "þÔÏ ÎÅ ÒÁÚÒÅÛÅÎÏ - ÚÁÐÒÅÝÅÎÎÏ"
echo 'ðÏÌÉÔÉËÉ ÐÏ ÕÍÏÌÞÁÎÉÀ'
Ipt -P INPUT DROP
Ipt -P OUTPUT DROP
Ipt -P FORWARD DROP
# ÓÂÒÏÓ ×ÓÅÈ ÐÒÁ×ÉÌ
echo '-nat'
Ipt -t nat -P PREROUTING ACCEPT
Ipt -t nat -P POSTROUTING ACCEPT
Ipt -t nat -P OUTPUT ACCEPT
echo '-mangle'
Ipt -t mangle -P PREROUTING ACCEPT
Ipt -t mangle -P OUTPUT ACCEPT
Ipt -F
Ipt -t nat -F
Ipt -t mangle -F
Ipt -X
Ipt -t nat -X
Ipt -t mangle -X
# ÷ËÌÀÞÅÎÉÅ ÆÏÒ×ÁÒÄÉÎÇÁ ÐÁËÅÔÏ×
#echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo "ðÒÏÐÕÓË ÷óåè ÐÏ ÌÏËÁÌØÎÏÊ ÐÅÔÌÅ"
Ipt -A INPUT -p ALL -i $LOOPBACK_INT -j ACCEPT
Ipt -A OUTPUT -p ALL -o $LOOPBACK_INT -j ACCEPT
# ÃÅÐÏÞËÁ ÄÌÑ ÏÂÒÁÂÏÔËÉ ICMP
echo 'icmp_allow'
Ipt -N icmp_allow
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 0 -j ACCEPT
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 3 -j ACCEPT
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 4 -j ACCEPT
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 5 -j ACCEPT
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 8 -j ACCEPT
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 11 -j ACCEPT
Ipt -A icmp_allow -p ICMP -s $ANYWHARE --icmp-type 12 -j ACCEPT
Ipt -A icmp_allow -p ICMP \
-m limit --limit 10/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT ICMP drop:'
Ipt -A icmp_allow -p ICMP \
-j DROP
# ÃÅÐÏÞËÁ ÄÌÑ ÒÁÚÒÅÛÅÎÉÑ ×ÈÏÄÑÝÉÈ TCP ÓÏÅÄÉÎÅÎÉÊ
echo 'allowed'
Ipt -N allowed
Ipt -A allowed -p TCP --syn -j ACCEPT
Ipt -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
Ipt -A allowed \
-m limit --limit 10/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT allowed drop:'
Ipt -A allowed -p TCP -j DROP
#
# óÌÕÖÅÂÎÙÅ ÐÒÁ×ÉÌÁ, ÓÉÇÎÁÔÕÒÙ ÁÔÁË É Ô.Ä
#
echo 'óÌÕÖÅÂÎÙÅ ÐÒÁ×ÉÌÁ, ÓÉÇÎÁÔÕÒÙ ÁÔÁË É Ô.Ä'
Ipt -N new_not_syn
Ipt -A new_not_syn \
-m limit --limit 3/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT new no SYN:'
Ipt -A new_not_syn -j DROP
### Drop & log tables
echo 'Drop & log tables'
Ipt -N scan_probe_full_xmas
Ipt -A scan_probe_full_xmas \
-m limit --limit 3/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'FULL-XMAS scan probe:'
Ipt -A scan_probe_full_xmas -j DROP
Ipt -N scan_probe_xmas
Ipt -A scan_probe_xmas \
-m limit --limit 3/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'XMAS scan probe:'
Ipt -A scan_probe_xmas -j DROP
Ipt -N scan_probe_null
Ipt -A scan_probe_null \
-m limit --limit 3/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'NULL scan probe:'
Ipt -A scan_probe_null -j DROP
Ipt -N scan_probe_fin
Ipt -A scan_probe_fin \
-m limit --limit 3/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'SYN/FIN scan probe:'
Ipt -A scan_probe_fin -j DROP
Ipt -N tcp_attack
# FULL-XMAS scan probe
Ipt -A tcp_attack -p TCP --tcp-flags ALL ALL \
-m state --state NEW \
-j scan_probe_full_xmas
# XMAS scan probe
#Ipt -A tcp_attack -p TCP --tcp-flags FIN,URG,PUSH FIN,URG,PUSH \
# -m state --state NEW \
# -j scan_probe_xmas
# NULL scan probe
Ipt -A tcp_attack -p TCP --tcp-flags ALL NONE \
-m state --state NEW \
-j scan_probe_null
# SYN/FIN scan probe
Ipt -A tcp_attack -p TCP --tcp-flags SYN,FIN SYN,FIN \
-m state --state NEW \
-j scan_probe_fin
# new not SYN
echo 'bad_tcp_packets'
Ipt -N bad_tcp_packets
Ipt -A bad_tcp_packets -p TCP ! --syn \
-m state --state NEW \
-j new_not_syn
# éÎÄÉËÁÃÉÑ ÞÅÒ×ÅÊ
Ipt -N virus_log
Ipt -A virus_log \
-m limit --limit 5/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT virus(?):'
Ipt -N virus_drop
Ipt -A virus_drop \
-j virus_log
Ipt -A virus_drop \
-j DROP
Ipt -N virus_reject
Ipt -A virus_reject \
-j virus_log
Ipt -A virus_reject \
-j REJECT
Ipt -N virus_attack_drop
IptPorts -a "-A virus_attack_drop -p tcp" "-j virus_drop" ${ALARM_PORTS[@]}
IptPorts -a "-A virus_attack_drop -p udp" "-j virus_drop" ${ALARM_PORTS[@]}
Ipt -N virus_attack_reject
IptPorts -a "-A virus_attack_reject -p tcp" "-j virus_reject" ${ALARM_PORTS[@]}
IptPorts -a "-A virus_attack_reject -p udp" "-j virus_reject" ${ALARM_PORTS[@]}
# éÎÄÉËÁÃÉÑ ÐÏÄÍÅÎ
Ipt -N badip_log
Ipt -A badip_log \
-m limit --limit 5/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT bad IP:'
Ipt -N badip_drop
Ipt -A badip_drop \
-j badip_log
Ipt -A badip_drop \
-j DROP
Ipt -N badip_reject
Ipt -A badip_reject \
-j badip_log
Ipt -A badip_reject \
-j REJECT
Ipt -N badip_in
IptMass "-A badip_in -s " "-j badip_drop" ${BAD_IP_ALL[@]} $IP_BC_DEST
#Ipt -N badip_out
for INT in ${LAN_INTS[@]} ${EXT_INTS[@]}
do
Ipt -N badip_in_$INT
# BadIp=
eval BadIp=\${IP_BC_DEST_$INT[@]}
# echo ${BadIp[@]}
IptMass "-A badip_in_$INT -s " "-j badip_drop" ${BadIp[@]}
# GodNet=
eval GodNet=\${NET_$INT[@]}
IptMass "-A badip_in_$INT -s " "-j RETURN" ${GodNet[@]}
Ipt -A badip_in_$INT \
-s $IP_C \
-j badip_drop
done
# ãÅÐÏÞËÉ INPUT
Ipt -N in_privat
IptPorts -d "-A in_privat -p tcp" "-j allowed" ${PRIVAT_TCP[@]} ${PUBLIC_TCP[@]}
IptPorts -d "-A in_privat -p udp" "-j ACCEPT" ${PRIVAT_UDP[@]} ${PUBLIC_UDP[@]}
Ipt -N in_lan
IptPorts -d "-A in_lan -p tcp" "-j allowed" ${LAN_TCP[@]} ${PRIVAT_TCP[@]} ${PUBLIC_TCP[@]}
IptPorts -d "-A in_lan -p udp" "-j ACCEPT" ${LAN_UDP[@]} ${PRIVAT_UDP[@]} ${PUBLIC_UDP[@]}
# úÁËÒÙÔÙÊ ÐÏÒÔ
Ipt -N noport_log
Ipt -A noport_log \
-m limit --limit 5/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT bad IP:'
Ipt -N noport_drop
Ipt -A noport_drop \
-j noport_log
Ipt -A noport_drop \
-j DROP
Ipt -N noport_reject
Ipt -A noport_reject \
-j noport_log
Ipt -A noport_reject \
-j REJECT
# ãÅÐÏÞËÉ FORWARD
Ipt -N forvard_port
IptPorts -d "-A forvard_port -p tcp" "-j allowed" ${FORVARD_TCP[@]}
IptPorts -d "-A forvard_port udp" "-j ACCEPT" ${FORVARD_UDP[@]}
###
###
### ÃÅÐÏÞËÁ FORWARD
###
###
echo '+FORWARD+'
Ipt -A FORWARD -p TCP -j tcp_attack
Ipt -A FORWARD -j badip_in
Ipt -A FORWARD -p TCP -j bad_tcp_packets
# ðÒÏÐÕÓË ÏÔËÒÙÔÏÇÏ ÎÁÒÕÖÕ
IptMass "-A FORWARD -s" "-j forvard_port" ${LAN_IP[@]}
Ipt -A FORWARD -p ICMP -j icmp_allow
# ÐÒÏÐÕÓËÁÔØ ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎÎÙÅ ÓÏÅÄÉÎÅÎÉÑ
Ipt -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Ipt -A FORWARD \
-m limit --limit 10/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPF FORWARD packet died:'
IptMass "-A FORWARD -i" "-j virus_attack_reject" ${LAN_FIZ_INTS[@]}
IptMass "-A FORWARD -i" "-j virus_attack_drop" ${EXT_FIZ_INTS[@]}
# REJECT ÄÌÑ LAN
IptMass "-A FORWARD -s" "-j REJECT" ${LAN_IP[@]}
Ipt -A FORWARD -j DROP
echo '-FORWARD-'
###
###
### ãÅÐÏÞËÁ INPUT
###
###
echo '+INPUT+'
#Ipt -A INPUT -p TCP --destination-port ssh -j ACCEPT
Ipt -A INPUT -p TCP -j tcp_attack
Ipt -A INPUT -j badip_in
Ipt -A INPUT -p TCP -j bad_tcp_packets
# ïÔËÒÙÔÙÅ
IptPorts -d "-A INPUT -p tcp" "-j allowed" ${PUBLIC_TCP[@]}
IptPorts -d "-A INPUT -p udp" "-j ACCEPT" ${PUBLIC_UDP[@]}
# ðÒÉ×ÁÔÎÙÅ
IptMass "-A INPUT -s" "-j in_privat" ${PRIVAT_IP[@]}
# Lan
for INT in ${LAN_INTS[@]}
do
TablInt="inlan$INT"
echo TablInt="$TablInt"
eval FInts=\${INT_$INT[@]}
echo FInts="$FInts"
eval IP=\${IP_$INT}
echo IP="$IP"
eval BCs=\${IP_BC_DEST_$INT[@]}
if test "x$IP"="x"; then
eval Net=\${NET_$INT}
IP="$Net"
fi
Ipt -N "$TablInt"
IptMass "-A $TablInt -d" "-p tcp -j in_lan" $IP
IptMass "-A $TablInt -d" "-p udp -j in_lan" $IP ${BCs[@]}
IptMass "-A INPUT -i" "-j $TablInt" ${FInts[@]}
done
Ipt -A INPUT -p ICMP -j icmp_allow
# REJECT ÄÌÑ ×ÓÅÈ
IptPorts -d "-A INPUT -p tcp" "-j REJECT" ${REJECT_TCP[@]}
IptPorts -d "-A INPUT -p udp" "-j REJECT" ${REJECT_UDP[@]}
Ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Ipt -A INPUT \
-m limit --limit 10/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT INPUT packet died:'
IptMass "-A INPUT -i" "-j virus_attack_reject" ${LAN_FIZ_INTS[@]}
IptMass "-A INPUT -i" "-j virus_attack_drop" ${EXT_FIZ_INTS[@]}
# REJECT ÄÌÑ LAN
IptMass "-A INPUT -s" "-j REJECT" ${LAN_IP[@]} $IP_LO
Ipt -A INPUT -j DROP
echo '-INPUT-'
###
###
### ãÅÐÏÞËÁ OUTPUT
###
###
echo '+OUTPUT+'
#Ipt -A OUTPUT -p tcp --source-port ssh -j ACCEPT
Ipt -A OUTPUT -p TCP -j tcp_attack
Ipt -A OUTPUT -p TCP -j bad_tcp_packets
#Ipt -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Ipt -A OUTPUT -j ACCEPT
# ÖÕÒÎÁÌÉÒÏ×ÁÎÎÉÅ ÏÔÂÒÏÛÅÎÎÙÈ ÐÁËÅÔÏ×
Ipt -A OUTPUT \
-m limit --limit 10/minute --limit-burst 3 \
-j LOG --log-level DEBUG --log-prefix 'IPT OUTPUT packet died: '
Ipt -A OUTPUT -j REJECT
echo '-OUTPUT-'
###
###
### ôÁÂÌÉÃÁ NAT
###
###
### PREROUTING
### POSTROUTING
echo '+POSTROUTING+'
Ipt -t nat -A POSTROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
IptMass "-t nat -A POSTROUTING -o" "-j MASQUERADE" ${NAT_FIZ_INTS[@]}
#. /etc/firewall/snat
# snat
### END OF FILE
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 550 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: ?????????
2006-08-04 17:12 ` [sisyphus] etcnet poll: ????????? Sergey Vlasov
@ 2006-08-07 8:04 ` Sergey
0 siblings, 0 replies; 8+ messages in thread
From: Sergey @ 2006-08-07 8:04 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list
On Friday 04 August 2006 22:12, Sergey Vlasov wrote:
> сломалось. Я имел в виду другую ситуацию - когда пользовательская
> переменная вдруг в новой версии etcnet начинает использоваться внутри
> самого etcnet; вот этого быть не должно.
Документировать необходимость использование префикса, к примеру, USER_.
--
С уважением, Сергей
a_s_y@sama.ru
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах
2006-08-04 15:20 [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Andrew Kornilov
2006-08-04 16:01 ` Sergey Vlasov
2006-08-04 18:20 ` [sisyphus] etcnet poll: поддержка shell-переменных в конфигур� Aleksey Avdeev
@ 2006-08-07 8:04 ` Sergey
2006-08-07 21:15 ` Sviatoslav Sviridov
3 siblings, 0 replies; 8+ messages in thread
From: Sergey @ 2006-08-07 8:04 UTC (permalink / raw)
To: ALT Linux Sisyphus discussion list
On Friday 04 August 2006 20:20, Andrew Kornilov wrote:
> В более-менее сложных конфигурациях
Ага-ага, на хвост упаду: https://bugzilla.altlinux.org/show_bug.cgi?id=8476
Утомительно, когда куча ip на одном eth. Дёргать весь интерфейс не сильно
красиво.
--
С уважением, Сергей
a_s_y@sama.ru
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах
2006-08-04 15:20 [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Andrew Kornilov
` (2 preceding siblings ...)
2006-08-07 8:04 ` [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Sergey
@ 2006-08-07 21:15 ` Sviatoslav Sviridov
3 siblings, 0 replies; 8+ messages in thread
From: Sviatoslav Sviridov @ 2006-08-07 21:15 UTC (permalink / raw)
To: sisyphus
Andrew Kornilov пишет:
> Это повтор, предыдущее письмо было от hiddenman@altlinux.ru, вроде не
> прошло. Если что, sorry.
> =======================
> Привет всем.
>
> Проводится соцопрос на тему: "Нужна ли поддержка shell-переменных в
> конфигурационных файлах etcnet".
> То бишь, чтобы была возможность писать строки вида:
> ipv4rule:
> add from $FRIEND_NET1 table friend_net1
> ipv4route:
> default via $ISP1_GW table friend_net1
> и т.д. и т.п.
> А в файлах options уже задавать переменные как обычно:
> FRIEND_NET1=1.2.3.0/24
> ISP1_GW=4.5.6.7
>
>
> Я пытаюсь убедить Дениса, что это очень полезно и никаких проблем не
> принесет (в firewall-коде я сразу такое сделал), он пока мне не очень
> верит. В более-менее сложных конфигурациях (один из примеров которых я
> на днях добавил в svn), когда много каналов, шлюзов, меняются IP и т.д.,
> весьма напряжно и неудобно каждый раз менять эти значения в десятке
> разных файлов.
> Поэтому и проводится это голосование, просьба ответить на hiddenman@ и
> pilot@, можно просто "нужно", "не нужно", можно (и лучше :) с
> аргументацией и приведением примеров из собственной практики.
Пожалуй, я скажу тут +1... хотя сам сейчас активно etcnet не испльользую
... имею ввиду - нового ничего конфигурить не приходится, а все старое и
так работает... ну если не считать относительно недавних проблем hotplug
vs etcnet ;)
А в принципе, я сам тоже когда-то такое себе делал, и тоже в куске,
связянном с роутами :) Правда, требования у меня исходили чуть из другой
оперы, но все там же рядом. Ну и в качестве основного использования на
тот момент я предполагал автоматически устанавливать некоторые
переменные окружения в зависимости от имеющейся информации об
инетерфейсе, но возможность подхватывать остальные переменные окружения
вытекала автоматически из архитектуры etcnet.
http://lists.altlinux.org/pipermail/devel/2006-April/031083.html
--
Best regards,
Sviatoslav Sviridov
--
"I just want to be a good engineer."
-- Steve Wozniak, co-founder of Apple Computer, concluding his keynote
speech
at the 1988 AppleFest
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-08-07 21:15 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-08-04 15:20 [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Andrew Kornilov
2006-08-04 16:01 ` Sergey Vlasov
2006-08-04 16:28 ` [sisyphus] etcnet poll: ��� Andrew Kornilov
2006-08-04 17:12 ` [sisyphus] etcnet poll: ????????? Sergey Vlasov
2006-08-07 8:04 ` Sergey
2006-08-04 18:20 ` [sisyphus] etcnet poll: поддержка shell-переменных в конфигур� Aleksey Avdeev
2006-08-07 8:04 ` [sisyphus] etcnet poll: поддержка shell-переменных в конфигурационных файлах Sergey
2006-08-07 21:15 ` Sviatoslav Sviridov
ALT Linux Sisyphus discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
public-inbox-index sisyphus
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.sisyphus
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git