# mkdir /etc/firewall && cd /etc/firewall
# pico portas_udp.txt
# dns
53
# pico portas_tcp.txt
# Ntp Date
119
123
563
# Squid
3128
# teamviewer
5938
1989
# ftp
21
20
# ssh
22
# telnet
23
# smtp
25
# pop3
110
143
# http
80
8080
# https
443
# dns
53
# Terminal Service
3389
# pico flags.txt
SYN,RST
SYN,FIN
SYN,PSH
SYN,URG
FIN,RST
FIN,URG,PSH
# pico ips_seguros.txt
Aqui você irá colocar os ips de onde você irá acessar os serviços, ips que serão liberados
# pico portas_adm.txt
Aqui a portas de serviços, ssh por exemplo
# pico ips_liberados_para_facebook.txt
Aqui os ips da sua rede que você irá liberar para acessar o facebook
Bem com nosso ambiente preparado vamos criar o script de firewall:
# pico /etc/init.d/Firewall
#!/bin/bash
## SCRIPT DE FIREWALL ##
## DECLARACAO DE VARIAVEIS ##
IPT=$(which iptables)
IP_LOCAL="192.168.0.1"
LO="127.0.0.1"
QQR_LUGAR="0/0"
PORTS_ALTAS="1024:65535"
REDE_LOCAL="192.168.0.0/24"
IFACE_LOCAL="eth0"
IFACE_EXTERNA="eth1"
## DECLARACAO DOS MODULOS ##
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_string
#---------------------------------------------------------------------
#Controle de facebook para os espertinhos que usam https
facebook ()
{
for LIBERADOS in $(cat /etc/firewall/ips_liberados_para_facebook.txt | grep -v ^#)
do
$IPT -A FORWARD -s $LIBERADOS -m string --algo bm --string "facebook.com" -j ACCEPT
$IPT -A FORWARD -s $REDE_LOCAL -m string --algo bm --string "facebook.com" -j ACCEPT
done
}
# Define as politicas como drop
politica_drop ()
{
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
}
# Limpa todas as regras
limpa_regras ()
{
echo "### ABRINDO O FIREWALL ###"
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}
# Compartilha a internet
compartilhando ()
{
echo "### COMPARTILHANDO ###"
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o $IFACE_EXTERNA -j MASQUERADE
}
#Define proxy transparente
proxy_transparent ()
{
$IPT -t nat -A PREROUTING -p tcp -i $IFACE_LOCAL -s $REDE_LOCAL --dport 80 -j REDIRECT --to-port 3128
$IPT -A INPUT -p tcp -i $IFACE_LOCAL -s $REDE_LOCAL --sport $PORTS_ALTAS --dport 3128 -j ACCEPT
$IPT -A INPUT -p tcp -i $IFACE_EXTERNA -s $QQR_LUGAR --dport 3128 -j DROP
}
# Libera loopback
loop_back ()
{
echo "### LIBERANDO O LOOP BACK ###"
$IPT -A INPUT -i lo -d $LO -j ACCEPT
$IPT -A OUTPUT -o lo -d $LO -j ACCEPT
}
# Aceita conexões já estabelecidas e relacionadas
estabiliza_input ()
{
echo "### ESTABILIZANDO CONEXOES DE INPUT ###"
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
}
# Aceita conexões já estabelecidas e relacionadas
estabiliza_output ()
{
echo "### ESTABILIZANDO CONEXOES DE OUTPUT ###"
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
}
# Aceita conexões já estabelecidas e relacionadas
estabiliza_forward ()
{
echo " ### ESTABILIZANDO CONEXOES DE FORWARD ### "
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
}
# Controla o tráfego icmp da rede
controle_de_icmp ()
{
echo " ### LIBERANDO ICMPS ###"
for TIPO in 0 3/0 3/1 3/2 3/3 3/4 4 5 11 12
do
$IPT -A INPUT -p icmp -s $QQR_LUGAR --icmp-type $TIPO -m limit --limit 1/s -j ACCEPT
done
$IPT -A OUTPUT -p icmp -d $QQR_LUGAR --icmp-type 8 -j ACCEPT
$IPT -A INPUT -p icmp -s $REDE_LOCAL --icmp-type 8 -m limit --limit 1/s -j ACCEPT
$IPT -A FORWARD -p icmp -s $REDE_LOCAL -d $QQR_LUGAR --icmp-type 8 -m limit --limit 1/s -j ACCEPT
}
# Aceita conexões de dhcp
controle_dhcp ()
{
for PROTO in tcp udp
do
$IPT -A INPUT -p $PROTO -i $IFACE_EXTERNA -s $QQR_LUGAR --sport 67 --dport 68 -j ACCEPT
done
for PROTO in tcp udp
do
$IPT -A OUTPUT -p $PROTO -o $IFACE_EXTERNA --sport 68 -d $QQR_LUGAR --dport 67 -j ACCEPT
done
for PROTO in tcp udp
do
$IPT -A INPUT -p $PROTO -i $IFACE_LOCAL -s $QQR_LUGAR --sport 68 --dport 67 -j ACCEPT
done
for PROTO in tcp udp
do
$IPT -A OUTPUT -p $PROTO -o $IFACE_LOCAL -s $IP_LOCAL --sport 67 -d $REDE_LOCAL --dport 68 -j ACCEPT
done
}
# Estabelece quais portas tcp serão liberadas para trafego
portas_tcp ()
{
echo "### LIBERANDO CONEXOES EM PORTAS TCP ###"
for PORTAS in $(cat /etc/firewall/portas_tcp.txt | grep -v ^#)
do
$IPT -A OUTPUT -p tcp -m state --state NEW --sport $PORTS_ALTAS -d $QQR_LUGAR --dport $PORTAS -j ACCEPT
$IPT -A FORWARD -p tcp -s $REDE_LOCAL --sport $PORTS_ALTAS -d $QQR_LUGAR --dport $PORTAS -j ACCEPT
done
}
# Estabelece quais portas udp serão liberadas para trafego
portas_udp ()
{
echo "### LIBERANDO CONEXOES EM PORTAS UDP ###"
for PORTAS in $(cat /etc/firewall/portas_udp.txt | grep -v ^#)
do
$IPT -A OUTPUT -p udp -m state --state NEW --sport $PORTS_ALTAS -d $QQR_LUGAR --dport $PORTAS -j ACCEPT
$IPT -A FORWARD -p udp -m state --state NEW -s $REDE_LOCAL --sport $PORTS_ALTAS -d $QQR_LUGAR --dport $PORTAS -j ACCEPT
done
}
# Libera portas se serviços para ips seguros
libera_pt_ip_seguros ()
{
echo "### ATIVANDO CONTROLE DE IPs REMOTO ###"
for IP in $(cat /etc/firewall/ips_seguros.txt | grep -v ^#)
do
for PORTAS in $(cat /etc/firewall/portas_adm.txt | grep -v ^#)
do
$IPT -A INPUT -p tcp -m state --state NEW -s $IP --sport $PORTS_ALTAS -d $IP_LOCAL --dport $PORTAS -j ACCEPT
done
done
for PORTAS in $(cat /etc/firewall/portas_adm.txt | grep -v ^#)
do
$IPT -A INPUT -p tcp -s $QQR_LUGAR --sport $PORTS_ALTAS -d $IP_LOCAL --dport $PORTAS -j REJECT --reject-with tcp-reset
done
}
# Bloqueia flags invalidas
flags_invalidas ()
{
echo "### BLOQUEANDO POSSIVEIS SCANNERS ###"
for FLAGS in $(cat /etc/firewall/flags.txt | grep -v ^#)
do
for CHAINS in INPUT FORWARD
do
$IPT -A $CHAINS -p tcp --tcp-flags $FLAGS $FLAGS -j LOG --log-prefix "POSSIVEL_SCANNER"
$IPT -A $CHAINS -i $IFACE_EXTERNA -p tcp ! -s $REDE_LOCAL --tcp-flags $FLAGS $FLAGS -j DROP
done
done
}
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#-----------------------------------------------------------------------
case $1 in
start)
compartilhando
proxy_transparent
politica_drop
loop_back
estabiliza_input
estabiliza_output
estabiliza_forward
controle_de_icmp
controle_dhcp
portas_tcp
portas_udp
libera_pt_ip_seguros
flags_invalidas
echo " ******* FIREWAL ATIVADO ******* "
;;
stop)
limpa_regras
echo " ******* FIREWALL DESATIVADO ******* "
;;
filter) $IPT -nL | more
;;
nat) $IPT -nL -t nat | more
;;
mangle) $IPT -nL -t mangle | more
;;
restart) $0 stop
$0 start
;;
*) echo "erro use $0 {start|stop|filter|nat|mangle|restart}"
exit 0
;;
esac
exit 1
Para que o script inicie no boot siga os passos:
# aptitude install rcconf
# rcconf
Marque a opção Firewall e de OK.
Agora para iniciar basta:
# /etc/init.d/Firewall start
cara eu coloco na lista de ips para acessar o facebook mas o mesmo não conecta
ResponderExcluir