AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / 问题

Perguntas[iptables](unix)

Martin Hope
Jader Dias
Asked: 2025-02-24 05:37:46 +0800 CST

Como usar o iptables para redirecionar uma porta quando o destino é meu próprio endereço IP?

  • 6

Redirecionei com sucesso as solicitações de entrada da porta 53 para 3053 usando a tabela PREROUTING do iptables

Redirecionei com sucesso as solicitações locais da porta 53 para 3053 usando a tabela OUTPUT do iptables, desde que usem a interface de loopback

Mas as requisições locais que usam o endereço IPv4 eth0 ignoram ambos os redirecionamentos. Como resolver isso?

Eu tentei DNAT, especificando o IP de destino, a interface, nada funciona

sudo iptables-save
# Generated by iptables-save v1.8.9 (nf_tables) on Sun Feb 23 21:29:58 2025
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:PREROUTING ACCEPT [3765:300383]
:INPUT ACCEPT [3760:298404]
:OUTPUT ACCEPT [54136:75736197]
:POSTROUTING ACCEPT [54072:75544537]
-A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 3053
-A OUTPUT -o lo -p udp -m udp --dport 53 -j REDIRECT --to-ports 3053
COMMIT

Como reproduzir o erro com contêineres

FROM alpine:latest

RUN apk add --no-cache iptables netcat-openbsd socat
podman build -t udp-redirect .

podman run --rm -it --privileged --sysctl net.ipv4.conf.all.route_localnet=1  --name udp-redirect udp-redirect sh

socat -T 1 UDP-LISTEN:3053,fork EXEC:"echo -n 'Hello world'" &

iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 127.0.0.1:3053

echo -n "Test1" | nc -u -w1 10.0.2.100 53
iptables
  • 1 respostas
  • 79 Views
Martin Hope
incubus
Asked: 2025-01-09 01:50:23 +0800 CST

iptables-save parece ter comportamento inconsistente

  • 6

Tenho usado o iptables-savecomando recentemente (combinado com iptables-restore) e notei um comportamento inconsistente que não entendo. Tenho certeza de que não é um bug, pois é um comando muito popular para ter passado despercebido, o que significa que é meu próprio entendimento que está falho. Dei uma olhada nas páginas de manual e em várias fontes de documentação, mas não consegui encontrar nada que explicasse o que observei.

O problema é que quando executo o comando iptables-save, espero ver a filtertabela despejada no stdout (conforme a documentação). O que vejo de fato é absolutamente nada, por exemplo:

[root@rhel9 ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@rhel9 ~]# 
...
[root@rhel9 ~]# iptables-save
[root@rhel9 ~]# 

Como você pode ver, não há saída para nada stdoutdo comando. Da mesma forma, se eu executar o comando e tentar redirecionar a saída ou passar a -f <output file>opção, a saída ainda estará em branco.

Se eu especificar a tabela que desejo visualizar, obtenho uma saída, por exemplo:

[root@rhel9 ~]# iptables-save -t filter
# Generated by iptables-save v1.8.8 (nf_tables) on Wed Jan  8 16:43:11 2025
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Jan  8 16:43:11 2025

Se eu salvar essa saída em um arquivo, digamos ipv4backup, e então chamar iptables-restoreesse arquivo, o comportamento iptables-saveserá diferente:

[root@rhel9 ~]# iptables-restore ipv4backup
[root@rhel9 ~]# 
[root@rhel9 ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@rhel9 ~]# 
[root@rhel9 ~]# iptables-save
# Generated by iptables-save v1.8.8 (nf_tables) on Wed Jan  8 16:44:03 2025
*filter
:INPUT ACCEPT [5:305]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:914]
COMMIT
# Completed on Wed Jan  8 16:44:03 2025

As tabelas contêm o mesmo conteúdo do exemplo acima, mas há um comportamento diferente dependendo iptables-savese iptables-restorefoi chamado anteriormente.

Testei isso no RHEL9 e no Ubuntu 22.04 e ambos apresentam o mesmo comportamento. No SuSE 15, o comando foi executado e produziu saída de todas as tabelas, independentemente de iptables-restoreterem sido executadas anteriormente. Os ip6tables...comandos equivalentes apresentam o mesmo comportamento.

