Caro Colega, você pode amarrar o ip ao mac do cliente usando iptables, basta criar uma lista com as macs e os ips referentes, abaixo vai um script que uso aqui para fazer o esquema.Citação:
Postado originalmente por Anonymous
FIREWALL
-----------------------------------------------------------------------------------
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
#Usuario IP Atorizados a Acessar Internet
## Carregando modulos
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ip_nat_irc
modprobe ip_tables
modprobe ipt_state
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ipt_limit
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_mac
IPT=iptables
PROGRAMA=/etc/firewall
NET_IFACE=eth0
LAN_IFACE=eth1
MACLIST=/etc/maclist
echo 1 > /proc/sys/net/ipv4/ip_forward
case $1 in
start)
$IPT -X
$IPT -F
$IPT -t nat -F
$IPT -t nat -X
$IPT -t filter -P FORWARD DROP
for i in `cat $MACLIST`; do
STATUS=`echo $i | cut -d ';' -f 1`
IPSOURCE=`echo $i | cut -d ';' -f 3`
MACSOURCE=`echo $i | cut -d ';' -f 2`
#Se status = a então eu libera a conexao
if [ $STATUS = "a" ]; then
$IPT -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
$IPT -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j ACCEPT
#$IPT -t nat -A POSTROUTING -s $IPSOURCE -o $NET_IFACE -j MASQUERADE
$IPT -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
$IPT -t filter -A OUTPUT -s $IPSOURCE -d 0/0 -j ACCEPT
$IPT -t nat -A PREROUTING -s $IPSOURCE -m mac --mac-source $MACSOURCE -p tcp --dport 80 -j REDIRECT --to-port 8080
# Se for = b então bloqueia o MAC
else
$IPT -t filter -A FORWARD -m mac --mac-source $MACSOURCE -j DROP
$IPT -t filter -A INPUT -m mac --mac-source $MACSOURCE -j DROP
$IPT -t filter -A OUTPUT -m mac --mac-source $MACSOURCE -j DROP
fi
done
###############
## Proteção ###
###############
#Acabando com sessoes mortas
#$IPT -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
#--log-level DEBUG --log-prefix 'IPT INPUT packet died: '
#Evitando syn-floods
#$IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#Travando pings da morte
#$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#Bad TCP packets
#$IPT -N bad_tcp_packets
#$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
#--log-prefix 'New not syn:'
#$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
##Vamos evitar scans do tipo "porta destino = porta origem"
#for i in `netstat -na|grep '*'|grep tcp|tr -s " "|cut -d " " -f 4|tr -s ":" " "|
#awk '{print $NF}'|sort|uniq`
#do
# $IPT -A INPUT -p tcp --sport $i --dport $i -j LOG --log-level DEBUG --lo
#g-prefix 'IPT src port eq dst port: '
# $IPT -A INPUT -p tcp --sport $i --dport $i -j DROP
#done
#Bloqueio de spywares
#for SPY in `cat $PROGRAMA/bloqueios/*|grep -v ^#|grep -v ^$|cut -d : -f1`
#do
# $IPT -A INPUT -s $SPY -j DROP >/dev/null 2>/dev/null
#done
#matando P2P come-banda
#iMesh
#$IPT -A FORWARD -d 216.35.208.0/24 -j REJECT
##BearShare
#$IPT -A FORWARD -p TCP --dport 6346 -j REJECT
#ToadNode
#$IPT -A FORWARD -p TCP --dport 6346 -j REJECT
#WinMX
#$IPT -A FORWARD -d 209.61.186.0/24 -j REJECT
#$IPT -A FORWARD -d 64.49.201.0/24 -j REJECT
#Napigator
#$IPT -A FORWARD -d 209.25.178.0/24 -j REJECT
#Morpheus
$IPT -A FORWARD -d 206.142.53.0/24 -j REJECT
$IPT -A FORWARD -p TCP --dport 1214 -j REJECT
#KaZaA
# $IPT -A FORWARD -d 213.248.112.0/24 -j REJECT
# $IPT -A FORWARD -p TCP --dport 1214 -j REJECT
# for IP in `cat /$PROGRAMA/bloqueios/ip-kazaa-10.txt`
# do
# $IPT -A FORWARD -i $NET_IFACE -d $IP -j DROP
# done
#Limewire
$IPT -A FORWARD -p TCP --dport 6346 -j REJECT
#Audiogalaxy
$IPT -A FORWARD -d 64.245.58.0/23 -j REJECT
#GNUTella
$IPT -A FORWARD -p tcp --dport 6346 -j REJECT
#eDonkey
$IPT -A FORWARD -p tcp --dport 4661:4662 -j REJECT
$IPT -A FORWARD -p udp --dport 4665 -j REJECT
## Bloqueio Triono
$IPT -A INPUT -p TCP -s 0/0 --dport 27444 -j DROP
$IPT -A INPUT -p TCP -s 0/0 --dport 31335 -j DROP
## Proteção contra SYN-FLOOD
#$IPT -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
#Contra Port scanners avancados (nmap)
#$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
#$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# Log a portas proibidas e alguns backdoors
#Porta FTP
#$IPT -A INPUT -p tcp --dport 21 -j LOG --log-prefix "Serviço: FTP"
#Porta Wincrash
#$IPT -A INPUT -p tcp --dport 5042 -j LOG --log-prefix "Serviço: Wincrash"
#Portas BackOrifice
#$IPT -A INPUT -p tcp --dport 12345 -j LOG --log-prefix "Serviço: BackOrifice"
## Serviços Diversos
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 113 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 113 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 520 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 520 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 500 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 500 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 1001 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 1001 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 1002 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 1002 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 68 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 68 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 67 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 67 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 161 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 161 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 123 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 123 -j DROP
#$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 20 -j DROP
#$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 20 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 37 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 37 -j DROP
$IPT -A INPUT -p TCP -s 0/0 -d 0/0 --dport 775 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 775 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 23 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 113 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 113 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 520 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 520 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 500 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 500 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 1001 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 1001 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 1002 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 1002 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 68 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 68 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 67 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 67 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 161 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 161 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 123 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 20 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 20 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 37 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 37 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 775 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 775 -j DROP
$IPT -A OUTPUT -p TCP -s 0/0 -d 0/0 --dport 23 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 23 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 67 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 67 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 137 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 137 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 138 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 138 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 161 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 161 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 1025 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 1025 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 1155 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 1155 -j DROP
$IPT -A INPUT -p UDP -s 0/0 -d 0/0 --dport 3130 -j DROP
$IPT -A OUTPUT -p UDP -s 0/0 -d 0/0 --dport 3130 -j DROP
#
echo "FIREWALL ATIVADO SISTEMA PREPARADO"
;;
stop)
$IPT -X
$IPT -F
$IPT -Z
$IPT -t nat -F
$IPT -t nat -X
#$IPT -t filter -P FORWARD ACCEPT
echo "FIREWALL DESCARREGADO SISTEMA LIBERADO"
;;
restart)
$PROGRAMA stop
$PROGRAMA start
;;
esac
ARQUIVO DAS MACS (maclist)
-------------------------------------------------------------------------------------
a;00:E0:06:09:55:66;10.1.1.2;user1
a;00:80:C8:00:17:70;10.1.1.4;user2
a;00:80:C8:00:17:32;10.1.1.3;user3
obs: SE O CARA MUDAR O IP É PAU NA CERTA, VAI PARAR DE FUNCIONAR.