Показаны сообщения с ярлыком unix. Показать все сообщения
Показаны сообщения с ярлыком unix. Показать все сообщения

вторник, 13 июня 2017 г.

UNIX: find and grep best practice

How to run  last executed find command in Unix – Example 1 

javin@testenv1 ~/java : !find
find . -name "*.java"     --last find command executed
./OnlineStockTrading.java
./StockTrading.java


How to find files which have been modified less than one day, minute or hour  in Unix:

javin@testenv1 ~/java : find . -mtime (find all the files modified exact 1 day)

javin@testenv1 ~/java : find . -mtime -1 (find all the files modified less than 1 day)
.
./StockTrading.java

javin@testenv1 ~/java : find . -mtime +1 (find all the files modified more than 1 day)
./.vimrc
./OnlineStockTrading.java
./StockTrading.java~

воскресенье, 20 марта 2016 г.

AQA: tools: bash: Переносим функциональность bash в cmd.exe

Переносим функциональность bash в cmd.exe

Мне, как и многим из вас, работать с bash и стандартными утилитами Linux гораздо удобнее и приятнее, чем с cmd.exe. Однако, к сожалению, порой обстоятельства складываются так, что операционную систему выбирать не приходится. Например, в моём случае корпоративным стандартом является Windows 7. К счастью есть способ сделать жизнь линуксоида в командной строке Windows комфортнее, о нём и пойдет речь ниже.


Прежде всего, при переходе из bash в cmd.exe доставляет неудобства ограниченность самой командной оболочки. Чтоб вставить текст из буфера обмена нужно тянуться к мышке, не хватает возможностей автодополнения, история хранится только в пределах одной сессии, к тому же не работает Ctrl+R и другие возможности работы с историей команд в bash.

Исправить ситуацию нам поможет clink. Это Open Source утилита расширяющая возможности cmd.exe. Вот некоторые ее фичи:

  • Автодополнение по нажатию Tab. Возможности автодополнения могут быть расширены за счет пользовательских скриптов на Lua
  • Вставка текста из буфера по нажатию Ctrl-V (к сожалению Shift+Insert не работает)
  • Продвинутая работа с историей команд. Поиск по истории (Ctrl-R and Ctrl-S). Поддержка таких выражений как !!, !<string> и !$
  • Сохранение предыдущих сессий


Авторы говорят, что clink протестирован только на Windows XP SP3, но я пользуюсь им уже год на Windows 7 и всё работает нормально.

Скачали. Установили. Стало лучше, теперь cmd себя ведет почти как bash. Но кое-чего по прежнему не хватает. А именно привычных unix-утилит. Таких как cat, ls, tail, diff, grep, less, sort, wget и т.д. Некоторые утилиты имеют свои Windows-аналоги, например, вместо grep можно использовать findstr, но к ним придется привыкать заново, другие же аналогов вообще не имеют.

Эту проблему нам поможет решить готовый набор программ UnxUtils. Набор включает в себя множество популярных в Unix и Linux инструментов командной строки (полный список можно посмотреть по этой ссылке) а так же несколько дополнительных программ.

В частности, к дополнительным программам относятся pclip.exe и gclip.exe предназначенные для работы с буфером обмена Windows. Например вот так: pclip | sed "s/string1/string2/g" | gclip можно заменить все вхождения string1 на string2 в тексте хранящемся в буфере обмена.

Для того чтоб получить всё это на свою Windows-машину нужно скачать архив UnxUtils.zip, распаковать его содержимое в какой-то каталог и добавить в переменную среды PATH путь к usr\local\wbin\, т.к. именно там хранятся исполняемые файлы.

Для самых ленивых есть способ еще проще: скопируйте содержимое каталога usr\local\wbin\ из архива в каталог %WINDIR%\system32\ на вашей машине.
Внимание! Если вы решили поступить именно так, то я не рекомендую заменять системные файлы на одноименные файлы из архива без четкого понимания того, что вы делаете.

Всё! Осталось только запустить cmd и эффективно работать используя свой linux-опыт. Конечно есть и другие способы добиться того же самого результата, я описал тот, который нахожу максимально простым и удовлетворяющим все мои потребности.
 Альтернативный терминал для Windows
Обновление с Bash интерпретатором 
 см. практические подходы

Bash скрипт перезагрузки оборудования через telnet 
Bash-скрипт для проверки, запущены ли apache, nginx, mysql и ssh на сервере 
SSH — передача файлов и выполнение команд

   Копирование файлов через SSH
   SSH аутентификация по открытому ключу
   Подключения по SSH без ввода пароля
   Запуск команд на удаленном Linux-сервере через SSH
   Отключение проверки ключа хоста в SSH

пятница, 11 июля 2014 г.

Unix. Поиск, операции с файлами и фильтрация

Практика:

Поиск по шаблону внутри файла:
grep java.lang.ExceptionInInitializer pasm.log

Поиск файла по системе(внимание, имеет значение от имени какого пользователя делаешь поиск. Иногда нужны root привилегии):
find / -name "tlis.sh" 


Теория: 

Операции с файлами и фильтрация

Основная часть работы в командной строке ведётся с файлами. В этом разделе мы рассмотрим, как просматривать и фильтровать содержимое файлов, извлекать из файлов нужную информацию при помощи одной команды и сортировать их содержимое.

cat, tail, head, tee: Команды для вывода содержимого файлов

Эти команды имеют почти один и тот же синтаксис: имя_команды [опции] [файл(ы)], и могут быть использованы в каналах. Все они используются для вывода части файла согласно определенным критериям.
Утилита cat объединяет файлы и выводит результат на стандартный вывод. Это одна из наиболее широко используемых команд. Вы можете использовать:
# cat /var/log/mail/info
для вывода, например, содержимого файла с журналом почтового демона на стандартный вывод [14]. Команда cat имеет очень полезную опцию (-n), которая позволяет вам выводить номера строк.
Некоторые файлы, типа журналов демонов (если они запущены) обычно имеют довольно большой размер [15] и полный их вывод на экран будет не очень полезным. Часто вам нужно увидеть только несколько строк из файла. Для этого вы можете воспользоваться командой tail. Следующая команда выведет (по умолчанию) последние 10 строк из файла /var/log/mail/info:
# tail /var/log/mail/info
Вы можете использовать опцию -n для вывода последних N строк файла. Например, для вывода последних 2-х строк наберите:
# tail -n2 /var/log/mail/info
Команда head похожа на tail, но она выводит первые строки файла. Следующая команда выведет (по умолчанию) первые 10 строк файла /var/log/mail/info:
# head /var/log/mail/info
Как и в случае с tail вы можете использовать опцию -n для указания количества выводимых строк. Например, для вывода первых 2-х строк наберите:
# head -n2 /var/log/mail/info
Также вы можете использовать эти две команды совместно. Например, если вы хотите увидеть только строки 9 и 10, вы можете воспользоваться командой, в которой head выберет первые 10 строк из файла и передаст их по каналу в команду tail.
# head /var/log/mail/info | tail -n2
Затем вторая часть команды отберет последние 2 строки и выведет их на экран. Таким же способом вы можете выбрать 20-ю от конца файла строку:
# tail -n20 /var/log/mail/info |head -n1
В этом примере мы говорим команде tail выбрать последние 20 строк файла и передать их по каналу в head. Затем команда head выводит на экран первую строку из полученных данных.
Допустим, что результат последнего примера нам нужно одновременно вывести на экран и сохранить его в файл results.txt. В этом нам может поможет утилита tee. Ее синтаксис:
tee [опции] [файл]
Теперь мы можем изменить предыдущую команду следующим образом:
# tail -n20 /var/log/mail/info |head -n1|tee results.txt
Давайте рассмотрим еще один пример. Нам нужно выбрать последние 20 строк, сохранить их в файл results.txt, а на экран вывести только первую из них. Тогда мы должны ввести следующее:
# tail -n20 /var/log/mail/info |tee results.txt |head -n1
У команды tee есть полезная опция (-a), которая позволяет вам дописать данные в конец существующего файла.
Давайте вернемся назад к команде tail. Такие файлы как журналы обычно динамически изменяются, т.к. демон постоянно добавляет в них отчет о совершенных действиях или событиях. Поэтому, если вам нужно наблюдать за изменениями в лог-файле в режиме реального времени, тогда вам нужно воспользоваться преимуществами опции -f:
# tail -f /var/log/mail/info
В этом случае все изменения в файле /var/log/mail/info будут немедленно выводиться на экран. Использование команды tail с опцией -f весьма полезно, когда вам нужно знать, как работает ваша система. Например, наблюдая за файлом журнала /var/log/messages, вы сможете всегда получать обновленную информацию о системных сообщенях и различных демонах.
В следующем разделе мы рассмотрим, как можно использовать утилиту grep в качестве фильтра для отделения сообщений Postfix от сообщений других служб.

grep: Поиск строк в файлах

Ни имя команды, ни ее аббревиатура (“General Regular Expression Parser” - синтаксический анализатор общих регулярных выражений) не слишком интуитивны, но ее действие и ее использование довольно просты для понимания: grep выполняет поиск в одном или нескольких файлах по шаблону, заданному в качестве аргумента. Ее синтаксис:
grep [опции] <шаблон> [один или более файлов]
Если указано несколько файлов, в отображаемом результате их имена будут выводиться перед каждой найденной строкой. Для предотвращения вывода этих имен используйте опцию -h; используйте опцию -l для вывода только имен файлов с найденными совпадениями. Шаблон - это регулярное выражение, хотя в большинстве случаев он состоит просто из одного слова. Наиболее часто используемые опции:
  • -i: поиск без учета регистра (т.е. игнорирование разницы между верхним и нижним регистром);
  • -v: обратный поиск. Вывод строк, которые не соответствуют шаблону;
  • -n: вывод номера строки для каждой из найденных строк;
  • -w: сообщает grep'у, что шаблон должен совпадать со всем словом.
Итак, давайте теперь вернемся к анализу лог-файла почтового демона. Нам необходимо найти все строки в файле /var/log/mail/info, содержащие шаблон “postfix”. Для этого мы вводим такую команду:
# grep postfix /var/log/mail/info
Команда grep может быть использована в канале. Так мы можем получить такой же результат, что и в предыдущем примере, при помощи следующего:
# cat /var/log/mail/info | grep postfix 
Если нам нужно найти все строки, не содержащие шаблона “postfix”, нам надо будет воспользоваться опцией -v:
# grep -v postfix /var/log/mail/info
Давайте предположим, что нам необходимо найти все сообщения об успешно отправленных письмах. В этом случае мы должны отфильтровать все строки, добавленные почтовым демоном в файл журнала (содержащие шаблон “postfix”), и они должны содержать сообщение об успешной отправке (“status=sent”):
# grep postfix /var/log/mail/info |grep status=sent
В этом случае команда grep использована дважды. Это разрешается, но не совсем красиво. Мы можем получить тот же результат при помощи утилиты fgrep. Сначала нам нужно создать файл, содержащий шаблоны, записанные в столбик. Такой файл может быть создан следующим образом (мы используем patterns.txt в качестве имени файла):
# echo -e 'status=sent\npostfix' >./patterns.txt
Затем мы вызываем следующую команду, в которой мы используем файл patterns.txt со списком шаблонов и утилиту fgrep вместо “двойного вызова” команды grep:
# fgrep -f ./patterns.txt /var/log/mail/info
Файл ./patterns.txt может содержать сколько угодно шаблонов. Каждый из них должен быть введен в виде одной строки. Например, для выборки сообщений о письмах, успешно отправленных на адрес peter@mandrakesoft.com, достаточно будет добавить адрес этого электронного ящика в наш файл ./patterns.txt, выполнив следующую команду:
# echo 'peter@mandrakesoft.com' >>./patterns.txt
Понятное дело, что вы можете комбиноровать команду grep с tail и head. Если нам нужно найти сообщения о предпоследнем электроном письме, отправленном на адрес peter@mandrakesoft.com, мы используем:
# fgrep -f ./patterns.txt /var/log/mail/info | tail -n2 | head -n1
Здесь мы применили описанный выше фильтр и отправили результат через канал в команды tail и head. Они выбрали из данных предпоследнее значение.

wc: Подсчёт элементов в файлах

Команда wc (Word Count - подсчёт слов) используется для подсчёта числа строк и слов в файлах. Она также полезна для подсчёта байтов, символов и длины самой длинной строки. Её синтаксис:
wc [опции] [файл(ы)]
Список полезных опций:
  • -l: вывод количества новых строк;
  • -w: вывод количества слов;
  • -m: вывод общего количества символов;
  • -c: вывод количества байт;
  • -L: вывод длины самой длинной строки в заданном тексте.
По умолчанию команда wc выводит количество новых строк, слов и символов. Вот несколько примеров использования:
Если нам нужно определить число пользователей в нашей системе, мы можем ввести:
$wc -l /etc/passwd 
Если нам нужно узнать число CPU в нашей системе, мы пишем:
$grep "model name" /proc/cpuinfo |wc -l
В предыдущем разделе мы получили список сообщений об успешно отправленных письмах на адреса, перечисленные в нашем файле./patterns.txt. Если нам нужно узнать количество таких сообщений, мы можем перенаправить наш отфильтрованный результат через канал в команду wc:
# fgrep -f ./patterns.txt /var/log/mail/info | wc -l

sort: Сортировка содержимого файла

Ниже представлен синтаксис этой можно утилиты для сортировки[16]:
sort [опции] [файл(ы)]
Давайте отсортируем часть файла /etc/passwd. Как видите сам по себе этот файл не отсортирован:
$ cat /etc/passwd
Если нам нужно отсортировать его по полю login, мы набираем:
$ sort /etc/passwd
По умолчанию команда sort сортирует информацию по первому полю в порядке возрастания (в нашем случае по полю login). Если нам нужно отсортировать данные в порядке убывания, мы используем опцию -r:
$ sort -r /etc/passwd
Для каждого пользователья имеется свой собственный UID, записанный в файле /etc/passwd. Давайте отсортируем этот файл в порядке возрастания по полю UID:
$ sort /etc/passwd -t":" -k3 -n
Здесь мы используем следующие опции sort:
  • -t":": сообщает sort'у, что разделителем полей является символ ":";
  • -k3: означает, что сортировка должна быть выполнена по по третьему столбцу;
  • -n: сообщает, что выполняется сортировка числовых данных, а не буквенных.
То же самое может быть выполнено в обратном порядке:
$ sort /etc/passwd -t":" -k3 -n -r
Обратите внимание, что sort обладает двумя важными опциями:
  • -u: строгая сортировка: исключаются повторяющиеся поля сортировки;
  • -f: игнорирование регистра (строчные символы обрабатываются так же, как и прописные).
И в заключение, если нам нужно найти пользователя с наивысшим UID, мы можем воспользоваться этой командой:
$ sort /etc/passwd -t":" -k3 -n |tail -n1
, где мы сортируем файл /etc/passwd в порядке возрастания по столбцу UID и прогоняем результат по каналу через команду tail, которая выводит первое значение из отсортированного списка.

среда, 9 июля 2014 г.

SQL. SELECT into file

SQL Developer: 

Method 1
Add the comment /*csv*/ to your SQL query and run the query as a script (using F5 or the 2nd execution button on the worksheet toolbar)
enter image description here
That's it.
Method 2
Run a query
alt text
Right click and select unload.

Запись результатов sql-запроса в файл bash:

 Как записать каждую запись результата sql-запроса в файл через пробел в bash'е? Как записать каждую запись результата sql-запроса в файл на отдельной строке в bash'е?

\\  psql dbname -c 'select * from test1' > file.txt

Файловый вывод/ввод

Большинство программ, работающих с БД, позволяют сохранять выборки в различных форматах, но не все позволяют сохранить в виде простого текстового файла. Например, была ситуация, когда в БД была необходимая информация о сотрудниках (более тысячи человек) для одной стандартной формы. А формат файла, описывающий эту форму, оказался текстовым. Поэтому проблема решилась выборкой в файл и вставкой его содержимого в файл формы. А соответствующий отдел был избавлен от лишней работы. Для конкретности примера, воспользуемся следующей таблицей с данными.

-- таблица цветов
create table colors(
id integer,
cname varchar(45), 
constraint pk_colors primary key (id)
);

insert into colors values(1,'красный');
insert into colors values(2,'синий');
insert into colors values(3,'зеленый');
insert into colors values(4,'белый');
insert into colors values(5,'черный');
commit;

Oracle

В Oracle вывод в файл реализуется с помощью команды SQL plus spool. Она служит как для начала вывода в файл, так и для остановки. По умолчанию расширение файла lst.

-- открываем вывод в файл
spool c:\\myfile; 

-- выборка
select t.id || ' ' || t.cname from colors t;

-- закрываем вывод в файл
spool off; 
Так как это не SQL команда, то ее нельзя использовать внутри PL/SQL блока, но можно поместить блок между этими командами. По этой же причине, чтобы выполнить этот пример в PL/SQL developer, нужно открыть Command window.
На некоторых операционных системах поддерживается дополнительный параметр out, позволяющий сразу распечатать выборку на принтере установленном по умолчанию.

-- открываем вывод в файл
spool c:\myfile; 

-- выборка
select t.id || ' ' || t.cname from colors t;

-- закрываем вывод файл и распечатываем
spool out; 

MySQL

В MySQL данная задача реализована аналогично сохранению выборки в списке переменных в команде select.

select *
into outfile 'c:/myfile.lst' -- указываем файл
fields terminated by ',' -- разделитель полей
enclosed by '"' -- заключить каждое поле между "
lines terminated by '\\n' -- разделитель строки
from colors;
Если какой-либо разделитель не нужен, то его определение можно опустить. В отличие от Oracle здесь нельзя вывести более одной выборки в один файл.
Команда LOAD DATA INFILE является обратной и позволяет загрузить данные из файла в таблицу.
Например пусть есть файл myfile.lst, со следующим содержимым в обычной для Windows русской кодировке.
"50", "светло-коричневый"
"51", "темно-коричневый"
Тогда загрузить данные можно следующей командой.

load data  infile 'c:/myfile.lst' 
  ignore -- пропускаем если данные уже в таблице
  into table colors
  character set cp1251 -- кодировка исходного файла
  fields
  terminated by ',' -- разделитель полей
  enclosed by '"' -- поле заключено между "
  lines terminated by '\\n'; -- разделитель строки
Если таблица colors использует другую кодировку, например utf-8, данные преобразуются корректно.

PostgreSQL

Команда copy в PostgreSQL позволяет, как сохранить выборку в файле, так загрузить данные из файла. Файловый источник должен существовать заранее, при записи автоматически он не создается. При повторном копировании содержимое файла перезаписывается. При чтении из файла в таблицу, кодировки строковых данных должны совпадать.

-- простой вывод данных в файл
copy (select * from colors) to 'c:/myfile.lst'; 

-- предположим, база настроена на кодировку utf-8,
-- тогда и строки сохранятся в файл в utf-8
copy 
  (
  select '"50", "светло-коричневый"'
    union
  select '"51", "темно-коричневый"'
  ) to 'c:/myfile.lst';

-- а теперь загрузим данные в таблицу
copy colors (id, cname) from 'c:/myfile.lst'
  with delimiter ',' -- разделитель полей
  null 'null' -- чем заменять пустые значения
  cvs -- CSV настройки
  quote '"' -- поле заключено между "
  escape '\\\\' ; -- ESC символ, для пропуска "

четверг, 26 июня 2014 г.

Маршрутизация в linux. Forward, default, stateful firewall

 Теория:  
  Форвардинг пакетов.
     NAT-правила не обеспечивают форвардинг трафика между интерфейсами, они непосредственно имеют дело с перезаписыванием адресов отправителя/получателя и портов. Для продвижения трафика используется цепочка FORWARD таблицы filter:
# iptables -A FORWARD -i <входящий интерфейс> -о <исходящий интерфейс> -j ACCEPT
     Форвардинг - это прямое перенаправление пакетов с одно­го интерфейса на другой. Поскольку по умолчанию используется таблица filter, ее не нужно указывать с помощью опции -t.
     На практике используется форвардинг не всех пакетов, а только определенных, к примеру пакетов с определенным номером порта (в частности, 80 и 443 для Web-сервера):
# iptables -A FORWARD -i <входящий интерфейс> -о <DMZ-интерфейс> -d <IP Web-сервера> --dport 80,443 -j ACCEPT
     C помощью опции -р можно указать протокол, например -р tcp.
     Политики по умолчанию.
     Для каждой таблицы нужно определить политику по умолчанию, то есть действие, которое будет выполнено над пакетом, если он не совпал ни с од­ним правилом.      Здесь возможны два варианта:
  • По умолчанию можно принимать все пакеты, а позже создать пра­вила, блокирующие нежелательные пакеты.
  • По умолчанию отбрасывать все пакеты и создать правила, разреша­ющие определенные пакеты.
     В первом случае работы будет меньше, но с точки зрения безопасности такой способ никуда не годится.      Второй метод является наиболее безопасным, следовательно, нужно использовать его, несмотря на сложность во­площения данного метода.      Stateful firewall.
     Термин "stateful firewall" в применении к IPTables применяется довольно часто. Что это означает и что он дает? Обычно фильтрацию рассматривают на базе пакетов: идет сравнение ад­ресов отправителя/получателя и портов, и, в зависимости от результата сравнения, выполняются определенные действия.
     Модуль состояний (state) дает дополнительные возможности по фильтрации пакетов. Кроме адресов отправителя/получателя и портов, можно отслеживать контекст пакета: можно определить, какой это пакет, новый или ответ на уже посланный. Модуль состояний смотрит каждое соедине­ние и определяет его состояние. Соединение бывает в одном из четырех состояний:
  • NEW (новое) - попытка нового соединения. До этого не было пакетов, относящихся к этому соединению.
  • ESTABLISHED (установленное) - соединение установлено, отмечается поток пакетов в обоих направлениях.
  • RELATED (связано) - пакет связан с уже установленным со­единением. Наиболее типичным примером является ICMP-coобщение, которое было создано в ходе соединения, но не явля­ется его частью.
  • INVALID (недопустимый): пакет не идентифицирован. Как правило, эти пакеты отбрасываются.
     Отслеживание соединений отлично работает с TCP, так как он ориентирован на соединение протоколом. С UDP-дейтаграммами, которые отправляются без установки соединения, модуль состояний, если разобраться, отклоняется от определения соединения, представляя его как простую последовательность пакетов.      Следовательно, ICMP-сообщение «эхо ответ» относится к ICMP-сообщению «эхо запрос» и рассматривается как часть «соединения», такое соединение будет помечено как установленное. Эти соединения называют «псевдосоединениями».      Модуль state включается с помощью опции -m state, затем будет доступна опция -state, дающая возможность определять состояния соединений:
# iptables -A FORWARD -i <внешний интерфейс> -о <внутренний интерфейс> -d <IP Web-сервера> --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
     Состояние NEW описывает SYN-пакеты, но любой пакет может быть расценен как новый, если он не является частью установленного соединения. Это нежелательное поведение фильтра пакетов нужно обязательно пресекать:
# iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
     Для отслеживания каждого соединения нужно 350 байтов оперативной памяти - в один мегабайт оперативной памяти «поместится» едва меньше 3000 соединений.
     Чтобы модуль состояний не использовал всю оперативную память, на загруженных брандмауэрах вводят ограничение на количество соединений. Текущее максимальное количество соединений указано в файле
/proc /sys/net/ipv4/ip_conntrack_max:
$ cat /proc/sys/net/ipv4/ip_conntrack_max
32712
     Когда максимальное число соединений будет превышено, в протоколе syslog появится сообщение в формате:
ip_conntrack: maximum limit of XXXX entries exceeded.
     На современных компьютерах, где оперативной памяти стоит обычно больше 1 Гб, эта проблема не так критична, как раньше.
     Вспомогательные модули.
     Пакет Netfilter содержит вспомогательные модули, позволяющие решить некоторые проблемы: например, ip_conntrack_ftp (для отслеживания соединений) и ip_nat_ftp (для NAT). Загрузить модули можно с помощью команды modprobe:
# /sbin/modprobe ip_conntrack_ftp
# /sbin/modprobe ip_nat_ftp
     После загрузки этих модулей FTP-данные будут помечены как RELATED, позволяя использовать состояния в правилах IPTables для ftp-данных.

http://webacademyexpert.blogspot.com/2014/06/linux-iptables.html

Маршрутизация в linux. Iptables

Практика:
iptables --list
\\ просмотр всей таблицы маршрутизации

iptables -A INPUT -s 85.25.71.227 -j REJECT
\\ добавить по ключу А (append) в хвост таблицы правило о Входящих пакетах. Цель правила указывают с помощью -j.
  
    Наиболее часто используемыми действиями являются:
  • ACCEPT - если пакет совпадает с правилом, он будет принят.
  • REJECT - отклонить пакет и отправить ICMP-сообщение об ошиб­ке назад отправителю.
  • DROP - отбросить пакет и ничего не посылать в ответ.
  • LOG - протоколировать детали пакета, если пакет совпадает с правилом. Данное действие является пассивным - нужно оп­ределить еще одно действие ACCEPT/DROP, если нужно, чтобы пакет был принят/отброшен.
iptables --flush OUTPUT
\\ сброс настроек таблицы маршрутизации сессии на Выходе;

service iptables save
\\ команда для сохранения правил. Ибо после перезагрузки правила обнулятся.
 
Теория:
1. Основы;
2. Таблицы (table);
3. Команды (command);

Основы
Как уже говорилось выше, каждое правило — это строка, содержащая в себе критерии определяющие, подпадает ли пакет под заданное правило, и действие, которое необходимо выполнить в случае выполнения критерия. В общем виде правила записываются примерно так:
iptables [-t table] command [match] [target/jump]
Нигде не утверждается, что описание действия (target/jump) должно стоять последним в строке, мы, однако, будем придерживаться именно такой нотации для удобочитаемости.
Если в правило не включается спецификатор [-t table], то по умолчанию предполагается использование таблицы filter, если же предполагается использование другой таблицы, то это требуется указать явно. Спецификатор таблицы так же можно указывать в любом месте строки правила, однако более или менее стандартом считается указание таблицы в начале правила.
Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.
Раздел matches задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет. Здесь мы можем указать самые разные критерии — и IP-адрес источника пакета или сети, и сетевой интерфейс и т.д. Существует множество критериев, которые мы рассмотрим в данной главе.
И наконец target указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, "сбросить" пакет и забыть про него, выдать на источник сообщение об ошибке и т.п.

Таблицы
Опция -t указывает на используемую таблицу. По умолчанию используется таблица filter. С ключом -t применяются следующие опции.
nat       Таблица nat используется главным образом для преобразования сетевых адресов (Network Address Translation). Через эту таблицу проходит только первый пакет из потока. Преобразования адресов автоматически применяется ко всем последующим пакетам. Это один из факторов, исходя из которых мы не должны осуществлять какую-либо фильтрацию в этой таблице. Цепочка PREROUTING используется для внесения изменений в пакеты на входе в брандмауэр. Цепочка OUTPUT используется для преобразования пакетов, созданных приложениями внутри брандмауэра, перед принятием решения о маршрутизации. Обратите внимание на то, что в настоящее время эта цепочка не работает. И последняя цепочка в этой таблице — POSTROUTING, которая используется для преобразования пакетов перед выдачей их во вне.
mangle            Эта таблица используется для внесения изменений в заголовки пакетов. Примером может служить изменение поля TTL, TOS или MARK. Важно: в действительности поле MARK не изменяется, но в памяти ядра заводится структура, которая сопровождает данный пакет все время его прохождения через машину, так что другие правила и приложения на данной машине (и только на данной машине) могут использовать это поле в своих целях. Таблица имеет две цепочки PREROUTING и OUTPUT. PREROUTING используется для внесения изменений на входе в брандмауэр перед принятием решения о маршрутизации. OUTPUT — для внесения изменений в пакеты, поступающие от приложений внутри брандмауэра. Заметьте, что таблица mangle ни в коем случае не должна использоваться для преобразования сетевых адресов или маскарадинга (Network Address Translation, Masquerading), поскольку для этих целей имеется таблица nat.
filter    Таблица filter используется главным образом для фильтрации пакетов. Для примера, здесь мы можем выполнить DROP, LOG, ACCEPT или REJECT без каких либо сложностей, как в других таблицах. Имеется три встроенных цепочки. Первая — FORWARD, используемая для фильтрации пакетов, идущих транзитом через брандмауэр. Цепочку INPUT проходят пакеты, которые предназначены локальным приложениям (брандмауэру). И цепочка OUTPUT — используется для фильтрации исходящих пакетов, сгенерированных приложениями на самом брандмауэре.
Выше мы рассмотрели основные отличия трех имеющихся таблиц. Каждая из них должна использоваться только в своих целях, и вы должны это понимать. Нецелевое использование таблиц может привести к ослаблению защиты брандмауэра и сети, находящейся за ним. Позднее, в главе Порядок прохождения таблиц и цепочек, мы подробнее остановимся на этом.

Команды
Ниже приводится список команд и правила их использования. Посредством команд мы сообщаем iptables что мы предполагаем сделать. Обычно предполагается одно из двух действий — это добавление нового правила в цепочку или удаление существующего правила из той или иной таблицы. Далее приведены команды, которые используются в iptables.
Пример
Пояснения
-A, —append
iptables -A INPUT ...
Добавляет новое правило в конец заданной цепочки.
-D, —delete
iptables -D INPUT —dport 80 -j DROP, iptables -D INPUT 1
Удаление правила из цепочки. Команда имеет два формата записи, первый — когда задается критерий сравнения с опцией -D (см. первый пример), второй — порядковый номер правила. Если задается критерий сравнения, то удаляется правило, которое имеет в себе этот критерий, если задается номер правила, то будет удалено правило с заданным номером. Счет правил в цепочках начинается с 1.
-R, —replace
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
Данная команда заменяет одно правило другим. В основном она используется во время отладки новых правил.
-I, —insert
iptables -I INPUT 1 —dport 80 -j ACCEPT
Вставляет новое правило в цепочку. Число, следующее за именем цепочки указывает номер правила, перед которым нужно вставить новое правило, другими словами число задает номер для вставляемого правила. В примере выше, указывается, что данное правило должно быть 1-м в цепочке INPUT.
-L, —list
iptables -L INPUT
Вывод списка правил в заданной цепочке, в данном примере предполагается вывод правил из цепочки INPUT. Если имя цепочки не указывается, то выводится список правил для всех цепочек. Формат вывода зависит от наличия дополнительных ключей в команде, например -n, -v, и пр.
-F, —flush
iptables -F INPUT
Сброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках.
-Z, —zero
iptables -Z INPUT
Обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки. При использовании ключа -v совместно с командой -L, на вывод будут поданы и состояния счетчиков пакетов, попавших под действие каждого правила. Допускается совместное использование команд -L и -Z. В этом случае будет выдан сначала список правил со счетчиками, а затем произойдет обнуление счетчиков.
-N, —new-chain
iptables -N allowed
Создается новая цепочка с заданным именем в заданной таблице В выше приведенном примере создается новая цепочка с именем allowed. Имя цепочки должно быть уникальным и не должно совпадать с зарезервированными именами цепочек и действий (DROP, REJECT и т.п.)
-X, —delete-chain
iptables -X allowed
Удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, то будут удалены все цепочки, определенные командой -N в заданной таблице.
-P, —policy
iptables -P INPUT DROP
Определяет политику по умолчанию для заданной цепочки. Политика по умолчанию определяет действие, применяемое к пакетам не попавшим под действие ни одного из правил в цепочке. В качестве политики по умолчанию допускается использовать DROP, ACCEPT и REJECT.
-E, —rename-chain
iptables -E allowed disallowed
Команда -E выполняет переименование пользовательской цепочки. В примере цепочка allowed будет переименована в цепочку disallowed. Эти переименования не изменяют порядок работы, а носят только косметический характер.
Команда должна быть указана всегда. Список доступных команд можно просмотреть с помощью команды iptables -h или, что тоже самое, iptables —help. Некоторые команды могут использоваться совместно с дополнительными ключами. Ниже приводится список дополнительных ключей и описывается результат их действия. При этом заметьте, что здесь не приводится дополнительных ключей, которые используются при построении критериев (matches) или действий (targets). Эти опции мы будем обсуждать далее.
Команды, с которыми используется
Описание
-v, —verbose
—list, —append, —insert, —delete, —replace
Данный ключ используется для повышения информативности вывода и, как правило, используется совместно с командой —list. В случае использования с командой —list, в вывод этой команды включаются так же имя интерфейса, счетчики пакетов и байт для каждого правила. Формат вывода счетчиков предполагает вывод кроме цифр числа еще и символьные множители K (x1000), M (x1,000,000) и G (x1,000,000,000). Для того, чтобы заставить команду —list выводить полное число (без употребления множителей) требуется применять ключ -x, который описан ниже. Если ключ -v, —verbose используется с командами —append, —insert, —delete или —replace, то то на вывод будет выдан подробный отчет о произведенной операции.
-x, —exact
—list
Для всех чисел в выходных данных выводятся их точные значения без округления и без применения множителей K, M, G. Важно то, что данный ключ используется только с командой —list и не применяется с другими командами.
-n, —numeric
—list
Заставляет iptables выводить IP-адреса и номера портов в числовом виде предотвращая попытки преобразовать их в символические имена. Данный ключ используется только с командой —list.
—line-numbers
—list
Ключ —line-numbers включает режим вывода номеров строк при отображении списка правил командой —list. Номер строки соответствует позиции правила в цепочке. Этот ключ используется только с командой —list.
-c, —set-counters
—insert, —append, —replace
Этот ключ используется при создании нового правила для установки счетчиков пакетов и байт в заданное значение. Например, ключ —set-counters 20 4000установит счетчик пакетов = 20, а счетчик байт = 4000.
—modprobe
All
Ключ —modprobe определяет команду загрузки модуля ядра. Данный ключ используется в случае, если ваша команда modprobe находится вне пути поиска (searchpath). Этот ключ может использоваться с любой командой.

Маршрутизация в linux. Forward, default, stateful firewall

SEO: Эксперимент: как Яндекс и Google учитывают ключевые слова в URL

Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Дата пу...