#!/bin/bash
# description: Firewall do sistem (criado Giuliano)
IP_EXT="200.x.x.x"
IF_EXT="eth0"
IP_INT="192.168.0.1"
IF_INT="eth1"
REDE_INT="192.168.0.0/24"
BRO_INT="192.168.0.255"
# Ativa o Roteamento no Linux
echo 1 > /proc/sys/net/ipv4/ip_forward
# Zera as regras do Firewall
iptables -F
iptables -F -t nat
# Carrega os modulos do FTP.
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
##### Define as politicas padroes #####
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
####################### Liberando as portas que serao usadas ###################
# Bloqueia pacotes invalidos
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
# Permite respostas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Trafego da propria maquina
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -A INPUT -s $IP_INT -d $IP_INT -i $IF_INT -j ACCEPT
iptables -A INPUT -s $IP_EXT -d $IP_EXT -i $IF_EXT -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
iptables -A OUTPUT -s $IP_INT -d $IP_INT -o $IF_INT -j ACCEPT
iptables -A OUTPUT -s $IP_EXT -d $IP_EXT -o $IF_EXT -j ACCEPT
# Nega ping do mundo externo
iptables -A INPUT -p icmp --icmp-type echo-request -s ! $REDE_INT -i $IF_EXT -d $IP_EXT -j DROP
# Permite o resto do ICMP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -s $REDE_INT -i $IF_INT -o $IF_EXT -j ACCEPT
# DHCP Local
iptables -A INPUT -p udp -i $IF_INT --dport 67 -j ACCEPT
# DNS Local
iptables -A INPUT -p udp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -s $IP_EXT -o $IF_EXT --dport 53 -j ACCEPT
### Apache (HTTP) ###
# "Lan --> Apache Local (HTTP)" #
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_EXT --dport 80 -j ACCEPT
# "Lan --> Apache Local (HTTPS)" #
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_EXT --dport 443 -j ACCEPT
# "Mundo --> Apache Local (HTTP)" #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 80 -j ACCEPT
# "Mundo --> Apache Local (HTTPS)" #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 443 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 443 -j ACCEPT
# SAMBA
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 139 -j ACCEPT
iptables -A INPUT -p udp -s $REDE_INT -i $IF_INT -d $IP_INT -m multiport --dport 137,138 -j ACCEPT
iptables -A INPUT -p udp -s $BRO_INT -i $IF_INT -d $IP_INT -m multiport --dport 137,138 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_INT -o $IF_INT --dport 139 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 139 -j ACCEPT
iptables -A OUTPUT -p udp -s $IP_INT -o $IF_INT -m multiport --dport 137,138,139 -j ACCEPT
iptables -A OUTPUT -p udp -s $IP_EXT -o $IF_EXT -m multiport --dport 137,138,139 -j ACCEPT
# SQUID
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 3128 -j ACCEPT
### FTP ###
# Local #
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT -m multiport --dport 20,21 -j ACCEPT
# Mundo #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT -m multiport --dport 20,21 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT -m multiport --dport 20,21 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT -m multiport --dport 20,21 -j ACCEPT
### SSH ###
# Local #
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 7500 -j ACCEPT
# Mundo #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 7500 -j ACCEPT
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 9000 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 7500 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 9000 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 7500 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 9000 -j ACCEPT
### POP3 ###
# Local #
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 110 -j ACCEPT
# Mundo #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 110 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 110 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 110 -j ACCEPT
### SMTP ###
# Local #
iptables -A INPUT -p tcp -s $REDE_INT -i $IF_INT -d $IP_INT --dport 25 -j ACCEPT
# Mundo #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 25 -j ACCEPT
### Transferencia de DNS ###
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 53 -j ACCEPT
# SQL SERVER #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 1433 -j ACCEPT
iptables -A INPUT -p udp -i $IF_EXT -d $IP_EXT --dport 1433 -j ACCEPT
iptables -A INPUT -p udp -i $IF_EXT -d $IP_EXT --dport 1434 -j ACCEPT
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 156 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 1433 -j ACCEPT
iptables -A OUTPUT -p udp -s $IP_EXT -o $IF_EXT --dport 1433 -j ACCEPT
iptables -A OUTPUT -p udp -s $IP_EXT -o $IF_EXT --dport 1434 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 156 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 1433 -j ACCEPT
iptables -A FORWARD -p udp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 1433 -j ACCEPT
iptables -A FORWARD -p udp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 1434 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 3306 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 156 -j ACCEPT
# MSN Messenger #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 1863 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 1863 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 1863 -j ACCEPT
# MSN Messenger Comera Digital #
iptables -A INPUT -p tcp -i $IF_EXT -d $IP_EXT --dport 5100 -j ACCEPT
iptables -A OUTPUT -p tcp -s $IP_EXT -o $IF_EXT --dport 5100 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE_INT -i $IF_INT -o $IF_EXT --dport 5100 -j ACCEPT
# Faz Log do que sobrou.
iptables -A INPUT -j LOG --log-prefix "ENTRADA: " --log-level 6
iptables -A OUTPUT -j LOG --log-prefix "SAIDA: " --log-level 6
iptables -A FORWARD -i $IF_INT -o $IF_EXT -j LOG --log-prefix "Lan-->Mundo: " --log-level 6
iptables -A FORWARD -s $REDE_INT -i $IF_INT -o $IF_EXT -j LOG --log-prefix "Lan-->Mundo: " --log-level 6
# Fazendo NAT da Lan para o Mundo.
iptables -A POSTROUTING -t nat -s $REDE_INT -o $IF_EXT -d ! $REDE_INT -j MASQUERADE
# Tira o log da tela
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians