Entendendo suas regras
A primeira etapa para entender como funcionam as regras de firewall é, como na maioria das coisas, verificar a página man
( man iptables
). Na página man
, você encontrará:
-m, --match match
Specifies a match to use, that is, an extension module that tests for a specific property. The set of matches make up the condition under which a target is invoked. Matches are evaluated first to last as specified on the command line and work in short-circuit fashion, i.e. if one extension yields false, evaluation will stop.
Perto da parte inferior da página man
, você também encontrará:
MATCH AND TARGET EXTENSIONS
iptables can use extended packet matching and target modules. A list of these is available in the iptables-extensions(8) manpage.
Então, a página iptables-extensions
man
fornecerá os detalhes sobre o que suas opções -m
estão realmente fazendo. Alguns pequenos trechos de lá:
mark
[!] --mark value[/mask]
...
tcp
[!] --destination-port,--dport port[:port]
...
DNAT
This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains. It specifies that the destination address of the packet should be modified (and all future packets in this connection will also be mangled), and rules should cease being examined. It takes the following options:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
...
MARK
This target is used to set the Netfilter mark value associated with the packet. It can, for example, be used in conjunction with routing based on fwmark (needs iproute2). If you plan on doing so, note that the mark needs to be set in the PREROUTING chain of the mangle table to affect routing. The mark field is 32 bits wide.
--set-xmark value[/mask]
Para simplificar, as opções -m
adicionam opções de correspondência a iptables
. Mas a página man
também lista alguns destinos não padrão (incluindo o DNAT
que você está usando.
O que fazer
Agora, juntando tudo isso, presumo que a tabela com a qual você está trabalhando é nat
, pois é a única que trabalha com DNAT
target.
Parece também que marcar o tráfego é desnecessário. Ele está simplesmente sendo marcado para que você possa nat
o pacote, mas você pode apenas nat
o pacote em vez de marcá-lo para começar.
Por exemplo:
-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1
Você pode especificar várias regras para abranger várias portas, mas também especificar intervalos de porta usando [port]:[port]
ou correspondências negativas usando !
.
Por exemplo, para aplicar a regra a todas as portas, exceto 53
(domain) e 22
(ssh), você pode fazer o seguinte:
-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 53 -j DNAT --to-destination 192.168.56.1
-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 22 -j DNAT --to-destination 192.168.56.1
Pode ser complicado se houver muitas portas que você deseja filtrar, mas essa é a vida com iptables
. Eu recomendaria a verificação de /etc/services
para obter uma lista de mapeamentos de portas para que você possa evitar o impacto de determinados serviços / protocolos.