Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Первые шаги: iptables в Opensuse

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> OpenSUSE
 
Автор Сообщение
Mooonlight

Новенький


Зарегистрирован: 11.08.2011
Сообщения: 39

СообщениеДобавлено: Пн Янв 30, 2012 8:42 am    Заголовок сообщения: Первые шаги: iptables в Opensuse
Ответить с цитатой

Приветствую вас, форумчане!
Приглашаю специалистов помочь с настройкой фаервола в Opensuse. В частности, речь пойдет о iptables.

После понимания основ iptables из книг товарища Дена и товарища Фленова по настройке фаервола в Linux, было решено углубить свои познания в этом вопросе, путем изучения доп. литературы.

На данный момент, дзен уже виден: понимание правил и их написание (в рамках программы "первые шаги"), присутствует.
Теперь, вопрос: как правильно организовать загрузку своего файла с правилами в Opensuse?

Известно, что:
- имеется настройка фаервола в Yast (но там можно настроить минимум; для домашнего компа хватит);
- в Suse есть т.н. надстройка (SuSEfirewall2) с комментариями над iptables -> /etc/sysconfig/SuSEfirewall2 и что лучше пользоваться именно ей;
- что не даст сделать надстройка, можно выполнить в /etc/sysconfig/scripts/SuSEfirewall2-custom

В дополнение, на днях лицезрел полноценный скрипт, который, со слов использующего его коллеги, "позволяет iptables загрузить именно свой файл с правилами, не используя SuSEfirewall2". При этом, Suse-firewall, ессно, выключен.

Итого: хочется детального понимания вопроса и освещения практического опыта форумчан, все-таки, как правильно использовать iptables в Opensuse и как загружать свой набор правил? Или действительно проще использовать SuSEfirewall2?


Последний раз редактировалось: Mooonlight (Ср Фев 01, 2012 10:06 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Пн Янв 30, 2012 7:18 pm    Заголовок сообщения:
Ответить с цитатой

Я не сусевод, но попробую внести свои 5 копеек. SuSEfirewall2 реализует классическую модель зонового фаерволла, которая есть и Shorewall Мандривы, и в IOS Cisco. То есть пользователь понятным синтаксисом аля Си шарп описывает не трафик между интерфейсами, а трафик между Зонами(Большой и ужасный Интернет, доверенные локалки, сам фаер - это все зоны из интерфейсов). Все это уже самой программой переводится в синтаксис Iptables аля ассемблер. Технически это реализуется через дополнительные пользовательские цепочки iptables, моделирующие трафик через зоны.
Не надо бояться экспериментировать. Демон фаервола живет в /etc/init.d/firewall

итак:
mkdir ~/firetest
cd firetest
sudo /etc/init.d/firewall stop
sudo iptables-save | tee ./nofirewall ## смотрим до посинения, что в цепочках без фаервола less ./nofirewall
sudo /etc/init.d/firewall start
sudo iptables-save | tee ./firewallon ## смотрим что в цепочках c фаерволом
sdiff ./nofirewall ./firewallon | tee offon ## смотрим наглядно большую разницу с фаером и без
заполняем своими правилами /etc/sysconfig/scripts/SuSEfirewall2-custom
sudo /etc/init.d/firewall restart ## перегружаем фаер
sudo iptables-save | tee ./firewallcustom ## смотрим уже с пользователькими цепочками
sdiff ./firewallon ./firewallсustom | tee oncustom ## смотрим наглядно большую разницу с просто
## фаером и с фаером плюс пользовательские цепочки

Надеюсь, данная лабораторная работа ответит на все вопросы.
Что касается скриптов -то модны они были лет 10 назад.
Вот отличный пример
http://www.linuxkungfu.org/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mooonlight

Новенький


Зарегистрирован: 11.08.2011
Сообщения: 39

СообщениеДобавлено: Ср Фев 01, 2012 10:52 am    Заголовок сообщения:
Ответить с цитатой

Дочитал до момента "заполняем своими правилами /etc/sysconfig/scripts/SuSEfirewall2-custom"...

Ваша мысль понятна, однако, согласитесь, что в идеале, прежде чем заполнять правилами этот самый /etc/sysconfig/scripts/SuSEfirewall2-custom, надо все же понимать, как работает сам скрипт SuSEfirewall2. Т.е. опять-таки, необходимо учить мат.часть (в дополнение к iptables). С другой стороны, даже если для заполнения SuSEfirewall2-custom не требуется глубоких познаний, все-равно хотелось бы понимать процесс в целом и уметь настраивать систему "с 0". Рекурсия...

Я понимаю, что в целом, это может быть и проще, производить настройку через данный скрипт, но, повторюсь, - лично мне бы хотелось производить настройку фаервола "с 0", путем написания своих собственных правил в нужной мне последовательности. После чего, эти правила могут загружаться фаерволом.

Вот, кстати, подтверждение того, что это возможно: http://unixforum.org/index.php?s=20739edded756fccafc1a5db934b054e&showtopic=61411&view=findpost&p=599564. Очевидно, вариант с отдельным скриптом, подгружающим правила iptables, имеет все права на жизнь.

Я также понимаю, что каждый выберет себе вариант по душе и спорить о достоинствах и недостатках можно долго. В этой связи, думаю, было бы весьма интересно услышать мнение специалистов по SuSe, которые популярно объяснят аудитории, какой способ предпочтительнее/правильнее/надежнее. А может быть даже поделятся чудо-скриптом? Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Ср Фев 01, 2012 2:21 pm    Заголовок сообщения:
Ответить с цитатой

Вот тебе еще одно полотенце подобного скрипта
http://www.linuxhelp.net/guides/iptables/
Кладешь этот текст, подправленный под себя, в файл /usr/local/bin/myfarewall.sh
chmod 700 /usr/local/bin/myfarewall.sh
И в /etc/rc.d/rc.local пишешь
/usr/local/bin/myfarewall.sh

Все, при каждой загрузке ядра твои правила буду грузиться

Но при этом время между поднятием сетевых интерфейсов и запуском правил netfilter может составлять несколько десятков секунд. За это время машина с белым айпи будет беззащитной. Поэтому /usr/local/bin/myfarewall.sh
можно добавить в самый конец секции start) файла /etc/init.d/network. Недостаток такого решения - помнить, что после обновления системы строка /usr/local/bin/myfarewall.sh пропадет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mooonlight

