Eu tenho visto um problema muito semelhante em meus próprios sistemas e posso ter uma resposta sobre o que está acontecendo.
Aparentemente, o TCP permite que o cliente envie um pacote FIN, e você ACK o pacote FIN, mas ainda mantém sua extremidade da conexão aberta e envia mais dados através dele, enviando seu próprio pacote FIN em algum momento no futuro . Lembro-me de ler que isso foi implementado em algum ponto no Kernel 2.6, embora minha memória sobre este ponto possa ser imprecisa / irrelevante.
Muitos firewalls, incluindo IPTables, não parecem ter implementado isso ainda ou implementado incorretamente e consideram a conexão fechada assim que eles vêem um FIN seguido por um ACK. O resultado disso é que, de vez em quando, meu servidor envia um pacote para um cliente que o firewall acha que não faz parte de uma conexão estabelecida e não é novo e, portanto, descarta isso.
Na prática, eu não vi nenhum dado importante nos pacotes finais que estão sendo descartados, então o efeito são alguns pacotes de reset extra sendo jogados ao redor e algumas conexões extras deixadas no estado FIN_WAIT, mas não quebradas ou páginas carregadas.
Eu não sei sobre o tempo de 20 minutos que você está vendo, mas eu acho que é um tipo de cliente que funciona regularmente a cada 20 minutos e faz um pedido que faz com que seu servidor execute a sequência FIN ACK PSH FIN RST .
Esta postagem pode oferecer mais informações sobre o motivo pelo qual o IPTables descarta esses pacotes: link
De acordo com Chris Brenton, é uma incompatibilidade entre os tempos limite do cliente, o servidor e o firewall para os pacotes no estado fechado de um lado.