Если я хорошо понял все ваши требования, делайте так:
# assuming your network interface is named `eth1` as per your OP example
iptables -t raw -A PREROUTING -i eth1 -p tcp --dport 3306 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to-port 3306
Первая команда запрещает соединения, входящие от eth1
к tcp-порту 3306.
Вторая команда перенаправляет любое входящее соединение, направленное на локальный порт 12345, на локальный порт 3306.
Если у вас есть несколько интерфейсов с именами вроде eth0
, eth1
, eth2
и т. д., и вы хотите заблокировать их все, вы можете получить это, просто указавeth+
(обратите внимание на знак плюс )в первой команде выше, в противном случае, чтобы выборочно заблокировать только определенные интерфейсы, вам нужно будет использовать эту первую команду один раз для каждого интерфейса, который нужно заблокировать.
Приведенные выше две команды необходимы для достижения запрошенного поведения, и их может быть достаточно в зависимости от ваших общих потребностей.
Тем не менее, для более стабильной работы я бы посоветовал дополнительную дополнительную конфигурацию:
iptables -t nat -A OUTPUT -o lo -p tcp --dport 12345 -j REDIRECT --to-port 3306
Это перенаправляет локально соединения с локального порта 12345 на локальный порт 3306, так что вы можете подключиться к вашему mysql через порт 12345 с той же локальной машины.
Наконец, как важная сторона -примечание , имейте в виду, что -A
опция iptables
команды добавляет правила к уже существующим,которые, таким образом, имеют приоритет перед добавленными новыми, тем самым мешая им.
Поэтому, если вы поэкспериментируете с любой командой iptables, вам может понадобиться очистить задействованные таблицы в какой-то момент, и вы можете сделать это с помощью опции -F
, например:
iptables -t raw -F PREROUTING
iptables -t nat -F PREROUTING
# and possibly also
iptables -t nat -F OUTPUT
# if you also used the additional advised commmand
С другой стороны, также имейте в виду, что эти команды очищают все правила, присутствующие в этих таблицах, включая те, которые могли быть там из-за других установленных брандмауэров. Есть более тонкие команды для выборочного удаления определенных правил, но они зависят от вашей общей настройки iptables, если она очень сложна, помимо двух простых правил, показанных здесь.
Таким образом, вы всегда должны сначала посмотреть, какова ваша первоначальная конфигурация, и вы можете сделать это с помощью опции -L
iptables
, т.е. вот так:
iptables -t raw -nL PREROUTING
iptables -t nat -nL PREROUTING
# and possibly also
iptables -t nat -nL OUTPUT
# if you also used the additional advised commmand
Конечно, вы можете использовать их в любое время, чтобы видеть текущее состояние ваших таблиц по мере добавления правил. Затем вы можете добавить параметр v
(как в -nvL
), чтобы видеть счетчики для правил, когда они соответствуют (или не соответствуют )сетевому трафику с течением времени.
Это дает вам общее количество пикселей в изображении:
identify -verbose ~/www/pictures/ISTI-F.jpg | sed -n '/.*Pixels: /s///p'
, а этот дает название доминирующего цвета и количество пикселей:
convert ~/www/pictures/ISTI-F.jpg -format "%c" histogram:info: | sort -nr -t: | head -1 | sed 's/\(.*\):.*#\(......\).*/\2\1/'
Пример:
$ identify -verbose ISTI-F.jpg | sed -n '/.*Pixels: /s///p'
1920000
$ convert ISTI-F.jpg -format "%c" histogram:info: | sort -nr -t: | head -1 | sed 's/\(.*\):.*#\(......\).*/\2\1/'
FFFFFF 1667711
Это может быть основой для написания сценария оболочки, но он не годится для проверки многих файлов, так как Imagemagick невероятно гибкий, но медленный
Следующий сценарий Octave можно вызвать непосредственно из командной строки. Его аргументами должны быть два имени каталога errdir
и baddir
и список файлов изображений. Файлы, для которых библиотека LibMagick++, используемая Octave, выдает предупреждение или ошибку, перемещаются в errdir
; файлы, у которых последние 25% строк одного цвета, перемещаются в baddir
; другие файлы остаются нетронутыми. На стандартный вывод выдается краткий отчет.
Если вам нужен только отчет без перемещения файлов, не указывайте имена каталогов в качестве первых двух аргументов.
#!/usr/bin/octave -qf
threshold = 0.25;
usage = "Usage is: badfiles <file...> OR badfiles <errdir> <baddir> <file...>\n";
files\n";
assert(nargin>0, usage);
dryrun = isfile(argv{1});
if !dryrun
errdir = argv{1};
baddir = argv{2};
assert(isfolder(errdir) && isfolder(baddir) && isfile(argv{3}), usage);
endif
start = 1 + 2*(!dryrun);
for fname = argv()(start:end)'
q = [];
f = fname{};
warning error
try
q = imread(fname{});
catch err
end_try_catch
warning on
if isempty(q)
printf("error\t");
dryrun || movefile(f, errdir);
else
qt = all(q == q(end,1,:),2);
qtt = squeeze(all(qt, 3));
r = 1 - find(qtt==0, 1, 'last') / size(q, 1);
if (r > threshold)
printf("bad--%02d\t", ceil(100*r));
dryrun || movefile(f, baddir);
else
printf("good-%02d\t", ceil(100*r));
endif
endif
disp(f);
endfor
Чтобы это работало, у вас должна быть установлена Octave. Скопируйте приведенное выше в файл с именем badimage
, сделайте его исполняемым с помощью chmod +x badimage
и протестируйте скрипт, например ./badimage *.jpg
:, вы увидите список файлов с их статусом (хороший, плохой, ошибка ).
Посмотрите на выходные данные и, возможно, измените пороговое значение внутри скрипта на более агрессивное (более низкое пороговое )или более консервативное (более высокое пороговое )поведение. Вы можете тестировать его сколько угодно, так как он не перемещает и не изменяет файлы, если вы указываете только имена файлов изображений в качестве аргументов.
Когда вы будете удовлетворены результатами, создайте два каталога mkdir errpics badpics
. Затем вызовите скрипт как ./badimage errpics badpics *.jpg
. Таким образом, скрипт перемещает ваши файлы в каталоги, как описано выше.
ПРЕДОСТЕРЕЖЕНИЕ :После использования этого скрипта обязательно проверьте хороший образец изображений, которые помечены как плохие или ошибочные, прежде чем удалять их!
Алгоритм, обнаруживающий плохие изображения, надежен для фотографий, но не обязательно для рисунков, логотипов, диаграмм, графиков, которые могут содержать широкие допустимые области одного цвета. Файлы с ошибками могут быть плохими или поврежденными с точки зрения LibMagick++, но они хорошо читаются на обычно более мягких визуализаторах изображений.