-
Não cara...
Quando eu disse que as regras estavam se sobrepondo, eu quis dizer que uma regra está anulando a outra.
Exemplo, você colocou no seu script a seguinte regra:
# accept from desired ips 192.168.4.0 subnet
-A INPUT -m iprange --src-range 192.168.4.1-192.168.4.7 -j ACCEPT
E mais abaixo você colocou:
-t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
Veja que essa segunda regra nunca será avaliada pois os pacotes que chegarem com origem de 192.168.4.2 já terão sido aceitos pela regra mais acima.
Outra coisa, se você está usando uma política restritiva (DROP em INPUT e FORWARD), você não precisa ficar filtrando tráfego que você não quer. Então, a regra a seguir também é desnecessária:
# drop remaining ips from 192.168.4.0 subnet
-A INPUT -m iprange --src-range 192.168.4.8-192.168.4.14 -j DROP
Por isso que eu falei sobre o artigo. Ele lhe ajudará a ver esses pequenos problemas. Mas com o tempo você vai pegar o jeito. Esse negócio de iptables é muito de prática.
-
Certo, eu li e reli mais algumas vezes, removi as regras que você comentou e tentei avançar mais um pouco, agora minha dificuldade esta em isolar a subrede 192.168.32.0 das outras e dar acesso somente a internet:
#!/bin/sh
iptables-restore <<-EOF;
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# firewall start
-F
-X
-t nat -F
-t nat -X
-t mangle -F
-t mangle -X
-t filter -F
-t filter -X
# loopback
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Allow Related/Established
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# tie mac to ip 192.168.4.0 subnet
-t filter -A FORWARD -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
-t filter -A FORWARD -d 192.168.4.2 -j ACCEPT
-t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
# give access to shares and email 192.168.8.0 subnet
# doesn't use email
-A INPUT -p tcp -s 192.168.8.2 -m multiport --dports 139,443,445,3128 -j ACCEPT
-A INPUT -p udp -s 192.168.8.2 -m multiport --dports 137:138 -j ACCEPT
# use email
-A INPUT -p tcp -s 192.168.8.3 -m multiport --dports 110,139,443,445,587,3128 -j ACCEPT
-A INPUT -p udp -s 192.168.8.3 -m multiport --dports 137:138 -j ACCEPT
# only internet 192.168.32.0 subnet
# 192.168.75.0 subnet
-t filter -A FORWARD -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
-t filter -A FORWARD -d 192.168.75.2 -j ACCEPT
-t filter -A INPUT -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
COMMIT
EOF
-
Bom, aqui uma versão mais atualizada, porque andei dando uma mexida, acho que da minha lista de coisas falta achar um jeito pra filtrar sites (estou usando o dnsmasq então pensei em usar ele para filtrar os dominios pelo menos), os messengers da vida (windows live messenger, yahoo messenger, etc), os torrents, o lugar correto para colocar a regra do masquerade e uma regra para utilizar o squid sem precisar configurar cada cliente. O que voce acha?
Uma dúvida: -t filter -A INPUT é o mesmo que -A INPUT? Digo, o -t filter é necessario ou "facultativo"?
192.168.4.0:
- bloquear ips remanescentes
- amarrar ip ao mac
192.168.8.0:
- bloquear acesso a sites (orkut, hotmail, yahoo, terra, uol, gmail), msn, torrents
- liberar acesso aos compartilhamentos e email nos micros que possuem email somente
192.168.32.0:
- bloquear ips remanescentes e acesso aos compartilhamentos
- liberar somente internet
- amarrar ip ao mac
192.168.75.0:
- bloquear ips remanescentes
- amarrar ip ao mac
#!/bin/sh
iptables-restore <<-EOF;
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# inicio do firewall
-F
-X
-t nat -F
-t nat -X
-t mangle -F
-t mangle -X
-t filter -F
-t filter -X
# libera o loopback
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Dropa pacotes invalidos
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Permite Related/Established
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Amarra ips da subrede 192.168.4.0 ao mac correspondente
-t filter -A FORWARD -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
-t filter -A FORWARD -d 192.168.4.2 -j ACCEPT
-t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
# Aceita conexoes ssh somente dos ips/mac que eu confio
-A INPUT -p tcp -s 192.168.4.3 -m mac --mac-source 44:55:66:77:88:99 --dport 22 -j ACCEPT
-A INPUT -p tcp -m mac --mac-source 99:00:11:22:33:00 --dport 22 -j ACCEPT
# Da acesso aos compartilhamentos e a email para a subrede 192.168.8.0
# Os que não possuem email
-A INPUT -p tcp -s 192.168.8.2 -m multiport --dports 139,443,445,3128 -j ACCEPT
-A INPUT -p udp -s 192.168.8.2 -m multiport --dports 137:138 -j ACCEPT
# Os que possuem email
-A INPUT -p tcp -s 192.168.8.3 -m multiport --dports 110,139,443,445,587,3128 -j ACCEPT
-A INPUT -p udp -s 192.168.8.3 -m multiport --dports 137:138 -j ACCEPT
# Apenas internet para a subrede 192.168.32.0
# Rejeita pacotes vindos da subrede 192.168.32.0 e indo para as outras subredes
-A FORWARD -i eth0.4 -o eth0.2 -j REJECT
-A FORWARD -i eth0.4 -o eth0.3 -j REJECT
-A FORWARD -i eth0.4 -o eth0.5 -j REJECT
# Rejeita pacotes vindos de outras subredes para 192.68.32.0
-A FORWARD -i eth0.2 -o eth0.4 -j REJECT
-A FORWARD -i eth0.3 -o eth0.4 -j REJECT
-A FORWARD -i eth0.5 -o eth0.4 -j REJECT
# Amarra ip da subrede 192.168.32.0 ao mac correspondente
-t filter -A FORWARD -s 192.168.32.2 -m mac --mac-source 22:33:44:55:66:77 -j ACCEPT
-t filter -A FORWARD -d 192.168.32.2 -j ACCEPT
-t filter -A INPUT -s 192.168.32.2 -m mac --mac-source 22:33:44:55:66:77 -j ACCEPT
# Amarra ip da subrede 192.168.75.0 ao mac correspondente
-t filter -A FORWARD -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
-t filter -A FORWARD -d 192.168.75.2 -j ACCEPT
-t filter -A INPUT -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
COMMIT
EOF
-
Bom, acredito que terminei meu script, só ia pedir para checar se a regra "-A FORWARD -d 192.168.8.0/24 -j ACCEPT" está correta ou está dando margem para fugirem dos bloqueios:
#!/sbin/iptables-restore
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# accept dns requests for subnet dns only
-A PREROUTING -s 192.168.8.0/24 -i eth0.3 -p udp --dport 53 -j REDIRECT
-A PREROUTING -s 192.168.8.0/24 -i eth0.3 -p tcp --dport 53 -j REDIRECT
# internet
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# loopback
-A INPUT -i lo -j ACCEPT
# Allow Related/Established
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A FORWARD -m conntrack --ctstate INVALID -j DROP
# DHCP for subnets and internet
-A INPUT -i eth1 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
-A INPUT -i eth0.2 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
-A INPUT -i eth0.3 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
-A INPUT -i eth0.4 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
-A INPUT -i eth0.5 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
# only internet for 192.168.32.0 subnet
-A FORWARD -m condition --condition allow -s 192.168.32.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -i eth0.4 -o eth1 -j ACCEPT
-A FORWARD -m time --timestart 12:00 --timestop 13:30 --weekdays Mon,Tue,Wed,Thu,Fri -s 192.168.32.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -i eth0.4 -o eth1 -j ACCEPT
-A FORWARD -o eth0.4 -j DROP
-A FORWARD -i eth0.4 -j DROP
# tie mac to ip 192.168.4.0 subnet
-A INPUT -s 192.168.4.2 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
-A FORWARD -s 192.168.4.2 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
-A INPUT -s 192.168.4.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
-A FORWARD -s 192.168.4.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
-A FORWARD -d 192.168.4.2 -j ACCEPT
# accept ssh connection from only my trusted ips/macs
-A INPUT -p tcp -s 192.168.4.3 -m mac --mac-source 44:55:66:77:88:99 --dport 22 -j ACCEPT
#-A INPUT -p tcp --dport 22 -j ACCEPT
# give access to shares and email 192.168.8.0 subnet
# dns
-A INPUT -s 192.168.8.0/24 -i eth0.3 -p tcp --dport 53 -j ACCEPT
-A INPUT -s 192.168.8.0/24 -i eth0.3 -p udp --dport 53 -j ACCEPT
# doesn't use email
-A FORWARD -p tcp -s 192.168.8.2 -m multiport --dports 80,139,443,445 -j ACCEPT
-A FORWARD -p udp -s 192.168.8.2 -m multiport --dports 137:138 -j ACCEPT
# use email
-A FORWARD -p tcp -s 192.168.8.3 -m multiport --dports 80,110,139,443,445,587 -j ACCEPT
-A FORWARD -p udp -s 192.168.8.3 -m multiport --dports 137:138 -j ACCEPT
-A FORWARD -d 192.168.8.0/24 -j ACCEPT
# tie mac to ip 192.168.75.0 subnet
-A INPUT -s 192.168.75.3 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
-A FORWARD -s 192.168.75.3 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
-A INPUT -s 192.168.75.3 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
-A FORWARD -s 192.168.75.3 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
-A FORWARD -d 192.168.75.3 -j ACCEPT
COMMIT
-