adrcsn
(usa Outra)
Enviado em 29/02/2012 - 16:43h
# IP da Rede
NETWORK=192.168.0.0/24
# Interface da Rede Local - LAN
ILAN=eth0
# Interface da Rede Externa - Internet
INET=eth1
CLEAN_RULES () {
# Removendo regras
iptables -F
iptables -t nat -F
iptables -t mangle -F
# Apagando chains
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Zerando contadores
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
}
REDIRECT () {
# Redirecionamento
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
}
SHARE_INTERNET () {
#Mascaramento
iptables -t nat -A POSTROUTING -o eth1 -s $NETWORK -j MASQUERADE
# Ativando o redirecionamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -s 10.0.0.1 -A POSTROUTING -o eth0 -j MASQUERADE
}
SECURITY () {
# Proteção para SYN Flood
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Rejeitar requisição de ICMP Echo destinado a Broadcasts e Multicasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Ignorar Mensagens Falsas de icmp_error_responses
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for i in /proc/sys/net/ipv4/conf/*; do
# Não Redirecionar Mensagens ICMP
echo 0 > $i/accept_redirects
# Proteção a Ataques IP Spoofing
echo 0 > $i/accept_source_route
# O kernel decide se envia resposta pelo mesmo endereço ou não.
echo 1 > $i/arp_filter
# Permitir que Pacotes Forjados sejam logados pelo próprio kernel
echo 1 > $i/log_martians
# Verificar Endereço de Origem do Pacote (Proteção a Ataques IP Spoofing)
echo 1 > $i/rp_filter
done
}
LOG () {
iptables-A INPUT -i eth1 -p tcp --dport 135 -j DROP
iptables -A INPUT -p tcp -m multiport ! --dports 0:1056 -j DROP
iptables-A INPUT -p udp -j DROP
iptables-A INPUT -p icmp -j DROP
iptables -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-prefix "LOG-FW: "
}
SERVER_RULES () {
# Apache - Servidor Web
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# Apache TomCat - Servidor Web
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# Bind9 - Servidor DNS
#iptables -A INPUT -p udp --dport 53 -j ACCEPT
# DanGuardian - Servidor Proxy
#iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
# DHCP - Servidor DHCP
iptables -A INPUT -i eth0 -p udp --sport 68 --dport 67 -j ACCEPT
# NFS - Servidor NFS
-A INPUT -p tcp -m multiport --dports 111,2049,51049 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 111,49176,50445 -j ACCEPT
# ProFTPD - Servidor FTP
iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 49152:49162 -j ACCEPT
# Postfix - Servidor de E-mail
#iptables -A INPUT -i eth0 -p tcp -m multiport --dports 25,110 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp -m multiport --dports 465,995 -j ACCEPT
# PostgreSQL - Servidor Postgresql
iptables -A INPUT -i eth0 -p tcp --dport 5432 -j ACCEPT
# Samba - Serviços de Diretório da Microsoft
#iptables -A INPUT -i eth0 -p tcp -m multiport --dports 445,139 -j ACCEPT
#iptables -A INPUT -i eth0 -p udp -m multiport --dports 137,138 -j ACCEPT
# Squid - Servidor Proxy
iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT
# SSH - Servidor SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 20 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# VNC - Servidor de Acesso Remoto
#iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
# Webmin - Gerenciador Web de Servidor
#iptables -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT
# MYSQL -Servidor de Bancos MYSQLserver
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# Liberando tráfego do túnel
iptables -A INPUT -i tun+ -j ACCEPT
# Liberando porta de conexão VPN
iptables -A INPUT -i eth1 -p udp --dport 1194 -j ACCEPT
}
SERVICE_RULES () {
# DNS - Serviço de Nomes de Dominios
iptables -A FORWARD -o eth1 -p udp -m multiport --dports 53,5353 -j ACCEPT
# FTP - Protocolo de Transferência de Arquivo
iptables-A FORWARD -o eth1 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -o eth1 -p tcp --dport 20 -j ACCEPT
# HTTP - Protocolo de Transferência de Hypertext
iptables -A FORWARD -o eth1 -p tcp -m multiport --dports 80,8080 -j ACCEPT
# HTTPS - Protocolo de Transferência de Hypertext Seguro
iptables -A FORWARD -o eth1-p tcp --dport 443 -j ACCEPT
# MSNMS - Serviço de Mensageiro de Rede da Microsoft
#iptables -A FORWARD -o eth1 -p tcp -m multiport --dports 1863,7001 -j ACCEPT
#iptables -A FORWARD -o eth1 -p udp --dport 7001 -j ACCEPT
# NTP - Protocolo para sincronização dos relógios
#iptables -A FORWARD -o eth0 -p udp --dport 123 -j ACCEPT
# Ping
iptables -A INPUT -i eth0-p icmp --icmp-type 8 -j ACCEPT
iptables -A FORWARD -o eth1 -p icmp --icmp-type 8 -j ACCEPT
# POP3 - Protocolo de Correio
iptables -A FORWARD -o eth1 -p tcp --dport 110 -j ACCEPT
# POP3S - Protocolo de Correio Seguro
iptables -A FORWARD -o eth1 -p tcp --dport 995 -j ACCEPT
# PPTP - Protocolo de Encapsulamento Ponto a Ponto
iptables -A FORWARD -o eth1 -p tcp --dport 1723 -j ACCEPT
# RDP - Protocolo de Área de Trabalho Remota
iptables -A FORWARD -o eth1-p tcp --dport 3389 -j ACCEPT
# SSDP - Protocolo para Descoberta de Serviços Simples
iptables -A INPUT -i eth0 -p udp --dport 1900 -j ACCEPT
# SSH - Shell Seguro
iptables -A FORWARD -o eth1 -p tcp --dport 22 -j ACCEPT
# SMTP - Protocolo Simples para Transferência de Correio
iptables -A FORWARD -o eth1 -p tcp --dport 25 -j ACCEPT
# SSMTP - Protocolo Simples para Transferência de Correio Seguro
iptables -A FORWARD -o eth1 -p tcp --dport 465 -j ACCEPT
# TELNET
iptables -A FORWARD -o eth0 -p tcp --dport 23 -j ACCEPT
# VNC - Computação em Rede Virtual
iptables -A FORWARD -o eth0 -p tcp --dport 5900 -j ACCEPT
# XMPP - Protocolo de Presença e Mensagens Extensiva
iptables -A FORWARD -o eth1 -p tcp --dport 5222 -j ACCEPT
# MYSQL - Liberando o MYSQL
iptables -A FORWARD -p tcp --dport 3306 -j ACCEPT
# Liberando o tráfego do túnel
iptables-A FORWARD -i tun+ -j ACCEPT
# ReceitaNet - Acesso ao site da receita
iptables -A FORWARD -o eth1-p tcp --dport 3456 -j ACCEPT
iptables -A FORWARD -o eth1 -p udp --dport 3456 -j ACCEPT
iptables -A FORWARD -o eth1 -p tcp --dport 2361 -j ACCEPT
iptables -A FORWARD -o eth1 -p tcp --dport 3007 -j ACCEPT
# Telefonia - Liberar portas da Telefonia
iptables -A FORWARD -o eth1 -p tcp --dport 4020 -j ACCEPT
iptables -A FORWARD -o eth1 -p tcp --dport 4028 -j ACCEPT
iptables-A FORWARD -o eth1 -p tcp --dport 4020 -j ACCEPT
iptables -A FORWARD -o eth1 -p tcp --dport 4028 -j ACCEPT
}
ENABLE_FW () {
# Removendo regras, apagando chains e zerando contadores
CLEAN_RULES
# Política
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Adicionando redirecionamentos
REDIRECT
# Compartilhando a Internet
SHARE_INTERNET
# Atribuindo segurança
SECURITY
# Adicionando regras p/ Servidores
SERVER_RULES
# Adicionando regras p/ Serviços
SERVICE_RULES
# Manter Conexões Estabelecidas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Liberando o Tráfego na Interface loopback
iptables -A INPUT -i lo -j ACCEPT
# LOGs
LOG
}
# Carrega os módulos() {
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
DISABLE_FW () {
# Removendo regras, apagando chains e zerando contadores
CLEAN_RULES
# Política
iptables -P INPUT ACCEPT
iptables-P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# Adicionando redirecionamentos
REDIRECT
# Compartilhando a Internet
SHARE_INTERNET
}
MODULES () {
MOD=(
"iptable_filter"
"iptable_nat"
"iptable_mangle"
"ipt_LOG"
"ipt_REDIRECT"
"ipt_MASQUERADE"
)
for N in $(seq 0 $[${#MOD[@]}-1]); do
if [ -z "$(lsmod | grep ${MOD[$N]})" ]; then
/sbin/modprobe ${MOD[$N]}
fi
done
}
EXEC () {
if [ $(whoami) = "root" ]; then
MODULES
$1
RET=0
else
echo "You're not a user root: Operation not permitted"
RET=1
fi
}
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting Firewall" "iptables"
EXEC ENABLE_FW
;;
stop)
log_daemon_msg "Stopping Firewall" "iptables"
EXEC DISABLE_FW
;;
restart|reload)
log_action_begin_msg "Reloading Firewall configuration"
EXEC ENABLE_FW
echo -n "Reloading Firewall configuration rules"
;;
*)
log_success_msg "Usage: $0 {start|stop|restart|reload}"
esac
log_end_msg $RET
exit $RET
Os dois scripts estão iguais apenas muda o ip da LAN de cada um
route -n
10.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
200.201.200.208 0.0.0.0 255.255.255.252 U 0 0 0 eth1
192.168.20.0 10.0.0.2 255.255.255.0 UG 0 0 0 tun0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 200.201.200.203 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0