Redirecionar o tráfego na porta 80 para o apache para macs desconhecidos e para o squid para alguns macs

1

Eu tenho uma caixa linux se comportando como um roteador que lida com duas interfaces de rede: eth0 para internet e eth1 para LAN.

Eu configurei o iptables para redirecionar todo o tráfego da web vindo pela LAN para um apache local, escutando na porta 80 também, usando estas regras:

sudo iptables -t mangle -N internet
sudo iptables -t mangle -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j internet
sudo iptables -t mangle -A internet -j MARK --set-mark 99
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp -m mark --mark 99 -m tcp --dport 80 -j DNAT --to-destination $BOX_IP

Agora preciso adicionar uma exceção a esse comportamento para alguns endereços mac conhecidos, a fim de redirecionar o tráfego da Web para o apache, mas para um proxy do squid, que está escutando na porta 3128.

Consegui apenas remover o redirecionamento e deixar a solicitação da web ir até o host solicitado, anexando essa outra regra:

sudo iptables -t mangle -I internet 1 -m mac --mac-source $MAC_ADDRESS -j RETURN

mas o que eu quero é que o tráfego da web seja direcionado para $BOX_IP:3128 . Qual é a melhor maneira de fazer isso?

    
por etuardu 30.04.2013 / 12:19

1 resposta

0

Por que você repete todos esses critérios de filtro na linha --mark 99 ? você marca um pacote, é isso. Se aparecerem mais critérios, você deve alterar a marcação, mas não verificar mais do que a marca. BTW, o nome da corrente internet parece bastante suboptimal para mim.

#!/bin/bash

if iptables -L apache -n &>/dev/null; then
  iptables -t mangle -F apache
else
  iptables -t mangle -N apache
fi
iptables -t mangle -A apache -j MARK --set-mark 99
# finish the handling of this packet in this table
iptables -t mangle -A apache -j ACCEPT

if iptables -L squid -n &>/dev/null; then
  iptables -t mangle -F squid
else
  iptables -t mangle -N squid
fi
iptables -t mangle -A squid -j MARK --set-mark 98
# finish the handling of this packet in this table
iptables -t mangle -A squid -j ACCEPT

if iptables -L proxy_mac_check -n &>/dev/null; then
  iptables -t mangle -F proxy_mac_check
else
  iptables -t mangle -N proxy_mac_check
fi
for MAC_ADDRES in 11:22:33:44:55:66 11:22:33:44:55:67; do
  iptables -t mangle -A proxy_mac_check -m mac --mac-source $MAC_ADDRES -j squid
done
iptables -t mangle -A proxy_mac_check -j apache

iptables -t mangle -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j proxy_mac_check

iptables -t nat -A PREROUTING -m mark --mark 99 -j DNAT --to-destination $BOX_IP
iptables -t nat -A PREROUTING -m mark --mark 98 -j DNAT --to-destination $BOX_IP:3128
    
por 30.04.2013 / 13:42