LINUX.ORG.RU

не стартует iptables в Gentoo

 ,


0

1

Столкнулся с тем, что свежеустановленный iptables с дефолтным конфигом (без правил) отказывается стартовать:

/etc/init.d/iptables: line 108: unexpected EOF while looking for matching `«' /etc/init.d/iptables: line 117: syntax error: unexpected end of file * iptables: error loading /etc/init.d/iptables * ERROR: iptables failed to start

#!/sbin/runscript
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-firewall/iptables/files/iptables-1.4.13-r1.init,v 1.1 2012/09/14 17:58:26 axs Exp $

extra_commands="save panic"
extra_started_commands="reload"

iptables_name=${SVCNAME}
if [ "${iptables_name}" != "iptables" -a "${iptables_name}" != "ip6tables" ] ; then
	iptables_name="iptables"
fi

iptables_bin="/sbin/${iptables_name}"
case ${iptables_name} in
	iptables)  iptables_proc="/proc/net/ip_tables_names"
	           iptables_save="/sbin/iptables-save
	ip6tables) iptables_proc="/proc/net/ip6_tables_names"
	           iptables_save=${IP6TABLES_SAVE};;
esac

depend() {
	before net
}

set_table_policy() {
	local chains table=$1 policy=$2
	case ${table} in
		nat)    chains="PREROUTING POSTROUTING OUTPUT";;
		mangle) chains="PREROUTING INPUT FORWARD OUTPUT POSTROUTING";;
		filter) chains="INPUT FORWARD OUTPUT";;
		*)      chains="";;
	esac
	local chain
	for chain in ${chains} ; do
		${iptables_bin} -t ${table} -P ${chain} ${policy}
	done
}

checkkernel() {
	if [ ! -e ${iptables_proc} ] ; then
		eerror "Your kernel lacks ${iptables_name} support, please load"
		eerror "appropriate modules and try again."
		return 1
	fi
	return 0
}
checkconfig() {
	if [ ! -f ${iptables_save} ] ; then
		eerror "Not starting ${iptables_name}.  First create some rules then run:"
		eerror "/etc/init.d/${iptables_name} save"
		return 1
	fi
	return 0
}

start() {
	checkconfig || return 1
	ebegin "Loading ${iptables_name} state and starting firewall"
	${iptables_bin}-restore ${SAVE_RESTORE_OPTIONS} < "${iptables_save}"
	eend $?
}

stop() {
	if [ "${SAVE_ON_STOP}" = "yes" ] ; then
		save || return 1
	fi
	checkkernel || return 1
	ebegin "Stopping firewall"
	local a
	for a in $(cat ${iptables_proc}) ; do
		set_table_policy $a ACCEPT

		${iptables_bin} -F -t $a
		${iptables_bin} -X -t $a
	done
	eend $?
}

reload() {
	checkkernel || return 1
	ebegin "Flushing firewall"
	local a
	for a in $(cat ${iptables_proc}) ; do
		${iptables_bin} -F -t $a
		${iptables_bin} -X -t $a
	done
	eend $?

	start
}

save() {
	ebegin "Saving ${iptables_name} state"
	checkpath -q -d "$(dirname "${iptables_save}")"
	checkpath -q -m 0600 -f "${iptables_save}"
	${iptables_bin}-save ${SAVE_RESTORE_OPTIONS} > "${iptables_save}"
	eend $?
}

panic() {
	checkkernel || return 1
	if service_started ${iptables_name}; then
		rc-service ${iptables_name} stop
	fi

	local a
	ebegin "Dropping all packets"
	for a in $(cat ${iptables_proc}) ; do
		${iptables_bin} -F -t $a
		${iptables_bin} -X -t $a

		set_table_policy $a DROP
	done
	eend $?
}


Последнее исправление: cetjs2 (всего исправлений: 1)

Отредактируй файл, сделай пустую строку в конце (нажми Enter после закрывающей фигурной скобки ).

Kroz ★★★★★
()
Ответ на: комментарий от Kindly_Cat

закрывающая } это 116 строка. Что править то?

from_by
() автор топика
Ответ на: комментарий от Kindly_Cat

Это и странно, скрипт полностью дефолтный, сразу после установки iptables. Я даже пробовал поставить предыдущую версию пакета - результат тот же.

from_by
() автор топика

Попробуйте этот стартовый сценарий: /usr/portage/net-firewall/iptables/files/iptables-1.4.11.init

По сравнению с iptables-1.4.13-r1.init отличий минимум.

Возможно, где-то выставлен конец строки Windows, хотя это странно.

kostik87 ★★★★★
()
Ответ на: комментарий от Black_Shadow

это init net-firewall/iptables-1.4.16.3 , который я поставил проверить не вызвана ли проблема текущей версией. На net-firewall/iptables-1.4.17 ошибка та же

from_by
() автор топика

В общем удалил вручную /etc/init.d/iptables и поставил 1.4.17. Теперь
/etc/init.d/iptables: line 60: : No such file or directory

line 60 это: ${iptables_bin}-restore ${SAVE_RESTORE_OPTIONS} < «${iptables_save}»

from_by
() автор топика
Ответ на: комментарий от from_by

Это квест на внимательность?

iptables_save=«/sbin/iptables-save

Закрой кавычку :)

Kroz ★★★★★
()
Ответ на: комментарий от from_by

Перед первым запуском iptables нужно добавить правила в ручную:

iptables трам-парам
Затем сохранить их:
/etc/init.d/ipables save
А затем можно уже
rc-update add iptables default
/etc/init.d/ipables start

А в той версии файла вам в 17 строке нужно было дописать в конец:

";;

Или выполнить emerge --sync и переустановить пакет:

emerge --sync
emerge iptables
etc-update

kostik87 ★★★★★
()
Ответ на: комментарий от Black_Shadow

это я делаю ес-но, но правил никаких не добавлял, решил сначала протестить работоспособность. Попробую добавить правил, потом save, а потом стартануть

from_by
() автор топика
Ответ на: комментарий от from_by

/etc/init.d/ipables save чем-нибудь отличается от iptables-save?

/etc/init.d/ipables - стартовый сценарий, запускающий iptables. Запущенный с параметром save вызывает определённые действия, которые можно посмотреть в коде стартового сценария:

save() {
	ebegin "Saving ${iptables_name} state"
	checkpath -q -d "$(dirname "${iptables_save}")"
	checkpath -q -m 0600 -f "${iptables_save}"
	${iptables_bin}-save ${SAVE_RESTORE_OPTIONS} > "${iptables_save}"
	eend $?
}
Значения переменных, а именно iptables_save можно посмотреть в файле /etc/conf.d/iptables
...
IPTABLES_SAVE="/var/lib/iptables/rules-save"
...
SAVE_RESTORE_OPTIONS="-c"
...
Что же делает этот код ??? Проверяет существует ли директория /var/lib/iptables/ и создаёт её, если нет, выставляет права на файл с сохранёнными аправилами, вызывает команду сохранения правил в указанный файл с парметрами:
iptables-save -c > /var/lib/iptables/rules-save

В случае возникновения вопросов читаем документацию, разбираем сценарии, «гуглим», иначе вам в Gentoo будет сложно.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

За развёрнутый ответ на вопрос спасибо, за отсылки на гугл и доки неспасибо - я негодую :) Итак создаю тему только тогда, когда нет других идей. Что насчёт Gentoo - я не думаю, что тому кто годами юзал арч будет здесь сложно, хотя система в целом более проблемная из-за некоторых особенностей.

В общем я просто закомментировал эту строку. На первый взгляд всё запускается и работает как должно. Тему пока закрывать не буду ибо решение какое-то неэлегантное...

from_by
() автор топика
Ответ на: комментарий от from_by

Какую строку закоментировали ? Эту ?

${iptables_bin}-restore ${SAVE_RESTORE_OPTIONS} < «${iptables_save}»
Смысл тогда в вашем запуске iptables ?

Вся суть запуска стартового сценария /etc/init.d/iptables, т.е. его вызов с параметром start и заключается в загрузке сохранённых правил из файла /var/lib/iptables/rules-save, если вы её закоментировали, то таблицы, по которым пакетный фильтр обрабатывает пакеты пустые.

Что насчёт Gentoo - я не думаю, что тому кто годами юзал арч будет здесь сложно, хотя система в целом более проблемная из-за некоторых особенностей.

Нет, видимо тем кто использовал долго Arch Linux - Gentoo будет сложна, здесь же нужно что-то читать, затем понимать что прочитал и понимать что нужно сделать и зачем.

Не обижайтесь, но по вашим сообщениям можно прийти только к таким выводам.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Вся суть запуска стартового сценария /etc/init.d/iptables, т.е. его вызов с параметром start и заключается в загрузке сохранённых правил из файла /var/lib/iptables/rules-save, если вы её закоментировали, то таблицы, по которым пакетный фильтр обрабатывает пакеты пустые.



Так это происходит если всё по дефолту работает. С учётом того, что при выполнении /etc/init.d/iptables save я получаю
/etc/init.d/iptables: line 97: : No such file or directory
решил просто вставить правила в сам инит-файл в /etc/init.d/iptables. Это должно работать нормально, хотя с iptables только начал разбираться.

Нет, видимо тем кто использовал долго Arch Linux - Gentoo будет сложна


Чую тут сразу и ревущее ЧСВ gentoo-фанатика, который Arch вряд ли когда-то использовал, иначе не писал бы глупостей.
На этом предлагаю дискуссию закончить и перейти к конекретному вопросу: «Почему iptables не запускается так как должен из коробки и что поправить чтобы всё было как должно». Моё решение проблемы меня тоже не особо устраивает.

from_by
() автор топика
Ответ на: комментарий от from_by

Чую тут сразу и ревущее ЧСВ gentoo-фанатика

Да ты не обижайся. Просто поломать то, что работало изкоробки - это надо быть одарённым арчеводом.

Kindly_Cat
()
Ответ на: комментарий от Kindly_Cat

Так весь же вопрос в том, что из коробки не работало. Это и заставило совершать разные телодвижения, в том числе тему создавать

from_by
() автор топика
Ответ на: комментарий от from_by

Так весь же вопрос в том, что из коробки не работало

4.2

Когда ты уже влез своими дрожащими руками в скрипт - это уже не «изкоробки».

Kindly_Cat
()
Ответ на: комментарий от from_by

/etc/init.d/iptables: line 97: : No such file or directory

Ну и где вы про эту ошибку написали, я исхожу из того, что вижу в сообщения.

«Почему iptables не запускается так как должен из коробки и что поправить чтобы всё было как должно». Моё решение проблемы меня тоже не особо устраивает.

Даже не знаю, у меня всё работает, вы etc-update запускали ?

kostik87 ★★★★★
()
Ответ на: комментарий от Kindly_Cat

Ты лазишь в инит-скрипты, которые и так запускаются? :) Не было бы этой темы. Это после того как iptables не стартовал после установки, я начал старую версию пробовать, редактировать и тд

from_by
() автор топика
Ответ на: комментарий от from_by

почему?

 diff -ubw init /mnt/portage/net-firewall/iptables/files/iptables-1.4.13.init 
--- init	2013-01-11 16:21:49.000000000 +0400
+++ /mnt/portage/net-firewall/iptables/files/iptables-1.4.13.init	2012-05-22 01:24:16.000000000 +0400
@@ -1,7 +1,7 @@
 #!/sbin/runscript
 # Copyright 1999-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/net-firewall/iptables/files/iptables-1.4.13-r1.init,v 1.1 2012/09/14 17:58:26 axs Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-firewall/iptables/files/iptables-1.4.13.init,v 1.1 2012/05/21 21:24:16 williamh Exp $
 
 extra_commands="save panic"
 extra_started_commands="reload"
@@ -14,7 +14,7 @@
 iptables_bin="/sbin/${iptables_name}"
 case ${iptables_name} in
     iptables)  iptables_proc="/proc/net/ip_tables_names"
-               iptables_save="/sbin/iptables-save
+	           iptables_save=${IPTABLES_SAVE};;
     ip6tables) iptables_proc="/proc/net/ip6_tables_names"
                iptables_save=${IP6TABLES_SAVE};;
 esac
@@ -92,8 +92,8 @@
 
 save() {
     ebegin "Saving ${iptables_name} state"
-    checkpath -q -d "$(dirname "${iptables_save}")"
-    checkpath -q -m 0600 -f "${iptables_save}"
+	touch "${iptables_save}"
+	chmod 0600 "${iptables_save}"
     ${iptables_bin}-save ${SAVE_RESTORE_OPTIONS} > "${iptables_save}"
     eend $?
 }
@@ -114,4 +114,3 @@
     done
     eend $?
 }
-
qnikst@localhost ~/tmp $ diff -ubw init /mnt/portage/net-firewall/iptables/files/iptables-1.4.13-r1.init 
--- init	2013-01-11 16:21:49.000000000 +0400
+++ /mnt/portage/net-firewall/iptables/files/iptables-1.4.13-r1.init	2012-09-14 21:58:26.000000000 +0400
@@ -14,7 +14,7 @@
 iptables_bin="/sbin/${iptables_name}"
 case ${iptables_name} in
     iptables)  iptables_proc="/proc/net/ip_tables_names"
-               iptables_save="/sbin/iptables-save
+	           iptables_save=${IPTABLES_SAVE};;
     ip6tables) iptables_proc="/proc/net/ip6_tables_names"
                iptables_save=${IP6TABLES_SAVE};;
 esac
@@ -114,4 +114,3 @@
     done
     eend $?
 }
-

где init это твой скрипт?

отсюда очевидный вывод - у тебя не дефолтный инит скрипт.

qnikst ★★★★★
()
Ответ на: комментарий от from_by

Это после того как iptables не стартовал после установки, я начал старую версию пробовать, редактировать и тд

Посмотрите даты создания файлов init сценария и последнеё модификации http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-firewall/iptables... Кроме того вам указали какую правку внести в стартовый сценарий, кроме того, если вы всё же просмотрели указанные файлы и удостоверились, что в официальном срезе дерева портов нет этой ошибки и сами файлы не обновлялись от нескольких месяцев и более, то встанет вопрос: откуда вы взяли срез в «битым» файлом или как вам удалось его «испортить.»

kostik87 ★★★★★
()
Ответ на: комментарий от from_by

а что если я скажу, что ты врёшь?

вот это cvs log iptables-1.4.13-r1, с которым почти совпадает твой файл и тут не было убивания и замены, только одна ревизия:

RCS file: /var/cvsroot/gentoo-x86/net-firewall/iptables/files/iptables-1.4.13-r1.init,v
Working file: files/iptables-1.4.13-r1.init
head: 1.1
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 1;	selected revisions: 1
description:
----------------------------
revision 1.1
date: 2012-09-14 21:58:26 +0400;  author: axs;  state: Exp;  commitid: 241b505370404567;
fixed init script to ensure rules save path will always exist on save

(Portage version: 2.1.11.9/cvs/Linux x86_64)
============================================================================

аналогично и с -r0.

qnikst ★★★★★
()
Ответ на: комментарий от from_by

Посмотрите ссылку в моём сообщении не стартует iptables в Gentoo (комментарий) она указывает на соответствующий раздел официального текущего среза дерева портов, просмотрите содержимое файлов, оканчивающихся на ".init" в них нет ошибки в 17 строке, кроме того обратите внимание на время последнего редактирования этих файлов.

Отсюда вопрос: «откуда вы взяли не правильный файл ?»

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Сейчас снова поставил старую версию, да, ввёл в заблуждение- с точки зрения синтаксиса инит там действительно не бит. Не знакю как такое получилось. Правда это не отменяет факта получения ошибки /etc/init.d/iptables: line 60: : No such file or directory при старте
и /etc/init.d/iptables: line 97: : No such file or directory при /etc/init.d/iptables save в текущей версии

from_by
() автор топика
Ответ на: комментарий от from_by

У вас есть директория /var/lib/iptables?

Какую версию вы ставите ?

kostik87 ★★★★★
()

В общем проблему решило:

rm -rf /etc/conf.d/iptables
rm -rf /var/lib/iptables
rm /etc/init.d/iptables
и установка 1.4.17

Не совсем понимаю что именно там мешало нормальной работе, но проблема решена. Спасибо всем участвующим :)

from_by
() автор топика
Ответ на: комментарий от from_by

если ошибка когда либо была в дереве (что маловероятно) - то невыполненый etc-update. Как вариант - неправильно выполненый etc-update в ручном режиме. Ну и вариант открыть и случайно покоцать файл, но тогда вы должны об этом помнить.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

Тут недавно обновлял ядро на 3.7.* и тоже наткнулся на затык с iptables но со стороны NAT'a оказалось в ядре запилили новые модули ната, добавил и все заработало. Попробуй ядро поковырять

gremlin_tomsk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.