O iptables usa o recurso syslog para o registro. Envie um SIGHUP para o syslogd, ksyslogd ou rsyslogd para fechar e reabrir os arquivos de log.
Acabamos de descobrir que o logrotate não está girando nosso log de firewall. Então, é até 12G de tamanho.
Eu preciso dividir o arquivo em partes menores e começar a girá-las manualmente para que as coisas voltem ao normal.
No entanto, antes de começar a dividir o firewall, preciso impedir que o firewall efetue login no arquivo de log atual do firewall e force-o a iniciar o registro em um novo arquivo vazio. Dessa forma, não estou tentando dividir ou girar um arquivo de log que ainda está crescendo constantemente.Eu tentei simplesmente fazer isso:
mv firewall firewall.old
touch firewall
Eu esperava ver o novo arquivo de firewall vazio começar a crescer em tamanho, mas não ... o firewall.old ainda está logado.
Então eu tentei iniciar / parar o iptables. Nenhuma mudança. O firewall.old ainda é o arquivo de log.
Eu tentei movê-lo para outro diretório. Isso não ajudou.
Eu tentei parar o iptables, então mudei o nome do arquivo e criei um novo arquivo de firewall e então iniciei o iptables novamente, mas nenhuma mudança.
Como faço para parar o registro neste arquivo e forçá-lo a iniciar o login em um novo arquivo?
A gravação do arquivo de log não é executada pelo iptables. O iptables simplesmente registra na instalação do syslog do kernel e cabe ao seu programa syslog gravá-lo em um arquivo de log. Quando você está movendo o arquivo, você está basicamente renomeando-o da perspectiva do sistema de arquivos. Seu daemon syslog não tem idéia de que você fez isso e felizmente continua escrevendo para o seu filehandle aberto. O que você precisa fazer é recarregar seu daemon syslog para que ele reabra o arquivo com base em seu caminho do sistema de arquivos e comece a gravar no novo arquivo. A maioria dos daemons syslog suportam capturar o sinal HUP para fazer isso e não requerem uma reinicialização completa.
Você deve usar um programa como logrotate, que é pré-instalado com a maioria das distros, para lidar com a rotação para você. É inteligente e suporta ações como daemons de sinalização. Você não precisa criar seu próprio script para esse propósito.
Seus arquivos de configuração para logrotate devem incluir uma seção pós-carga que recarregue ou syslog SIGHUPs ou rsyslog ou equivalente.
No meu sistema, /etc/logrotate.d/rsyslog
contém, entre outras coisas:
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
Você pode fazer uma cópia do seu arquivo syslog:
cp -abf sys.log sys.log_bak
E mova a cópia para qualquer local desejado:
mv sys.log_bak /path/desired/sys.log_bak
E limpe o conteúdo do arquivo original:
cat /dev/null > sys.log
Seu arquivo original continuará a receber syslogs depois disso; você não precisa trocá-lo por outro arquivo.