Новенький


Зарегистрирован: 11.08.2011
Сообщения: 39

СообщениеДобавлено: Чт Фев 16, 2012 3:18 pm    Заголовок сообщения:
Ответить с цитатой

Не могу заставить работать свой "тестовый" скрипт с правилами.

Известно, что: which iptables = /usr/sbin/iptables

Вот есть скрипт iptabtest с правами 755 с простейшими правилами (лежит, например, в /etc):
Код:
#!/bin/sh
IPT="/usr/sbin/iptables"
#
echo "The following rules will clear out any existing firewall rules, and any chains that might have been created"
$IPT -F
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -X
#
echo "These will setup our policies"
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
#
echo "Allow lo interface"
$IPT -A INPUT -i lo -j ACCEPT


Результат его запуска под рутом командой ./iptabtest:
Код:
bash: ./iptabrules2: /bin/sh^M: bad interpreter: No such file or directory


Если первую строчку изменить так:
##!/bin/sh

Результат такой:
Код:
The following rules will clear out any existing firewall rules, and any chains that might have been created
: No such file or directory/sbin/iptables
: No such file or directory/sbin/iptables
: No such file or directory/sbin/iptables
: No such file or directory/sbin/iptables
: No such file or directory/sbin/iptables
These will setup our policies
: No such file or directoryr/sbin/iptables
: No such file or directoryr/sbin/iptables
: No such file or directoryr/sbin/iptables
Allow lo interface
: No such file or directoryr/sbin/iptables


Т.е. работает, по-сути, только "echo".
Все тоже самое, забиваемое руками из терминала - работает без вопросов.

Что не так?


Последний раз редактировалось: Mooonlight (Пт Фев 17, 2012 1:35 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Чт Фев 16, 2012 3:56 pm    Заголовок сообщения:
Ответить с цитатой

#!/bin/sh
#! /bin/sh - вот так надо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Пт Фев 17, 2012 1:36 am    Заголовок сообщения:
Ответить с цитатой

Mooonlight, этот кусок
Код:
bash: ./iptabrules2: /bin/sh^M: bad interpreter: No such file or directory

Означает, что в конце строки был найден символ ^M (ASCII-код которого 10 - он же LF, он же "\n"). По сути, так и должно быть - это нормальный перевод строки. Думаю, следует попробовать вместо
Код:
#!/bin/sh

поставить
Код:
#!/bin/bash


Если не поможет - выложи сюда вывод команд
Код:
ls -l /bin/*sh
sh --version
bash --version
hexdump <твой_скрипт>

_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
Mooonlight

Новенький


Зарегистрирован: 11.08.2011
Сообщения: 39

СообщениеДобавлено: Пт Фев 17, 2012 7:33 am    Заголовок сообщения:
Ответить с цитатой

Варианты с #!/usr/bin/sh и #!/bin/bash выдают следующие результаты, вне зависимости от того, есть ли пробел сразу после "#!" или его нет:

-bash: ./iptabrules2.sh: /usr/bin/sh^M: bad interpreter: No such file or directory
-bash: ./iptabrules2.sh: /bin/bash^M: bad interpreter: No such file or directory


Результаты команд
Код:
ls -l /bin/*sh
sh --version
bash --version
hexdump <твой_скрипт>


Код:
ls -l /bin/*sh
-rwxr-xr-x 1 root root 603224 Feb 27  2011 /bin/bash
lrwxrwxrwx 1 root root      4 Mar  2  2011 /bin/sh -> bash

sh --version
GNU bash, version 4.1.10(1)-release (i586-suse-linux-gnu)

bash --version
GNU bash, version 4.1.10(1)-release (i586-suse-linux-gnu)

hexdump iptabrules2.sh
0000000 2123 2f20 6962 2f6e 6162 6873 0a0d 5049
0000010 3d54 2f22 7375 2f72 6273 6e69 692f 7470
0000020 6261 656c 2273 0a0d 0d23 650a 6863 206f
0000030 5422 6568 6620 6c6f 6f6c 6977 676e 7220
0000040 6c75 7365 7720 6c69 206c 6c63 6165 2072
0000050 756f 2074 6e61 2079 7865 7369 6974 676e
0000060 6620 7269 7765 6c61 206c 7572 656c 2c73
0000070 6120 646e 6120 796e 6320 6168 6e69 2073
0000080 6874 7461 6d20 6769 7468 6820 7661 2065
0000090 6562 6e65 6320 6572 7461 6465 0d22 240a
00000a0 5049 2054 462d 0a0d 4924 5450 2d20 2046
00000b0 4e49 5550 0d54 240a 5049 2054 462d 4f20
00000c0 5455 5550 0d54 240a 5049 2054 462d 4620
00000d0 524f 4157 4452 0a0d 4924 5450 2d20 0d58
00000e0 230a 0a0d 6365 6f68 2220 6854 7365 2065
00000f0 6977 6c6c 7320 7465 7075 6f20 7275 7020
0000100 6c6f 6369 6569 2273 0a0d 4924 5450 2d20
0000110 2050 4e49 5550 2054 5244 504f 0a0d 4924
0000120 5450 2d20 2050 554f 5054 5455 4120 4343
0000130 5045 0d54 240a 5049 2054 502d 4620 524f
0000140 4157 4452 4120 4343 5045 0d54 230a 0a0d
0000150 6365 6f68 2220 6c41 6f6c 2077 6f6c 6920
0000160 746e 7265 6166 6563 0d22 240a 5049 2054
0000170 412d 4920 504e 5455 2d20 2069 6f6c 2d20
0000180 206a 4341 4543 5450 0a0d
000018a
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Пт Фев 17, 2012 9:38 am    Заголовок сообщения:
Ответить с цитатой

Mooonlight, всё понятно, я немного ошибся. У тебя строка
Код:
!#/bin/bash

заканчиваеться символами "13" и "10" (это виндовский формат). Линукс воспринимает только символ "10" (\n), а "13" (\r) читает как комманду - вот и бага. Это странно, т.к. баш вроде должен сам автоматически правильно конвертировать мак-формат (\n\r) и виндовский (\r\n) в линуксовский (\n).

Фикс:
Код:
cat <файл_скрипта> | sed 's/\r//g' | tee <файл_скрипта>

замени <файл_скрипта> на имя скрипта и оно его пофиксит.
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
Mooonlight

Новенький


Зарегистрирован: 11.08.2011
Сообщения: 39

СообщениеДобавлено: Пт Фев 17, 2012 1:30 pm    Заголовок сообщения:
Ответить с цитатой

Anderson, спасибо за подсказку! Правда, почему-то предложенная тобой команда затерла весь мой скрипт Cool Но это мелочи. Зато теперь понятна суть проблемы.

Действительно, оказывается в тех скриптах, которые создаются и редактируются в windows и затем переносятся для работы в linux - появляются дополнительные символы в конце строки: ^M.

Причем их не видно, если открывать файл скрипта в редакторах vi или nano или по F3 в Midnight Commander, зато их становится отлично видно в Midnight Commander по F4 (режим редактирования). После удаления этих символов - все работает. Также эту проблему может решить редактор в программе WinSCP, а еще работает (в OpenSuse точно) такой способ в редакторе vi:

Код:
:set fileformat=unix [ENTER]
:wq! [ENTER]


И вот тут тоже можно посмотреть варианты решения: http://www.linuxquestions.org/questions/slackware-14/bin-bash%5Em-bad-interpreter-no-such-file-or-directory-461400/

p.s. Я, конечно, понимаю, что если бы все было заранее известно, то жизнь была бы скучна и однообразна. Но, такие вещи надо освещать в мануалах и статьях отдельным пунктом, как минимум с метками "для новичков, начинающим, внимание!" Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Пт Фев 17, 2012 10:06 pm    Заголовок сообщения:
Ответить с цитатой

В принципе, в ворпаде не должно такого происходить в винде и в vim под винду
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mooonlight

Новенький


Зарегистрирован: 11.08.2011
Сообщения: 39

СообщениеДобавлено: Чт Мар 01, 2012 8:45 am    Заголовок сообщения:
Ответить с цитатой

Konstantin, чуть ранее ты писал:
Цитата:
"Но при этом время между поднятием сетевых интерфейсов и запуском правил netfilter может составлять несколько десятков секунд. За это время машина с белым айпи будет беззащитной. Поэтому /usr/local/bin/myfarewall.sh
можно добавить в самый конец секции start) файла /etc/init.d/network. Недостаток такого решения - помнить, что после обновления системы строка /usr/local/bin/myfarewall.sh пропадет.
".


Действительно, так и есть; у меня, например, линукс стоит на виртуальной машине, и проходит порядка 10 "прыжков", прежде чем правила из скрипта применяются. А как решить эту проблему "по-человечески"?

И подскажи, пожалуйста, чем лучше пользоваться, чтобы, например, запретить/разрешить доступ на определенные сайты? (из консоли и по удаленке, через ssh).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Вс Мар 04, 2012 6:17 pm    Заголовок сообщения:
Ответить с цитатой

Mooonlight писал(а):
чем лучше пользоваться, чтобы, например, запретить/разрешить доступ на определенные сайты? (из консоли и по удаленке, через ssh).


iptables -A OUTPUT -d x.x.x.x -j DROP

Я выше привел решение - правила netfilter загружаются скриптом демона NETWORKING.
Человеческое решение - это отдельный демон для запуска правил netfilter после networking. Cкачай из федоры rpm http://fedora.c3sl.ufpr.br/linux/releases/16/Fedora/i386/os/Packages/iptables-1.4.12-2.fc16.i686.rpm и поизучай его содержимое.
Гугл выдает сотни портянок скриптов iptables только на русском - почитай их внимательно хотя бы пяток. За 12 лет у всех новичков одинаковые грабли при изучении netfilter.
Чистый iptables нужен для экзотических задач. Как-то мне надо было отсылать пакеты сразу через 4 3g модема, то есть делать routing per packets. Вот тут действительно ассемблер iptables пригодился. Для стандартных задач достаточно более высокоуровневых скриптов shorewall, vuurmur, ipkungfu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> OpenSUSE Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис