Системное администрирование

индекс
200,05

Web-интерфейс для Iptables

# iptables -t nat -N test
# iptables -t nat -A test -p tcp -j REDIRECT --to-port 80
# iptables -t nat -A test -p tcp -j MASQUERADE
# iptables -t nat -A POSTROUTING -j test
iptables: Invalid argument. Run `dmesg' for more information.
# dmesg | tail -n 1
ip_tables: REDIRECT target: used from hooks POSTROUTING, but only usable from PREROUTING/OUTPUT
# iptables -t nat -A PREROUTING -j test
iptables: Invalid argument. Run `dmesg' for more information.
# dmesg | tail -n 1
ip_tables: MASQUERADE target: used from hooks PREROUTING, but only usable from POSTROUTING


Это пост о программе Iptables и о веб-интерфейсе для неё.

Тем, кто не знаком с такой замечательной программой как Iptables, адресованы две последниие секции поста.

Фабула


http://iptadmin.confmgr.org/

Iptadmin — попытка упростить работу с файрволлом в Linux. На данный момент это простой веб-интерфейс, который умеет работать лишь с несколькими опциями iptables. BSD3.

Преимущества, которые даёт Iptadmin:
  • Отображение списка правил красиво в браузере с нумерацией внутри каждой цепочки. А кое-где даже с подсветкой цветом. Вместо необходимости постоянно набирать iptables -L -vn –line-numbers для контроля правил.
  • Возможность создавать и редактировать правила с помощью курсора мыши и чекбоксов.
  • Где это возможно, предлагаются только правильные варианты входных данных. Ситуация, описанная в начале поста, предупреждена.
  • Автоматическое добавление опций-модулей.
  • Защита от создания правила, которое запрещает доступ к интерфейсу управления по сети.
  • Установка Iptadmin ничего не изменяет и не портит в правилах Iptables. Iptadmin не хранит в системе никакие промежуточные данные. В любой момент можно воспользоваться привычным консольным интерфейсом или вообще удалить Iptadmin.

Минусы программы относительно Iptables:
  • Ещё один постоянно работающий прожорливый демон. Требует для работы порядка нескольких мегабайт памяти. Можно запускать только на время настройки. Но запускать, а потом останавливать демон это лишние телодвижения.
  • Процесс с правами рута слушает по сети. Процесс отлаженный, протестированный, статически типизированный, на высокоуровневом языке без указателей, со сборкой мусора. Но он работает под рутом и слушает сетевой порт.
  • Пока поддерживается только несколько самых часто используемых опций Iptables. Любые нетривиальные правила всё равно придётся задавать из консоли.

Есть ли аналоги?


Похожие программы есть. Но подробного сравнительного анализа не проводилось. Вот несколько ссылок и небольшие комментарии:
  • Модуль для Webmin. Работает на уровне Iptables. Поддерживает все или почти все опции правил. Ломает конфигурационные файлы. Написан на perl. http://doxfer.webmin.com/Webmin/LinuxFirewall.
  • System-config-firewall от Red Hat. Один из лучших GUI для Iptables. Позволяет открывать/закрывать порты, настраивать трансляцию. Но всё скрыто от пользователя. На одну галочку добавляется несколько правил (например, при добавлении интерфейса в список «доверенных»). Нетривиальные правила программа не отображает никак. http://fedoraproject.org/wiki/SystemConfig/firewall
  • Uncomplicated firewall + GUI для Ubuntu. Также высокоуровневый интерфейс, но он проработан хуже чем в System-config-firewall. Перед началом работы предупреждение «все сделанные вручную изменения будут потеряны». http://gufw.tuxfamily.org/.
  • Shorewall. Абстракции над iptables. Конфигурируется всё через текстовые файлы. Написано на perl. http://www.shorewall.net/
  • Firewall Builder — IDE для разработки правил файрволла с трансляцией во множество форматов, в том числе iptables, ipfw, железные файрволлы. Наверное, отличный интструмент для огромных инфраструктур с десятками сетевых экранов. http://www.fwbuilder.org/

Послесловие для тех, кому посчастливилось не знать, что такое iptables


Одним из компонентов ядра операционной системы Linux является сетевой экран. Он позволяет выполнять множество видов фильтрации трафика. Кроме этого в ядре имеется возможность трансляции сетевых адресов. Например, на базе Linux строятся сетевые шлюзы для подключения локальных сетей к интернету.

Пользовательским интерфейсом к сетевому экрану Linux является программа Iptables. Это программа командной строки, она взаимодействует с пользователем посредством текстового терминала. При создании правил необходимо помнить наизусть параметры правил, либо постоянно держать открытой страницу руководства. Также iptables не отличается подробными сообщениями об ошибках входных данных. Некоторые ошибки выводятся только средствами журналирования ядра.

