Если у вас есть доступ к perl-rename
(называется rename
в системах на основе Debian, включая Ubuntu, perl-rename
в Arch и prename
на других), вы можете сделать:
perl-rename -n 's/(\[.*?\])\s*(.*)/$2 - $1/' ./\[*
-n
: это заставляет perl-rename
печатать то, что он будет делать, фактически ничего не переименовывая. Запустите его таким образом и, если он работает так, как ожидалось, удалите -n
, чтобы он действительно переименовывался. s/from/to/
: заменит from
на to
. s/(\[.*?\])\s*(.*)/$2 - $1/'
: здесь from
— это все, что находится между первым [
и первый ]
(\[.*?\]
). Затем 0 или более пробельных символов (\s*
), а затем все остальное (.*
). Круглые скобки вокруг шаблонов будут захватывать их, позволяя нам использовать их как $1
и $2
соответственно в правой части подстановки. Итак, это поместит все после [ ]
($2
) перед скобками ($1
). ./\[*
запустить его для всех файлов и каталогов в текущем каталоге, имя которого начинается с [
. С помощью iptables-save
, я выяснил, какой правильный формат, при сохранении его в:
/etc/iptables/rules.v4
Пример правил для ссылки в вопросе:
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p icmp -m u32 ! --u32 "0x4&0x3fff=0x0" -j DROP
-A PREROUTING -p icmp -m length --length 1492:65535 -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
COMMIT
Здесь, я предполагаю, вы не заботитесь об IPv6. Итак, файл, который вы хотите отредактировать:
/etc/sysconfig/iptables
Поместите это в начало вашего файла iptables. Это скелетная реализация таблицы RAW, которая используется перед любой таблицей, связанной с маршрутизацией (например, FILTER). Обратите внимание, что каждая таблица имеет свою собственную команду COMMIT в нижней части своих определений:
*raw
:TCPFLAGS - [0:0]
# the two rules below assure that only TCP packets get examined. All others continue into the *filter table.
-A PREROUTING -p tcp -j TCPFLAGS
-A PREROUTING -j ACCEPT
# quickly accept standard handshakes
# ALLOW ACK or ACK/SYN
#-A TCPFLAGS -j ACCEPT
-A TCPFLAGS -p tcp --tcp-flags FIN,ACK,URG,PSH,RST ACK -j ACCEPT
# allow ACK/FIN with either URG or PSH, or both, or neither
# but SYN and RST can't be set
-A TCPFLAGS -p tcp --tcp-flags FIN,SYN,ACK,RST ACK,FIN -j ACCEPT
# allow SYN or ACK/SYN
-A TCPFLAGS -p tcp --tcp-flags FIN,SYN,URG,PSH,RST SYN -j ACCEPT
# allow RST or ACK/RST
-A TCPFLAGS -p tcp --tcp-flags FIN,SYN,URG,PSH,RST RST -j ACCEPT
# this rule catches xmas-tree and fin attacks
-A TCPFLAGS -p tcp --tcp-flags FIN FIN -j DROP
# this rule catches xmas-tree and syn/rst attacks
-A TCPFLAGS -p tcp --tcp-flags SYN SYN -j DROP
# this rule catches null attacks
-A TCPFLAGS -p tcp --tcp-flags ALL NONE -j DROP
#-A TCPFLAGS -p tcp -ecn-tcp-cwr -j DROP
# these rules catch bad ack combinations
#-A TCPFLAGS -p tcp --tcp-flags ACK ACK -j ACC
-A TCPFLAGS -j ACCEPT
# so, what do we accept for tcp?
# handshakes (ACK/FIN), (ACK/SYN), (SYN), (ACK), (RST), (ACK/RST), and data packets with
# PSH or URG or FIN or ACK
COMMIT
Приведенное выше находится над определениями *фильтра. Я не делаю никаких утверждений относительно правильности этих правил. Обратите внимание, что я закомментировал некоторые правила, которые не сработали для меня. Если вы найдете что-то неправильное в моих правилах, пожалуйста, напишите об этом ниже.