Então, a questão é (com base no comportamento observado acima): por que iptables-savenão produz saída quando as tabelas estão vazias, mas se restaurarmos tabelas vazias e chamarmos o comando novamente, obtemos a saída esperada (que são tabelas vazias)?

iptables
  • 1 respostas
  • 19 Views
Martin Hope
alecov
Asked: 2024-07-25 12:24:01 +0800 CST

Tabela NAT ignorada para respostas do servidor em execução dentro do contêiner Docker

  • 5

Eu tenho um contêiner Docker em execução em uma configuração vanilla que escuta na porta 9999:

docker run --rm -it -p 9999:9999 busybox nc -vvl -p 9999 0.0.0.0

Adicionei uma regra LOG à tabela POSTROUTING no NAT para capturar os pacotes do servidor. No entanto, quando me conecto de uma máquina externa a este contêiner, não vejo nada no log do sistema.

No entanto, posso ver pacotes de conexão ao fazer login no final da cadeia POSTROUTING do mangle. De acordo com o The Diagram(TM) , NAT-POSTROUTING deve ser a próxima cadeia a viajar.

Esta é a tabela NAT:

# iptables -nL -tnat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     0    --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     0    --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
LOG        0    --  172.16.0.0/12        0.0.0.0/0            LOG flags 0 level 4 prefix "Packet:"
MASQUERADE  0    --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  6    --  172.17.0.2           172.17.0.2           tcp dpt:9999

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     0    --  0.0.0.0/0            0.0.0.0/0           
DNAT       6    --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9999 to:172.17.0.2:9999

Assistir journalctl -f | grep Packet:não mostra nada. TRACE indica que a tabela NAT foi totalmente ignorada, ou seja, todas as cadeias são ignoradas para pacotes de saída do servidor.

Isto está definido:

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

Por que isso acontece neste caso? Ou, de maneira mais geral, por que alguns pacotes simplesmente ignoram completamente a tabela NAT?

iptables
  • 1 respostas
  • 14 Views
Martin Hope
Work
Asked: 2024-05-08 07:46:58 +0800 CST

Encaminhando pacotes TCP e UDP em todas as portas para outro IP em uma segunda interface de rede?

  • 5

Eu tenho uma máquina Ubuntu no IP 192.168.3.1, outra máquina está conectada a ela no IP fixo de 192.168.3.2. Esta máquina também está conectada a um roteador via usb0 que compartilhou o IP 172.30.220.17 com a máquina

diagrama da minha configuração aqui

O que eu quero fazer é encaminhar qualquer pacote TCP ou UDP recebido por esta máquina através do IP 192.168.3.1 para 172.30.220.19 do roteador e vice-versa

Por exemplo, se a máquina em 192.168.3.2 enviar um pacote TCP "Hello" na porta 33000 para o computador principal, ela deverá enviar o pacote para 172.30.220.19:33000

Depois de ler a documentação do iptables e algumas perguntas anteriores, tentei os comandos abaixo para NAT, mas não funciona, não sei por quê. Eu ficaria feliz se alguém pudesse me orientar sobre o que fiz de errado. Obrigado pelo seu tempo

sudo iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 172.30.220.19
sudo iptables -t nat -A POSTROUTING -p tcp -d 172.30.220.19  -j SNAT --to-source 192.168.3.2
iptables
  • 2 respostas
  • 29 Views
Martin Hope
Adrian Sevcenco
Asked: 2024-04-08 02:42:59 +0800 CST

iptables::drop INVÁLIDO antes ou depois de ESTABLISHED,RELATED?

  • 6

Não está claro para mim se a verificação de INVÁLIDO vs ESTABLISHED, RELATED é igualmente rápida para ambos os casos (e se os estados são completamente ortogonais). Devo descartar INVÁLIDO antes de aceitar ESTABLISHED ou posso aceitar com segurança ESTABLISHED e depois descartar INVÁLIDO?

iptables
  • 1 respostas
  • 24 Views
Martin Hope
user1636349
Asked: 2024-03-21 03:27:26 +0800 CST

Tentando entender as mensagens de log do iptables

  • 5

Eu configurei o iptables para registrar o tráfego de saída de todos, exceto um conjunto limitado de usuários, e estou tentando entender as mensagens de log que isso produz. Olhando para/var/log/syslog, vejo solicitações de 127.0.0.1 a 127.0.0.53 (pesquisas de DNS?) E algumas para 224.0.0.22 que se parecem com isto:

IN= OUT=wlp2s0 SRC=10.100.102.200 DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2 MARK=0x94

que é um endereço multicast... alguma idéia do que estaria causando isso?

Finalmente, tenho vários parecidos com este, que parecem ser solicitações ICMP enviadas para vários lugares ao redor do mundo:

IN= OUT=wlp2s0 SRC=10.100.102.200 DST=151.80.9.69 LEN=138 TOS=0x08 PREC=0xC0 TTL=64 ID=26846 PROTO=ICMP TYPE=3 CODE=3 [SRC=151.80.9.69 DST=10.100.102.200 LEN=110 TOS=0x08 PREC=0x40 TTL=51 ID=48812 DF PROTO=UDP SPT=27209 DPT=8083 LEN=90 ]

Mas o que realmente me intriga é a parte entre colchetes ( SRC=151.80.9.69 PROTO=UDP SPT=27209 DPT=8083). Significa que o pacote ICMP é uma resposta a uma solicitação UDP para a porta 8083? Devo me preocupar com a possibilidade de uma possível intrusão (ou tentativa de intrusão)? E se sim, há algum motivo pelo qual eu não deva bloquear todo o tráfego UDP de entrada? (Eu só tenho servidores web escutando nas portas 80 e 443, e nenhuma outra porta está aberta - eu verifiquei e verifiquei novamente isso.)

Grato por qualquer ajuda para entender o que estou vendo aqui ...

iptables
  • 1 respostas
  • 23 Views
Martin Hope
Garrett
Asked: 2024-03-13 03:59:19 +0800 CST

Marcando pacotes em iptables com base na interface de saída

  • 5

Eu tenho uma configuração incomum no meu servidor. Temos três portas Ethernet de saída, todas conectadas a uma única interface de ponte que dividimos em duas VLANs:

ip link add veth type bridge
ip link set veth address 01:23:45:67:89:0A
ip link set dev eth1 master veth
ip link set dev eth2 master veth
ip link set dev eth3 master veth
[...]
ip link add veth name veth.10 type vlan id 10
ip link add veth name veth.20 type vlan id 20
ip link add veth.20-local link veth.20 type macvlan mode bridge
[...]
docker network create --driver=macvlan --subnet=192.168.XXX.0/24 --opt com.docker.network.driver.mpu=1500 --gateway 192.168.XXX.1 --opt parent=veth.20-local dockerbr20

Eu tenho uma imagem docker dentro do meu servidor conectada ao veth.20endereço, que só tem permissão para se comunicar por veth.20. Existem regras de roteamento e encaminhamento no restante da rede que permitem que a imagem do Docker se comunique com alguns destinos selecionados fora dessa VLAN.

Gostaria de adicionar uma iptablesregra cobrindo pacotes de saída que deixam meu servidor fora da veth.20interface, independentemente do seu destino. (Alguns pacotes devem permanecer dentro da veth.20interface; alguns podem ser roteados para outras VLANs.)

As seguintes regras foram tentadas e, por qualquer motivo, não parecem marcar os pacotes que saem veth.20do contêiner do docker:

iptables -A POSTROUTING -t mangle -o veth.20 -j MARK --set-mark 3
iptables -A PREROUTING -t mangle -i veth.20 -j MARK --set-mark 3
iptables -A POSTROUTING -t nat -o veth.20 -j MARK --set-mark 3
iptables -A PREROUTING -t nat -i veth.20 -j MARK --set-mark 3
iptables -A OUTPUT -t mangle -o veth.20 -j MARK --set-mark 3
iptables -A INPUT -t mangle -i veth.20 -j MARK --set-mark 3
iptables -A FORWARD -i veth.20 -j MARK --set-mark 3
iptables -A FORWARD -o veth.20 -j MARK --set-mark 3

