jjleal
(usa Debian)
Enviado em 19/11/2017 - 17:02h
Olá pessoal! Peço desculpas por erros que venha a ter nesta dúvida, sou novo no VOL.
Eu estou criando UM de poucos Firewall(s) que já montei e estou com uma dificuldade em liberar poucos sites para uma determinada faixa de IPs. Eu pesquisei vários artigos aqui e os colaboradores responderam ser melhor usar com Squid o que eu concordo se as regras de negócio da empresa que usa este servidor forem muitas, então, se alguém puder me ajudar seria muito bom e eu ficaria muito agradecido.
Vou postar o Firewall que montei abaixo e comentar no meio do código onde preciso criar/mudar as regras específicas e logo abaixo do script está meu problema.
#!/bin/bash
#
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: networking
# Required-Stop:
# Should-Start: S
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Firewall
# Description: Firewall
### END INIT INFO
### Carregando os modulos ###
modprobe ip_tables
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_state
modprobe ipt_MASQUERADE
modprobe ipt_string
### Binario do comando ###
IPT=$(which iptables)
### Variaveis ###
ALL="0:65535"
PA="1024:65535"
IFINTERNET="eno1"
LO="127.0.0.1"
FW="192.168.20.254"
#WAN="192.168.1.254"
WAN=$(ifconfig eno1 | grep "inet" | awk -F" " '{print $2}' | head -1)
LAN="192.168.20.0/24"
CLIENTES="10.1.1.0/24"
case $1 in
stop)
echo ""
echo "Parando Firewall..."
echo ""
### Inicio das Regras ###
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
#$IPT -F OUTPUT ACCEPT
#$IPT -F INPUT ACCEPT
#$IPT -F FORWARD ACCEPT
### Limpando Regras ###
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
;;
start)
echo ""
echo "Iniciando Firewall..."
echo ""
### Regras Padrao ###
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
### Ignorar pings ###
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPT -A INPUT -p icmp -j DROP
### Protecao conta IP Spoofing
echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
#for i in /proc/sys/net/ipv4/conf/*/rp_filter
#do
# echo "1" > $i | > /dev/null
#done
### Protecao conta Synflood ###
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
### Bloqueia Traceroute
$IPT -A INPUT -p udp --dport 33435:33525 -j DROP
### Habilitar passagem de pacotes ###
echo "1" > /proc/sys/net/ipv4/ip_forward
### Permite pingar WAN ###
$IPT -A INPUT -p icmp -d $WAN -j ACCEPT
$IPT -A OUTPUT -p icmp -s $WAN -j ACCEPT
### Permite passagem de pacotes lo ###
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
### Permite a LAN pingar FW ###
$IPT -A INPUT -p icmp -s $LAN -d $FW -j ACCEPT
$IPT -A OUTPUT -p icmp -s $FW -d $LAN -j ACCEPT
### Permite FW pingar por nomes ###
$IPT -A INPUT -p udp --sport 53 -s 0/0 -d $WAN --dport $PA -j ACCEPT
$IPT -A OUTPUT -p udp --sport $PA -s $WAN -d 0/0 --dport 53 -j ACCEPT
### Permite passagem HTTP ###
$IPT -A INPUT -p tcp --sport 80 -s 0/0 -d 0/0 --dport $PA -j ACCEPT
$IPT -A OUTPUT -p tcp --sport $PA -s 0/0 -d 0/0 --dport 80 -j ACCEPT
### Liberando toda a internet para IPS registrados no DHCP com MAC ###
IPSL="/root/IPS-Liberados.txt"
for LIB in `cat $IPSL` ; do
echo -n "Acesso total a internet ao cliente: "
CLIENTEL=`echo $LIB | cut -d"|" -f1`
IPL=`echo $LIB | cut -d"|" -f2`
MACL=`echo $LIB | cut -d"|" -f3`
$IPT -t filter -A FORWARD -d 0/0 -s $IPL -m mac --mac-source $MACL -j ACCEPT
$IPT -t filter -A FORWARD -d $IPL -s 0/0 -j ACCEPT
$IPT -t filter -A INPUT -s 0/0 -d $IPL -m mac --mac-source $MACL -j ACCEPT
$IPT -t filter -A OUTPUT -s $IPL -d 0/0 -j ACCEPT
$IPT -t nat -A POSTROUTING -o eno1 -s $IPL -j MASQUERADE
echo $CLIENTEL
done
### Permite compartilhamento internet ###
$IPT -t nat -A POSTROUTING -o eno1 -s $CLIENTES -j MASQUERADE
### Permite a passagem de ping LAN a INTERNET ###
$IPT -A FORWARD -p icmp -d $LAN -j ACCEPT
$IPT -A FORWARD -p icmp -s $LAN -j ACCEPT
### Permite a resoluçao de nomes do mundo para a rede ###
$IPT -A INPUT -p udp --sport $PA -s 0/0 -d 0/0 --dport 53 -j ACCEPT
$IPT -A OUTPUT -p udp --sport 53 -s 0/0 -d 0/0 --dport $PA -j ACCEPT
$IPT -A FORWARD -p udp --sport 53 -s 0/0 -d $LAN --dport $PA -j ACCEPT
$IPT -A FORWARD -p udp --sport $PA -s $LAN -d 0/0 --dport 53 -j ACCEPT
$IPT -A FORWARD -p udp --sport 53 -s 0/0 -d $CLIENTES --dport $PA -j ACCEPT
$IPT -A FORWARD -p udp --sport $PA -s $CLIENTES -d 0/0 --dport 53 -j ACCEPT
### Permite a passagem de protocolos comuns para LAN ###
for serv_ext in 110 143 993 587 995 21 20 5938 5939
do
$IPT -A FORWARD -p tcp --sport $serv_ext -s 0/0 -d $IPL --dport $PA -j ACCEPT
$IPT -A FORWARD -p tcp --sport $PA -s $IPL -d 0/0 --dport $serv_ext -j ACCEPT
done
### Permite a passagem de protocolos comuns para CLIENTES ###
for serv_ext in 80 443 110 143 993 587 995
do
$IPT -A FORWARD -p tcp --sport $serv_ext -s 0/0 -d $CLIENTES --dport $PA -j ACCEPT
$IPT -A FORWARD -p tcp --sport $PA -s $CLIENTES -d 0/0 --dport $serv_ext -j ACCEPT
done
### Bloqueio acesso entre redes ###
$IPT -A INPUT -s $LAN -d $CLIENTES -j DROP
$IPT -A OUTPUT -s $CLIENTES -d $LAN -j DROP
$IPT -A INPUT -s $CLIENTES -d $LAN -j DROP
$IPT -A OUTPUT -s $LAN -d $CLIENTES -j DROP
$IPT -A FORWARD -s $LAN -d $CLIENTES -j DROP
$IPT -A FORWARD -s $CLIENTES -d $LAN -j DROP
### Permite FW e WAN receber SSH ###
$IPT -A INPUT -p tcp --sport $PA -s $LAN -d $FW --dport 51000 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 51000 -s $FW -d $LAN --dport $PA -j ACCEPT
$IPT -A INPUT -p tcp --sport $PA -s 0/0 -d $WAN --dport 51000 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 51000 -s $WAN -d 0/0 --dport $PA -j ACCEPT
### Habilita a passagem de pacotes nas portas 137:139 SAMBA ###
#$IPT -A INPUT -s 192.168.60.0/24 -p tcp --dport 137:139 -j ACCEPT
#IPT -A OUTPUT -s 192.168.60.0/24 -p tcp --dport 137:139 -j ACCEPT
#IPT -A INPUT -s 192.168.60.0/24 -p udp --dport 137:139 -j ACCEPT
#IPT -A OUTPUT -s 192.168.60.0/24 -p udp --dport 137:139 -j ACCEPT
#IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
### Bloqueia acesso por string do pacote ###
#$IPT -A INPUT -s $IPL -m string --string "facebook" --algo bm -j DROP
### Bloqueio de pacotes NEW e INVALID vindo da internet
#$IPT -A INPUT -m state --state NEW -i $IFINTERNET -j DROP
$IPT -A INPUT -m state --state INVALID -i $IFINTERNET -j DROP
### Permite pacotes Estabelecidos e relacionados
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#### ---- INICIO - ESTE BLOCO DE CÓDIGO ESTÁ MINHA DÚVIDA/PROBLEMA ---- ####
### Liberando apenas alguns site ###
IPSB="/root/IPS-Bloqueados.txt"
SITESLIB="/root/SITES-Liberados.txt"
while read LINHA ; do
SITES=`echo $LINHA`
for BLO in `cat $IPSB` ; do
echo -n "Liberando" $LINHA "ao cliente: "
CLIENTEB=`echo $BLO | cut -d"|" -f1`
IPB=`echo $BLO | cut -d"|" -f2`
MACB=`echo $BLO | cut -d"|" -f3`
$IPT -t nat -A PREROUTING -i eno1 -s $IPB -p tcp --dport 80 -j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eno1 -s $IPB -p tcp --dport 443 -j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i eno1 -p tcp --dport 80 -s $IPB -d $LINHA -j RETURN
$IPT -t nat -A PREROUTING -i eno1 -p tcp --dport 443 -s $IPB -d $LINHA -j RETURN
$IPT -t nat -A PREROUTING -i eno1 -s $IPB -d $LINHA -j ACCEPT
for PORTAL in 80 443 5938
do
$IPT -A INPUT -p tcp --sport $PA -s $IPB -d $LINHA --dport $PORTAL -j ACCEPT
$IPT -A OUTPUT -p tcp --sport $PORTAL -s $LINHA -d $IPB --dport $PA -j ACCEPT
$IPT -A INPUT -p udp --sport $PA -s $IPB -d $LINHA --dport $PORTAL -j ACCEPT
$IPT -A OUTPUT -p udp --sport $PORTAL -s $LINHA -d $IPB --dport $PA -j ACCEPT
$IPT -A INPUT -p tcp -m string --algo bm --string $LINHA -j ACCEPT
$IPT -A OUTPUT -p tcp -m string --algo bm --string $LINHA -j ACCEPT
$IPT -A FORWARD -p tcp -m string --algo bm --string $LINHA -j ACCEPT
$IPT -A FORWARD -p tcp --sport $PORTAL -s $LINHA -d $IPB --dport $PA -j ACCEPT
$IPT -A FORWARD -p tcp --sport $PA -s $IPB -d $LINHA --dport $PORTAL -j ACCEPT
$IPT -A FORWARD -p udp --sport $PORTAL -s $LINHA -d $IPB --dport $PA -j ACCEPT
$IPT -A FORWARD -p udp --sport $PA -s $IPB -d $LINHA --dport $PORTAL -j ACCEPT
done
$IPT -t filter -A FORWARD -d $WAN -s $IPB -m mac --mac-source $MACB -j ACCEPT
$IPT -t filter -A FORWARD -d $IPB -s $WAN -j ACCEPT
$IPT -t filter -A INPUT -s $IPB -d $WAN -m mac --mac-source $MACB -j ACCEPT
$IPT -A INPUT -i eno1 -s $IPB -m state --state NEW -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -o eno1 -s $IPB -j MASQUERADE
echo $CLIENTEB
done
done < $SITESLIB
#### ---- FIM DO BLOCO COM DÚVIDA ---- ####
;;
restart)
$0 stop
sleep 0.5
$0 start
;;
*)
echo 'POR FAVOR USE "stop|start|restart"'
;;
esac
Tenho um servidor DHCP configurado amarrando MACs e IPs por placa e qualquer dispositivo novo não recebe IP se não estiver registrado.
Eu não tenho o Squid Proxy instalado (quero evitar o uso do proxy) mas estou direcionando o tráfego web para a porta 3128 de uma faixa específica de IPs internos liberando o sistema web da empresa que está localizado na nuvem. Estou fazendo um RETURN quando o destino é um site que está liberado/salvo em um arquivo TXT, que no caso o próprio sistema em nuvem da empresa, no entanto, precisa vir do IP com o MAC específico caso contrário é DROP.
MEU PROBLEMA:
Não estou conseguindo acessar o teamviewer e whatsapp usando esse bloco de código, então, eu preciso liberar apenas os seguintes sites para essa faixa de IPs.
teamviewer.com = Para conseguir acesso remoto na estação
web.whatsapp.com = Conversar com clientes
Mesmo liberando as portas e adicionando os sites no arquivo TXT de sites liberados (linha por linha) não consigo liberar e ter acesso nas estações específicas estes sites e serviços.
OBS: O sistema Web em nuvem da empresa não é HTTPS e esta sendo acessado SEM problemas nestes IPs "Bloqueados".