andriopj
(usa Fedora)
Enviado em 28/04/2009 - 07:50h
Ola Galera,
sou novato, ainda estou aprendendo
apesar de entender um pouco sobre o iptables, nao sou nenhuma fera nele.
andei vendo varios firewall por ai, peguei o que interessava, fiz algumas modificacoes qdo necessarias.
ele esta funcionando normalmente aqui no meu servidor de teste em casa!
porem, tenho a leve impressao que estou sobrepondo regras... e tendo regras que nao sao necessarias.
por esse motivo, alguem mais intendido, poderia dar uma olhada nele pra min? se a estrutura das regras esta bom? ou se tem algo para tirar?
desde ja
obrigado
##################################################################
##################################################################
INTERNET="eth0"
REDE_INTERNA="eth1"
# Certificar que os servicos estao estartados
ifup eth0
ifup eth1
service squid start
service dhcpd restart
service dhcpd start
# Paramentros
MACLIST=/usr/local/bin/bd
echo " Configuracoes necessarias.....................[ OK ]"
# Carregando Modulos
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_MASQUERADE
modprobe ipt_MARK
modprobe ipt_mark
modprobe ipt_mac
modprobe ipt_tos
modprobe iptable_mangle
echo " Carregando modulos............................[ OK ]"
# # Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Politica Padrao
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo " Determina politica padrao.....................[ OK ]"
# Aceita os Pacotes que realmente devem entrar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Protecoes #
# contra IP spoofing
echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
# contra synfload
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Kill timestamps. These have been the subject of a recent bugtraq thread
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
# contra icmp Broadcasting
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Ignora pings
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# bloqueia tracerout
# Diversa: contra portscanners, ping of death, dos, etc.
iptables -A INPUT -p udp --dport 33435:33525 -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
# Descarta pacotes nao-indentificados ICMP (ping)
iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP
# Bloquear Back Orifice
iptables -A INPUT -p tcp --dport 31337 -j DROP
iptables -A INPUT -p udp --dport 31337 -j DROP
# Bloquear NetBus
iptables -A INPUT -p tcp --dport 12345:12346 -j DROP
iptables -A INPUT -p udp --dport 12345:12346 -j DROP
# Proteç contra responses bogus
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# IMPEDINDO O REDIRECIONAMENTO E UMA ROTA
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# Permite o redirecionamento seguro dos pacotes
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# Utilizado em diversos ataques, isso possibilita que o atacante determine o "caminho" que seu
# pacote vai percorrer (roteadores) atéeu destino. Junto com spoof, isso se torna muito perigoso.
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo " Protecoes adicionais carregadas...............[ OK ]"
###################################################################################################
###################################################################################################
# REGRAS TESTE
# Regra para padroes nao roteaveis
iptables -A INPUT -i $INTERNET -s 255.255.255.255/32 -j DROP
iptables -A INPUT -i $INTERNET -s 127.0.0.0/8 -j DROP
# Regra para enderecos privados (RFC1918)
iptables -A INPUT -i $INTERNET -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $INTERNET -s 172.16.0.0/16 -j DROP
iptables -A INPUT -i $INTERNET -s 192.168.0.0/24 -j DROP
# Regra para enderecos reservados (multicast)
iptables -A INPUT -i $INTERNET -s 240.0.0.0/5 -j DROP
# bloquear conexoes telnet externas
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23 -j LOG
# Bloquear conexoes internas e externas NetBIOS do Windows NT 4.0
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 138:139 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 138:139 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 138:139 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 138:139 -j DROP
# Bloquear conexoes internas e externas ao NetBIOS do Windows 2000
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 445 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 445 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 445 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 445 -j DROP
# Bloquear conexoes internas e externas de rlogon
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 512:514 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 512:514 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 512:514 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 512:514 -j DROP
# Bloquear conexoes para portmap/rpcbind
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 111 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 111 -j DROP
# Bloquear servicos menores internos e externos
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 0:19 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 0:19 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 0:19 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 0:19 -j DROP
# Bloquear requisitos de finger internos e externos
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 79 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 79 -j DROP
# Bloquear requisitos internos e externos ao LPD
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 515 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 515 -j DROP
# Bloquear acesso ao syslog de dentro e de fora
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 514 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 514 -j DROP
# Bloquear requisitos de pooling SNMP internos e externos
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 161:162 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 161:162 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 161:162 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 161:162 -j DROP
# Bloquear mensagens de BGP route internas e externas
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 179 -j DROP
iptables -A INPUT -i $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 179 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 179 -j DROP
iptables -A OUTPUT -o $INTERNET -s 0.0.0.0/0 -d 0.0.0.0/0 -p udp --dport 179 -j DROP
##################################################################################################
##################################################################################################
# A tentativa de acesso externo a estes servicos sera registrados no syslog
# do sistema e serao bloqueados pela última regra abaixo.
#iptables -A FORWARD -j LOG
iptables -A INPUT -i $INTERNET -p tcp --dport 21 -j LOG --log-prefix "FIREWALL: ftp_tcp "
iptables -A INPUT -i $INTERNET -p tcp --dport 21 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 22 -j LOG --log-prefix "FIREWALL: ssh_tcp "
iptables -A INPUT -i $INTERNET -p tcp --dport 22 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 25 -j LOG --log-prefix "FIREWALL: smtp_tcp "
iptables -A INPUT -i $INTERNET -p tcp --dport 25 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 53 -j LOG --log-prefix "FIREWALL: dns_udp "
iptables -A INPUT -i $INTERNET -p udp --dport 53 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 110 -j LOG --log-prefix "FIREWALL: pop3_tcp "
iptables -A INPUT -i $INTERNET -p tcp --dport 110 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 113 -j LOG --log-prefix "FIREWALL: identd_tcp "
iptables -A INPUT -i $INTERNET -p tcp --dport 113 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 111 -j LOG --log-prefix "FIREWALL: rpc_udp"
iptables -A INPUT -i $INTERNET -p udp --dport 111 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 111 -j LOG --log-prefix "FIREWALL: rpc_tcp"
iptables -A INPUT -i $INTERNET -p tcp --dport 111 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba_tcp "
iptables -A INPUT -i $INTERNET -p tcp --dport 137:139 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba_udp "
iptables -A INPUT -i $INTERNET -p udp --dport 137:139 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 2210 -j LOG --log-prefix "FIREWALL: ssh_Andrio "
iptables -A INPUT -i $INTERNET -p tcp --dport 27001 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27002 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27003 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27004 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27005 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27006 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27007 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27008 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27009 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27010 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27010 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27011 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27011 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27012 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27012 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27013 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27013 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27014 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27014 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27015 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27015 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27016 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27016 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27017 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27017 -j DROP
iptables -A INPUT -i $REDE_INTERNA -p udp --dport 27018 -j DROP
iptables -A INPUT -i $INTERNET -p udp --dport 27018 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27019 -j DROP
iptables -A INPUT -i $INTERNET -p tcp --dport 27020 -j DROP
#GERANDO LOG DE BACKDOORS
iptables -A INPUT -p tcp --dport 5042 -j LOG --log-prefix "WinCrash"
iptables -A INPUT -p tcp --dport 12345 -j LOG --log-prefix "BackOrifice"
iptables -A INPUT -p tcp --destination-port 12346 -j LOG --log-prefix "BackOrifice"
iptables -A INPUT -p tcp --destination-port 1234 -j LOG --log-prefix "BAckDoor,SubSeven"
iptables -A INPUT -p tcp --dport 1245 -j LOG --log-prefix "VoooDooo"
iptables -A INPUT -p tcp --dport 1524 -j LOG --log-prefix "Trinoo"
echo " Ativando controle de logs.....................[ OK ]"
## ## Fim regras de seguranca ## ##
# # Controle de ACESSO##
# Diretivas do BD IP, MAC e Port
for i in `cat $MACLIST`; do
IPSOURCE=`echo $i | cut -d ';' -f 1`
MACSOURCE=`echo $i | cut -d ';' -f 2`
# Controle de Acesso IPxMAC
iptables -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
iptables -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j ACCEPT
iptables -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
iptables -t nat -A POSTROUTING -s $IPSOURCE -o $REDE_INTERNA -j MASQUERADE
done
# # Fim Controle de acesso ##
# Redireciona o trafego http(80) para o squid (3128)
iptables -t nat -A PREROUTING -s 172.167.0.0/24 -p tcp -d ! 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 172.167.0.0/24 -p udp -d ! 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
# Compartilhando conexao
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
echo " Compartilhando conexao........................[ OK ]"
# Setando o Kernel para IP_Dinamico Mascarado
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo " Ativando o Roteamento ........................[ OK ]"
# Agora iremos definir o que pode e o que nao pode
# Tabela de Entrada, Esta tabela so vale para o proprio host
# Qualquer pacote IP que venha do localhost, Aceita.
iptables -A INPUT -i lo -j ACCEPT
# # SSH
iptables -A INPUT -p tcp --dport 2210 --syn -j ACCEPT
# Cadeia de Reenvio (Forward)
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
# Fecha o resto
iptables -A INPUT -p tcp -j DROP
iptables -A INPUT -p udp -j DROP
iptables -A FORWARD -j DROP
echo "Configuracoes Iniciadas........................[ OK ]"
###################################################################
###################################################################