Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: скрипт в iptables  (Прочитано 1676 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MonoLife

  • Автор темы
  • Активист
  • *
  • Сообщений: 356
  • "Пилите, Шура, пилите!" ©
    • Просмотр профиля
    • Under sky of Half-Life
скрипт в iptables
« : 02 Ноября 2011, 09:22:33 »
Пытаюсь добавить в iptables блокировку некоторых сайтов по их URL
Список находится в файле /etc/myscript/badurl:
odnoklassniki.ru
vkontakte.ru
и т.п...

в скрипте nat, кроме прочего:
...
BAD_URL=`bin/grep -v "#" /etc/myscript/badurl`
for i in $BAD_URL; do
iptables -I INPUT 1 -m string --string "$i" --algo kmp --to 65535 -j DROP;
done
...
ошибка:
/etc/nat: 15: odnoklassniki.ru: not found
В чем я ошибся?

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #1 : 02 Ноября 2011, 09:59:56 »
в том, что iptables не умеют с именами работать

Оффлайн MonoLife

  • Автор темы
  • Активист
  • *
  • Сообщений: 356
  • "Пилите, Шура, пилите!" ©
    • Просмотр профиля
    • Under sky of Half-Life
Re: скрипт в iptables
« Ответ #2 : 02 Ноября 2011, 10:05:52 »
Спасибо.
казалось бы, в команду передается строка, просто подстановка значения.. а вот оно как..:(
Придется из основного скрипта запускать, наверное, скрипт со всеми строками блокирующими сайты командами iptables.

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #3 : 02 Ноября 2011, 12:46:04 »
BAD_URL=`bin/grep -v "#" /etc/myscript/badurl`
for i in $BAD_URL; do
  dig +short ${i} | while read f; do
    echo "iptables -I INPUT 1 -d ${f} --algo kmp --to 65535 -j DROP"
  done
done

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #4 : 02 Ноября 2011, 18:56:35 »
А как оно вообще работает без /
BAD_URL=`/bin/grep -v "#" /etc/myscript/badurl`

Оффлайн MonoLife

  • Автор темы
  • Активист
  • *
  • Сообщений: 356
  • "Пилите, Шура, пилите!" ©
    • Просмотр профиля
    • Under sky of Half-Life
Re: скрипт в iptables
« Ответ #5 : 03 Ноября 2011, 04:59:19 »
Спасибо всем ответившим!
Я криворукий кривошей!! :D
Глянув свой код, я убедился, что перед bin стоит слэш, иначе ошибка выглядела бы так: bin/grep: not found Сюда я, видимо вручную код постил, поэтому слэш мог пропустить и пробел лишний убрать.. Из-за чего ввел Вас в заблуждение.:(
Всё оказалось банальнее, лишний пробел после оператора "=": BAD_URL=_`/bin/grep -v "#" /etc/myscript/badurl`
Все-таки, синтаксис и правила написания скриптов мне еще незнакомы и я не знал, что нельзя ставить знаки табуляции и пробелы в строке кода.
После правки этой строки BAD_URL=`grep -v "#" /etc/myscript/badurl` без пробелов заработал код с подстановкой строки iptables -I INPUT 1 -m string --string "$i" --algo kmp --to 65535 -j DROP;
censor, отдельное спасибо, буду разбираться с вашим кодом. Сейчас ipatbles ругается на неверный аргумент --algo.
« Последнее редактирование: 03 Ноября 2011, 05:02:00 от MonoLife »

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #6 : 03 Ноября 2011, 07:00:02 »
вместо конструкции `` лучше пользоваться $(), но если нужна совместимость со старыми версиями (что маловероятно) то луче применять ``

Оффлайн MonoLife

  • Автор темы
  • Активист
  • *
  • Сообщений: 356
  • "Пилите, Шура, пилите!" ©
    • Просмотр профиля
    • Under sky of Half-Life
Re: скрипт в iptables
« Ответ #7 : 03 Ноября 2011, 08:19:24 »
Цитировать
вместо конструкции `` лучше пользоваться $(),
в каком месте использовать? Как у вас: ${f}?
Сорри, дело в том, что я написал всего пару скриптов, причем, по готовым примерам, и совсем не силен в этом деле.
А материал-справочник пока не нашел (не уверен точно как искать, по какому ключевому слову).. Если не жаль, поделитесь ссылками на справочник-учебник

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #8 : 03 Ноября 2011, 13:36:27 »
BAD_URL=$(grep -v "#" /etc/myscript/badurl)
Wars ~.o

Оффлайн MonoLife

  • Автор темы
  • Активист
  • *
  • Сообщений: 356
  • "Пилите, Шура, пилите!" ©
    • Просмотр профиля
    • Under sky of Half-Life
Re: скрипт в iptables
« Ответ #9 : 03 Ноября 2011, 15:34:03 »
Понятно. Спасибо!

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #10 : 03 Ноября 2011, 17:36:49 »
Цитировать
BAD_URL=$(grep -v "^#\|^$" /etc/myscript/badurl)
Чтобы не было неожиданностей, так будет правильней.

Оффлайн MonoLife

  • Автор темы
  • Активист
  • *
  • Сообщений: 356
  • "Пилите, Шура, пилите!" ©
    • Просмотр профиля
    • Under sky of Half-Life
Re: скрипт в iptables
« Ответ #11 : 03 Ноября 2011, 17:51:10 »
Цитировать
Чтобы не было неожиданностей
да, это правильней, конечно, мало ли что попадет в мой файл badurl:)

Здесь в первом посте не все ссылки рабочие, а по первой - мало инфы.. Есть подробнее где?
« Последнее редактирование: 03 Ноября 2011, 17:55:18 от MonoLife »

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #12 : 03 Ноября 2011, 18:54:57 »
Чтобы не было неожиданностей
Еще бы двойные кавычки на одинарные поменять, а то насколько помнится двойные кавычки задают жесткое соответствие, т.е. спецсимволы могут не читаться за оные.

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #13 : 03 Ноября 2011, 19:20:07 »
Чтобы не было неожиданностей
Еще бы двойные кавычки на одинарные поменять, а то насколько помнится двойные кавычки задают жесткое соответствие, т.е. спецсимволы могут не читаться за оные.
все с точностью до наоборот, одинарные строгие, двойные не строгие.
по написанию скриптов гугли "abs guide"

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Re: скрипт в iptables
« Ответ #14 : 03 Ноября 2011, 20:15:35 »
все с точностью до наоборот, одинарные строгие, двойные не строгие.
Да вот как раз и не наоборот ;) двойные строгие - в них интерпретируются только \ ` и $ все остальное идет именно как строковое значение.

 

Страница сгенерирована за 0.055 секунд. Запросов: 25.