ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [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