Isto é, iptables -L -n -v -t manglee iptables -L -n -v -t natnão mostra nenhuma dessas regras sendo aplicadas a pacotes de saída veth.20para um host em outra VLAN.

Confirmei, por meio de ifconfig, que todos os pacotes da imagem do docker estão saindo do servidor veth.20; o

iptables -A OUTPUT -t mangle -o veth.20 -j MARK --set-mark 3

a regra se aplica quando envio pacotes para máquinas externas na VLAN 20, do servidor ou da imagem do docker; mas quando envio pacotes pela veth.20interface do docker que são roteados para um endereço VLAN 10 ou VLAN 30 externo (não ilustrado), nenhuma marca é aplicada.

Acho que esse deveria ser um problema simples, mas nada do que tentei foi capaz de marcar com base na interface que o pacote usa para sair da caixa. o que estou perdendo?

iptables
  • 1 respostas
  • 17 Views
Martin Hope
chris01
Asked: 2024-02-02 15:46:37 +0800 CST

Iptables: ordem de redirecionamento e filtro de entrada

  • 5

Filtrarei o tráfego de entrada com iptables.

Eu tenho 2 objetivos.

a) Allow HTTPS inbound at port 443.

b) Redirect port 443 to process listening port on 9443.

Não tenho certeza sobre o processamento dessas 2 regras.

Preciso definir minha regra INPUT para ACCEPT HTTPS de entrada para a porta 443 ou 9443?7

Depende se o redirecionamento for feito antes ou depois, eu acho.

iptables
  • 1 respostas
  • 26 Views
Martin Hope
Genku
Asked: 2024-01-26 05:46:29 +0800 CST

O lançamento do daemon docker no Ubuntu 22.04 LTS no WSL-2 falha devido ao iptables

  • 5

Estou tentando executar o docker dentro do Ubuntu 22.04.3 LTS rodando em WSL-2 em minha máquina Windows 10.

Eu segui as instruções aqui . Mas ainda não está funcionando, estou recebendo o seguinte erro quando executo sudo dockerd:

failed to register "bridge" driver: failed to create NAT chain DOCKER:
       iptables failed: iptables -t nat -N DOCKER:
       iptables v1.8.7 (legacy): can't initialize iptables table `nat':
          Table does not exist (do you need to insmod?)
          Perhaps iptables or your kernel needs to be upgraded.
  (exit status 3)

Quando faço isso, modprobe ip_tablesrecebo:

modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.4.0-22621-Microsoft
iptables
  • 2 respostas
  • 183 Views
Martin Hope
MrSnrub
Asked: 2023-10-30 12:19:56 +0800 CST

Roteador NAT com 2 IPs WAN externos A+B e múltiplas LANs internas: Deixe 1 LAN usar o endereço IP externo B, todos os outros A

  • 7

Eu tenho um roteador Linux simples com vários NICs e encaminhamento IPv4 habilitado.

O roteador possui dois endereços IP WAN estáticos, atribuídos a uma interface ( eth0, eth0:0). (No texto a seguir, ofuscarei os endereços IP públicos reais (257 como um octeto).)

O roteador pode receber ping em ambos os endereços IP WAN externos da Internet externa.

Interfaces:

  • eth0: Conexão com a Internet, 134.257.10. 24/10 , gateway 134.257.10.1
  • eth0:0: Segundo endereço IP nessa interface: 134.257.10. 20/24 _
  • eth1: LAN 1, 192.168.1.1/24
  • eth2: LAN2, 192.168.2.1/24
  • eth3: LAN 3, 192.168.3.1/24

Minha configuração funciona e todos os clientes LAN (LAN 1-3) podem acessar a Internet e são vistos externamente como 134.257.10. 10 . Além disso, tenho dois encaminhamentos de porta de entrada.

Minha tabela NAT do iptables é assim:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Port forwarding:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
-A PREROUTING -i eth0:0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.3.33:25
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

Como posso fazer com que os clientes LAN3 ( eth3) apareçam como 134.257.10. 20 na Internet ( eth0:0) para conexões de saída em vez de 134.257.10. 10 ( eth0)?

iptables
  • 1 respostas
  • 129 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve