ConfigurandoFirewall
Configurando um Firewall no Linux Ubuntu
Conteúdo |
Introdução
Navegar na internet pode ser muito perigoso. Vírus, programas maliciosos, ou scripts feitos por crackers. Vários são os meios que o seu computador pode ser danificado.
Então para impedir (ou pelo menos dificultar) que esses ataques ocorram na sua máquina, vamos usar o iptables para configurar um firewall no Linux Ubuntu.
por Cristiano Meira Magalhães
Estudo de caso real
O objetivo desse tutorial é construir um script para configurar o software iptables, que irá montar um firewall.
A nossa necessidade parte de um estudo real em uma pequena empresa.
Essa empresa contém 4 computadores:
- Escritório (localhost) - Secretária (192.168.0.5) - Caixa - Balcão (192.168.0.7)
Necessidades:
- O computador do escritório deve usar serviços de e-mail do Gmail, e comunicadores YahooMesseger, MSN, Jabber e ICQ.
- O computador da secretária deve apenas usar a web, comunicadores Jabber e Skype e ter acesso ao e-mail.
- O computador do caixa deve apenas ter acesso aos serviços da web.
O computador do Escritório é o que serve acesso à internet e ele está ligado aos demais através de uma rede interna.
O Script
1) Configure o seu Linux para fazer NAT.
1.1) Log como root
$ sudo su -
1.2) Edite o arquivo /proc/sys/net/ipv4/ip_forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward
1.3) Edite a variável no arquivo /etc/network/options
$ sudo gedit /etc/network/options faça: ip_forward=yes
2) Copie e cole o conteúdo do quadro abaixo em um novo documento de texto e salve como "iptstart.sh"
IP_LOCAL=172.16.23.22
IP_DNS=172.16.23.21
apagueTabelas () {
echo
## ----------------------------------
## Tabelas FILTER e NAT
## ----------------------------------
echo \ \ -\>IPTables: Apagando regras em tabelas FILTER e NAT
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
}
abraTudo () {
apagueTabelas
echo
## ----------------------------------
## Configurando políticas
## ----------------------------------
echo \ \ -\>IPTables: Abrindo todas as saídas e entradas do sistema
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
echo
## ----------------------------------
## Configurando NAT
## ----------------------------------
echo \ \ -\>IPTables: Configurando acesso da rede interna para a Internet
sudo iptables -t nat -A POSTROUTING -s 192.168.0.5 -o wlan0 -j MASQUERADE
}
fecheTudo() {
apagueTabelas
echo
## ----------------------------------
## Configurando políticas
## ----------------------------------
echo \ \ -\>IPTables: Trancando todas as saídas e entradas do sistema
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
}
construaModoSeguro () {
apagueTabelas
echo
## ----------------------------------
## Configurando políticas
## ----------------------------------
echo \ \ -\>IPTables: Configurando políticas para valores seguros
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
echo
## ----------------------------------
## Configurando INPUT
## ----------------------------------
echo \ \ -\>IPTables: Liberando que serviços e máquinas comuniquem com vc
## Permite entradas para uma faixa de endereços da rede local
sudo iptables -A INPUT -p tcp -s 192.168.0.0/255.255.255.0 -j ACCEPT
## Permite entradas na porta 80 (Apache)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Permite que localhost receba dados para localhost
sudo iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
# Permite que entre somente pacotes de uma conexão já estabelecida
sudo iptables -A INPUT -p tcp --syn -j DROP
echo
## ----------------------------------
## Configurando OUTPUT
## ----------------------------------
echo \ \ -\>IPTables: Liberando acesso de programas e serviços para o uso da Internet
## Permite saídas para uma faixa de endereços da rede local
sudo iptables -A OUTPUT -p tcp -d 192.168.0.0/255.255.255.0 -j ACCEPT
# Libera uso de serviços que estejam escutando localhost, como o CURPS e o POSTFIX
sudo iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT
# Libera a consulta ao servidor DNS
sudo iptables -A OUTPUT -s $IP_LOCAL -d $IP_DNS -j ACCEPT
## Libera resposta para requisições web vindos de fora (Apache)
sudo iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
# Libera consulta aos serviços da web (HTTP)
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 80 -j ACCEPT
# Libera consulta aos serviços da web (HTTPS, MSN)
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 443 -j ACCEPT
# Libera consulta a caixa postal do e-mail (SMTP)
#sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 25 -j ACCEPT
# Libera envio de e-mails (POP3)
#sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 110 -j ACCEPT
# Libera consulta a caixa postal do GMail
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 995 -j ACCEPT
# Libera envio de e-mail do GMail
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 465 -j ACCEPT
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 587 -j ACCEPT
# Libera o uso da rede Jabber
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 5222 -j ACCEPT
# Libera o uso da rede MSN
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 1863 -j ACCEPT
# Libera o uso do IRC
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 6667 -j ACCEPT
# Libera o uso do ICQ
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 5190 -j ACCEPT
# Libera o uso do YahooMesseger
sudo iptables -A OUTPUT -s $IP_LOCAL -p tcp --dport 5050 -j ACCEPT
echo
## ----------------------------------
## Configurando FORWARD
## ----------------------------------
echo \ \ -\>IPTables: Configurando acesso de programas e servicos da rede interna a Internet
## Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
## Contra Ping of Death
sudo iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
## Contra Ping
sudo iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
## Contra port scanners avançados (nmap)
sudo iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
## Contra pacotes danificados (NÃO FUNCIONA?)
#sudo iptables -A FORWARD -m unclean -j DROP
## Outros ataques
#sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#sudo iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
## Ignora pings
#sudo echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Libera consulta aos serviços da web (Saída e Entrada)
sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 80 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --sport 80 -j ACCEPT
#Libera o uso de serviços da web (HTTPS, MSN)
sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 443 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --dport 443 -j ACCEPT
#libera o uso de serviços do MSN
sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 1863 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --dport 1863 -j ACCEPT
# Libera consulta a serviços de e-mail (Saída e Entrada)
sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 25 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --sport 25 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 110 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --sport 110 -j ACCEPT
# Libera a consulta ao servidor DNS (Saída e Entrada)
sudo iptables -A FORWARD -s 192.168.0.5 -d $IP_DNS -j ACCEPT
sudo iptables -A FORWARD -s $IP_DNS -d 192.168.0.5 -j ACCEPT
# Libera consulta a serviços do Skype
#sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 55017 -j ACCEPT
#sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --sport 55017 -j ACCEPT
# Libera consulta a serviços do Jabber
sudo iptables -A FORWARD -s 192.168.0.5 -p tcp --dport 5222 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.5 -p tcp --sport 5222 -j ACCEPT
# Libera consulta aos serviços da web (Saída e Entrada)
sudo iptables -A FORWARD -s 192.168.0.2 -p tcp --dport 80 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.2 -p tcp --sport 80 -j ACCEPT
#Libera o uso de serviços da web (HTTPS, MSN)
sudo iptables -A FORWARD -s 192.168.0.2 -p tcp --dport 443 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.2 -p tcp --dport 443 -j ACCEPT
# Libera consulta a serviços do Jabber
sudo iptables -A FORWARD -s 192.168.0.2 -p tcp --dport 5222 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.2 -p tcp --sport 5222 -j ACCEPT
# Libera consulta aos serviços da web (Saída e Entrada)
sudo iptables -A FORWARD -s 192.168.0.7 -p tcp --dport 80 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.7 -p tcp --sport 80 -j ACCEPT
#Libera o uso de serviços da web (HTTPS, MSN)
sudo iptables -A FORWARD -s 192.168.0.7 -p tcp --dport 443 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.7 -p tcp --dport 443 -j ACCEPT
# Libera consulta a serviços do Jabber
sudo iptables -A FORWARD -s 192.168.0.7 -p tcp --dport 5222 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.7 -p tcp --sport 5222 -j ACCEPT
echo
## ----------------------------------
## Configurando NAT
## ----------------------------------
echo \ \ -\>IPTables: Configurando acesso da rede interna para a Internet
sudo iptables -t nat -A POSTROUTING -s 192.168.0.5 -o wlan0 -j MASQUERADE
## ************************************
## * ATENÇÃO *
## ************************************
## 1 ) Log como root
## $ sudo su -
## 2 ) Edite o arquivo /proc/sys/net/ipv4/ip_forward
## echo 1 > /proc/sys/net/ipv4/ip_forward
## 3 ) Edite a variavel no arquivo /etc/network/options
## ip_forward=yes
## ************************************
}
echo Configurando iptables...
case "$1" in
abra)
echo -n "Iniciando montagem da pasta servidor:"
abraTudo
;;
feche)
echo -n "Desmontando a pasta servidor:"
fecheTudo
;;
seguro)
construaModoSeguro
;;
*)
exit 1
;;
esac
echo
echo Configuração de tabelas completa.
echo
exit 03) Modifique os endereços IPs do script já salvo conforme a configuração da sua rede.
4) Execute o script
Para abrir todas as portas:
$ iptstart.sh abra
Para fechar todas as portas:
$ iptstart.sh feche
Para configurar o seu firewall para permitir que somente saia e somente entre no seu computador aquilo que você realmente está usando e conhece.
$ iptstart.sh seguro
ConfigurandoFirewall (last edited 2011-09-19 23:18:22 by localhost)