Как это часто бывает с подсистемами Linux, для настройки Iptables практически нужен отдельный специалист (Другие примеры сложных в настройке компонентов: PAM, Selinux, Policy kit).

Типичный workflow при работе с Iptables


Например, мы хотим сделать DNAT с 192.168.1.1:80 на 192.168.0.3:8000 при обращении из подсети 10.0.0.0/16:
# iptables -A POSTROUTING -s 10.0.0.0/16 -d 192.168.1.1 --dport 80 -j DNAT --to-destination 192.168.0.3:8000
iptables v1.4.7: unknown option `--dport'
Try `iptables -h' or 'iptables --help' for more information.

Итак, iptables ничего не знает об опции --dport, для её использования нужно указать опцию -p tcp.
И как мы могли забыть?
# iptables -A POSTROUTING -s 10.0.0.0/16 -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:8000
iptables: No chain/target/match by that name.

Iptables ничего не знает о цепочке POSTROUTING. Как так? Перечитываем имя по буквам, вроде без ошибок.
А! Нужно же указать таблицу «nat». По умолчанию iptables использует таблицу «filter».
# iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:8000
iptables: Invalid argument. Run `dmesg' for more information

Теперь нам нужно почитать dmesg чтобы узнать, что не так на этот раз.
# dmesg | tail
[   44.855055] Bluetooth: BNEP filters: protocol multicast
[   44.891259] Bluetooth: SCO (Voice Link) ver 0.6
[   44.891262] Bluetooth: SCO socket layer initialized
[   45.021718] Bluetooth: RFCOMM TTY layer initialized
[   45.021726] Bluetooth: RFCOMM socket layer initialized
[   45.021728] Bluetooth: RFCOMM ver 1.11
[   93.795558] fuse init (API version 7.14)
[   93.823129] SELinux: initialized (dev fusectl, type fusectl), uses genfs_contexts
[   93.862287] SELinux: initialized (dev fuse, type fuse), uses genfs_contexts
[ 1912.405272] x_tables: ip_tables: DNAT target: used from hooks POSTROUTING, but only usable from PREROUTING/OUTPUT

Ещё одна ошибка. DNAT работает в цепочке PREROUTING, а не POSTROUTING. Наконец, выполняем команду:
# iptables -t nat -A PREROUTING -s 10.0.0.0/16 -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:8000
#

Ура! Мы сделали это. Правило DNAT добавлено.
+31
6 июля 2011, 09:54
91

комментарии (46)

+5
4dmonster #
Вы Правида Дорожного Движения изучать будете так же как и iptables — методом тыка?
+12
4dmonster #
А что минусуете? Вот как это бы выглядело:

Автопилот для езды.

Автопилот отлично работает, пользоваться им очень удобно, указал место назначения и можно откинуться в кресле и заниматься своими делами…

Тем кто не пытался сам управлять автомобилем опишу как это происходит. Надо его завести!!! А как? Говорят ключ повернуть… Я вертел его и так и эдак. А оказалось его надо в руль вставить. Но это ещё не всё, завёлся — надо тронуться. Я чуть умом не тронулся пока случайно рычаг к буковке D не подвинул. А дальше вообще АД. Оказывается светофоры указывают что мне далеть — ехать или останавливаться. А для поворота надо включать поворотники. Когда в меня чуть не врезались — мне это объяснили на странном языке…
+8
mesline #
Супер мануал для блондинок! :)
0
AusTiN #
>Я чуть умом не тронулся пока случайно рычаг к буковке D не подвинул.
Забыли тормоз нажать — на АТ коробках без этого обычно никак ))
–1
4dmonster #
Точно, причём автомобиль мне об этом ничего не скажет!!! Придётся в инструкцию лезть.
0
AusTiN #
Скажет, громким-громким противным хрустом (если забудете тормоз нажать) :)
0
4dmonster #
Чесно говоря не помню что слышал хруст, просто рычаг не двигался и всё. Может от модели зависит.
+1
AusTiN #
Я имею ввиду, если нажать с силой и сломать блокиратор :) А на некоторых машинах (не помню какие именно, но такие точно есть) настолько глупая коробка что позволяет переключение передач без нажатия тормоза, что само по себе может привести к поломке по незнанию (например, во время движения включить передачу R)
0
yanis76 #
Ээээ, тут зависит от машины, коробки, ну и везения, конечно :)
Товарищ однажды ехал на старой квадратной Делике-автомате, хотел включить нейтралку, чтобы насладиться тишиной. Но нечаянно включил не нейтралку, а заднюю. Насладился визгом резины и экстренным торможением, пока успел сообразить, что же на самом деле происходит. Машинка спокойно перенесла это недоразумение, и ездит дальше по сей день.
0
gnomeby #
Ну так там экзаменатор есть, а тут починил в одном месте — поломал в другом, узнал об этом на следующий день.
–9
4dmonster #
Что-то типа:
«У ПРИЯТЕЛЯ ДАМОЧКА ПЕРЕГРЕЛА МОТОР БЭХИ, РАСКАЗЫВАЕТ: ЕХАЛА Я ЕХАЛА, ЗАЧЕПИЛАСЬ ЗА ЛЮК, ЗАГОРЕЛСЯ ЧАЙНИЧЕК НА ПАНЕЛЬКЕ, Я НА ЗАПРАВКУ, ПОЛНЫЙ БАК НАЛИЛА, А ЧАЙНИЧЕК ВСЁ ГОРИТ. ВИДАТЬ СЛОМАЛОСЬ ЧЁТА. А ПОТОМ СТОП МАШИНА И ДЫМ ПОШЁЛ.»
–8
4dmonster #
Ситуация типа такой?
«У ПРИЯТЕЛЯ ДАМОЧКА ПЕРЕГРЕЛА МОТОР БЭХИ, РАСКАЗЫВАЕТ: ЕХАЛА Я ЕХАЛА, ЗАЧЕПИЛАСЬ ЗА ЛЮК, ЗАГОРЕЛСЯ ЧАЙНИЧЕК НА ПАНЕЛЬКЕ, Я НА ЗАПРАВКУ, ПОЛНЫЙ БАК НАЛИЛА, А ЧАЙНИЧЕК ВСЁ ГОРИТ. ВИДАТЬ СЛОМАЛОСЬ ЧЁТА. А ПОТОМ СТОП МАШИНА И ДЫМ ПОШЁЛ.»
0
mesline #
1. А как насчет логирования пакетов? Или совместное использование с ubuntu FireWall ( ufw ).
2. IptAdmin работает от рутового пользователя? — вопрос о безопасности.
3. Обычно часто нужно использовать iptables на шлюзах (роутерах или серверах), но для этих целей существуют специальные дистрибутивы с настройкой файервола и проброса портов и всего остального добра, а для обычной серверной машины с каким то набором функционала надо, как правило, один раз настроить и больше туда не лазить и быстрее всего это сделать ручками, нежели устанавливать дополнительное ПО.
0
tranquil #
1. Отображать counters конечно надо бы, сделаем. Логирование через -j LOG посложнее.
2. Об этом написано в посте, будем думать.
3. На специальные дистрибутивы сложно устанавливать дополнительное ПО. Например, торрент-клиент. Бывают ещё десктопы с внешним адресом, там тоже нужно настраивать файрволл.
0
tranquil #
Про GUFW тоже было упомянуто.
0
0Lexx0 #
Вы сами себе противоречите — предлагаете использовать «специальные дистрибутивы» а потом «быстрее всего это сделать ручками, нежели устанавливать дополнительное ПО»
0
mesline #
Читайте внимательней это про разные задачи сервера!
+4
CheatEx #
Нажал минус исключительно за бессодержательную картинку в полэкрана.
0
tranquil #
Кто-то отрезал атрибуты height и weight. Спасибо за коммент.
0
tranquil #
*width
+4
Lampus #
За что было так издеваться над изображением Тукса?
–3
tranquil #
Вообще то это он издевается над нами.
0
wtsd #
А зачем висеть сервису с правами рута? Может следует сделать кроновский скрипт, который будет каждую минуту запускаться и проверять, нет ли для него инструкций по работе с iptables. Если таковые имеются, то инструкции парсятся и дают некоторый результат, который записывается далее в конфигурационный файл.

Сам бы веб-интерфейс крутился под пользователем «www» каким-нибудь. Или я туплю?
0
tranquil #
Всё правильно. Как-то так и будет.

Сейчас этому мешает механизм защиты от запрещения доступа к интерфейсу.

После каких-либо правок (запрос POST на сервер) сразу же производятся манипуляции с файрволлом. После этого клиенту отдаётся код 303 с редиректом на страницу отображения правила. Если в течении 10 секунд клиент не зашёл туда, то считаем добавленное правило запрещающим работу с интерфейсом, откатываем изменение.
+3
nagimov #
Насторожила строка «Это пост о программе Iptables и о веб-интерфейсе для неё». Решил дочитать.
Похожие программы есть. Но подробного сравнительного анализа не проводилось.
Интересно, а о чем тогда статья? Краткое описание iptadmin'а? Ну а «Послесловие для тех, кому посчастливилось не знать, что такое iptables» и вовсе непонятно что такое и кому адресовано.
Что хотел описать автор? Введение в iptables — отсутствует, хоть какое-то мало-мальски понятное описание работы с iptadmin тоже.
Простите, но не понял назначения вашей статьи.
–1
tranquil #
Краткое описание iptadmin'а.

Да.

Вся остальная информация есть по ссылкам.
0
tranquil #
Вся остальная информация есть по ссылкам.

Вопросы и критика то приветствуются, с удовольствием подскажу если что-то непонятно.
0
tranquil #
«Послесловие для тех, кому посчастливилось не знать, что такое iptables» — задумывалось всё таки как введение в iptables, ключевые слова.
0
nagimov #
Мне кажется, что введение в iptables должно выглядеть как-то так: http://easylinux.ru/node/190
У вас же больше похоже на изучение методом тыка, как правильно заметил товарищ 4dmonster
0
tranquil #
1. Отличное введение, наверное, эта ссылка может помочь в освоении iptables.
2. Это не изучение, это выполнение повседневных административных задач в пятницу вечером.

Я совершенно не отрицаю что при должной тренировке даже сложные правила пишутся с первого раза. Но часто бывает опечатка в одной-двух опциях или пропуск опции. Суть в том, что интерфейс к netfilter оставляет желать лучшего.
+1
lavi #
А чем не устраивают приведенные более функциональные аналоги? Да и ИМХО лучше один раз разобраться с IPTables, чтобы научиться раз и навсегда писать правила вручную. Это будет лучше велосипеда.
0
larcend #
Не хочу оправдывать веб морду к iptables, но cинтаксис iptables довольно быстро забывается. Тот же ipfw в этом плане куда более удобный.
+1
lavi #
А у вас нету «стандартного шаблона» который вы носите с места на место, и дополняете специфическими правилами? ;)
+2
LaFut #
Рекоомендую www.vuurmuur.org/trac/
0
tranquil #
Спасибо
0
polyakstar #
Надо было оставить название статьи, трольфэйсного тукса, остальное все убрать и поместить в юмор.
+2
0Lexx0 #
Еще одна поделка ленивых быдлоадминов для неопытных ленивых быдлоадминов.
0
UksusoFF #
Было бы еще хорошо, например, демо на сайте поставить, и чтобы можно было загрузить свой иптэйблс и поковырять его.
0
tranquil #
Интересная идея.

Планируется сделать специальный билд с бэкэндом в текстовом файле (запись конфигурации файрволла только в текстовый файл). Чтобы можно было не трогая систему посмотреть на программу. Такой билд можно было бы запускать на других ОС, но особой пользы от него не будет.
+3
hardex #
–2
asukafag #
У меня на модеме такой. Чем хвастаетесь?
0
tranquil #
Очень красиво!

Подскажите, где почитать о том, как настроить ваш плагин «Firewall»? Установил на ubuntu 10.10 из репозитория, показывает пустые таблицы filter, mangle, nat.
0
hardex #
Нажмите кнопку «Load current», чтобы загрузить в плагин текущую конфигурацию iptables.
0
tranquil #
Пробовал, ничего не происходит.
0
tranquil #
Спасибо за помощь в настройке, плагин работает.

В дизайне с вами и впрямь тягаться сложно.

Но, ваш плагин:
— При попытке создания пользовательской цепочки INPUT удаляет все правила из цепочки INPUT.
— При попытке создания пользовательской цепочки LOG пользовательская цепочка LOG создаётся (!) и начинает конфликтовать с таргетом LOG.
— При попытке задания Source MAC address в цепочке «OUTPUT» возникает ошибка «iptables-restore: line 8 failed»
— При попытке создания в цепочке «PREROUTING» правила «MASQUERADE»: «iptables-restore: line 22 failed»
— При попытке задания Source port для протокола ICMP: iptables-restore v1.4.4: multiport only works with TCP, UDP, UDPLITE, SCTP and DCCP Error occured at line: 8 Try 'iptables-restore -h" or 'iptables-restore --help' for more information.
— При попытке создания правила -I INPUT -p tcp --dport 8000 -j DROP интерфейс безвозвратно пропадает вместе с доступом к настраиваемой системе.

Обработкой всех этих и многих других ситуаций и занимается Iptadmin. Несмотря на отсутствие дизайна и клиентского исполняемого кода.

Но у вас действительно плагин намного более удобен чем в webmin.
+3
m1rl0b #
Имхо все равно, знание консоли не заменят картинки. Все таки как не крути, но *nix системы максимально гибко можно сконфигурировать лишь в старом добром терминале

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.