Differences

This shows you the differences between two versions of the page.

Link to this comparison view

psad_iptables_debian_squeeze_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Psad + Iptables + Debian Squeeze ======
  
 +
 +PSAD é a abreviatura de Port Scan Attack Detector e como o nome sugere, é um aplicativo capaz de analisar e interagir com determinados eventos, como possíveis ataques de port scan , ataques de negação de serviço (DoS) entre outros, pois ele utiliza as assinaturas do Snort, caso você já conheça o Snort o Psad é fichinha de ser configurado pois o seu arquivo de configuração é bem parecido e as variáveis de configuração também, deixei as referências do projeto e as documentações para que possam ser consultadas para tunar o seu psad. 
 +
 +Aqui eu vou mostrar a configuração do psad a configuração de um script de de firewall e a configuração do rsyslog pois os mesmos trabalham em conjunto.
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
 +
 +
 +Agora vamos fazer um update dos repositórios
 +<sxh bash>
 +
 +aptitude update
 +</​sxh>​
 +
 +Agora vamos instalar o psad
 +<sxh bash>
 +
 +aptitude install psad -y
 +</​sxh>​
 +
 +Agora vamos configurar o rsyslogd para controlar os logs que vamos gerar pelo iptables
 +<sxh bash>
 +
 +vim /​etc/​rsyslog.conf
 +[...]
 +#linha 83 vamos trocar ​
 +*.=info;​*.=notice;​*.=warn;​\
 +       ​auth,​authpriv.none;​\
 +       ​cron,​daemon.none;​\
 +       ​mail,​news.none ​         -/​var/​log/​messages
 +       
 +#Por este bloco, aqui estamos tirando o tipo info dos logs que vamos utilizar para o iptables
 +*.=notice;​*.=warn;​\
 +        auth,​authpriv.none;​\
 +        cron,​daemon.none;​\
 +        mail,​news.none ​         -/​var/​log/​messages
 +
 +#Adicione a seguinte linha
 +kern.info ​                      ​-/​var/​log/​iptables
 +[...]
 +</​sxh>​
 +
 +Agora vamos reiniciar o rsyslog
 +<sxh bash>
 +
 +/​etc/​init.d/​rsyslog restart
 +</​sxh>​
 +
 +Agora vamos pegar um script de firewall de borda como exemplo ​
 +<sxh bash>
 +
 +vim /​etc/​init.d/​rc.firewall
 +#!/bin/sh
 +#Autor: Douglas Q. dos Santos
 +### BEGIN INIT INFO
 +# Provides: ​            ​rc.firewall
 +# Required-Start: ​      ​$remote_fs $syslog
 +# Required-Stop: ​       $remote_fs $syslog
 +# Default-Start: ​       2 3 4 5
 +# Default-Stop: ​        
 +# Short-Description: ​   Firewall ​
 +### END INIT INFO
 +
 +### CORES UTILIZADAS NO SCRIPT ###
 +GREY="​\033[01;​30m"​
 +RED="​\033[01;​31m"​
 +GREEN="​\033[01;​32m"​
 +YELLOW="​\033[01;​33m"​
 +BLUE="​\033[01;​34m"​
 +PURPLE="​\033[01;​35m"​
 +CYAN="​\033[01;​36m"​
 +WHITE="​\033[01;​37m"​
 +CLOSE="​\033[m"​
 +
 +###  CAMINHO DAS VARIAVEIS DO IPV4 NO KERNEL ###
 +PSNI=/​proc/​sys/​net/​ipv4
 +
 +### REDES ###
 +REDE_DMZ='​172.20.0.0/​24'​
 +
 +### INTERFACES DE REDE ###
 +IF_REDE_DMZ='​eth1'​
 +IF_REDE_EXT='​eth2'​
 +
 +### SERVIDORES DA REDE DMZ ###
 +DMZ_DNS1='​172.20.0.200'​
 +DMZ_DNS2='​172.20.0.201'​
 +DMZ_EMAIL='​172.20.0.202'​
 +DMZ_WWW='​172.20.0.203'​
 +
 +### IPS EXTERNOS PARA OS SERVIDORES DA DMZ###
 +EXT_DNS1='​200.200.200.200'​
 +EXT_DNS2='​200.200.200.201'​
 +EXT_EMAIL='​200.200.200.202'​
 +EXT_WWW='​200.200.200.203'​
 +
 +### PORTAS ###
 +SSH_PORT="​22222"​
 +DNS_PORT="​53" ​
 +HTTP_PORT="​80"​
 +AUTH_PORT="​113"​
 +MAIL_PORTS="​25,​110,​143,​465,​993,​995"​
 +NTP_PORT="​123"​
 +
 +### COMANDOS ###
 +IPTABLES=$(which iptables)
 +MODPROBE=$(which modprobe)
 +COM="​-m comment --comment"​
 +TCP="​-p tcp -m tcp" ​
 +UDP="​-p udp -m udp"
 +ICMP="​-p icmp --icmp-type"​
 +LIMIT="​-m limit --limit" ​
 +PRE_EXT="​${IPTABLES} -A PREROUTING -t nat -i ${IF_REDE_EXT} "
 +
 +### OPCOES DO KERNEL ###
 +### HABILITA REPASSE DE PACOTES ###
 +echo 1 > $PSNI/​ip_forward
 +# HABILITAR PROTECAO CONTRA SYNFLOOD
 +echo 1 > $PSNI/​tcp_syncookies
 +# HABILITAR VERIFICACAO DE ROTA DE ORIGEM (PROTECAO P/ IP SPOOFING)
 +for RP in $PSNI/​conf/​*/​rp_filter ; do echo 1 > $RP ; done
 +# CONTROLE DE ICMP
 +echo 0 > $PSNI/​icmp_echo_ignore_all
 +echo 1 > $PSNI/​icmp_echo_ignore_broadcasts
 +
 +### CARREGANDO MÓDULOS ##
 +${MODPROBE} ip_conntrack
 +${MODPROBE} ip_conntrack_ftp
 +${MODPROBE} ip_nat_ftp
 +
 +
 +case $1 in 
 +  start)
 +    echo "​${GREEN}[ ​        ​Iniciando Firewall ​        ​]${CLOSE}"​
 +
 +    ### LIMPANDO REGRAS E CADEIAS ANTERIORES ###
 +    ${IPTABLES} -t filter -F
 +    ${IPTABLES} -t nat -F
 +    ${IPTABLES} -t mangle -F
 +    ${IPTABLES} -t filter -X
 +    ${IPTABLES} -t nat -X
 +    ${IPTABLES} -t mangle -X
 +
 +    ### LIMPANDO AS POLITICAS DEFAULT ###
 +    ${IPTABLES} -P INPUT ACCEPT
 +    ${IPTABLES} -P FORWARD ACCEPT
 +    ${IPTABLES} -P OUTPUT ACCEPT
 +
 +    ### DEFININDO POLITICA PADRAO DROP ###
 +    ${IPTABLES} -P INPUT DROP
 +    ${IPTABLES} -P FORWARD DROP
 +    ${IPTABLES} -P OUTPUT ACCEPT
 +
 +    ### LIBERAR LOOPBACK ###
 +    ${IPTABLES} -A INPUT -s 127.0.0.1/​32 -j ACCEPT ${COM} "​LIBERA A LOOPBACK"​
 +
 +    ### CONTRA ATAQUES ​
 +    ${IPTABLES} -A INPUT -m state --state INVALID -j LOG --log-prefix " FIREWALL: PKGS INVALIDOS " --log-level info 
 +    ${IPTABLES} -A INPUT -m state --state INVALID -j DROP ${COM} "​PACOTES COM ESTADO INVALIDO OU MAL FORMADOS"​
 +
 +    ${IPTABLES} -A INPUT -f -j LOG --log-prefix " FIREWALL: FRAGMENTADOS " --log-level info
 +    ${IPTABLES} -A INPUT -f -j DROP ${COM} "​PACOTES FRAGMENTADOS"​
 +
 +    ###  LIBERAR SSH ###
 +    ${IPTABLES} -A INPUT -s ${REDE_DMZ} ${TCP} --dport ${SSH_PORT} -j ACCEPT ${COM} "​LIBERA ${REDE_DMZ} ACESSAR O SSH"
 +
 +    ### LIBERAR RETORNO DE CONEXOES ###
 +    ${IPTABLES} -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT
 +    ${IPTABLES} -A FORWARD -m state --state ESTABLISHED,​RELATED -j ACCEPT
 +
 +    ### LIBERAR EMAIL ###
 +    ${IPTABLES} -A FORWARD ${TCP} -m multiport --dports ${EMAIL_PORTS} -d ${DMZ_EMAIL} -j LOG --log-prefix " FIREWALL: ACESSO EMAIL " --log-level info
 +    ${IPTABLES} -A FORWARD ${TCP} -m multiport --dports ${EMAIL_PORTS} -d ${DMZ_EMAIL} -j ACCEPT ${COM} "​Liberado repasse de EMAIL "
 +
 +    ### LIBERAR DNS ###
 +    ${IPTABLES} -A FORWARD ${TCP} --dport ${DNS_PORT} -d ${DMZ_DNS1} -j LOG --log-prefix " FIREWALL: ACESSO DNS1 TCP " --log-level info
 +    ${IPTABLES} -A FORWARD ${TCP} --dport ${DNS_PORT} -d ${DMZ_DNS2} -j LOG --log-prefix " FIREWALL: ACESSO DNS2 TCP " --log-level info
 +    ${IPTABLES} -A FORWARD ${TCP} --dport ${DNS_PORT} -d ${DMZ_DNS1} -j ACCEPT ${COM} "​LIBERA REPASSE PARA DNS1"
 +    ${IPTABLES} -A FORWARD ${TCP} --dport ${DNS_PORT} -d ${DMZ_DNS1} -j ACCEPT ${COM} "​LIBERA REPASSE PARA DNS2"
 +    ${IPTABLES} -A FORWARD ${UDP} --dport ${DNS_PORT} -d ${DMZ_DNS1} -j LOG --log-prefix " FIREWALL: ACESSO DNS1 UDP " --log-level info
 +    ${IPTABLES} -A FORWARD ${UDP} --dport ${DNS_PORT} -d ${DMZ_DNS2} -j LOG --log-prefix " FIREWALL: ACESSO DNS2 UDP " --log-level info
 +    ${IPTABLES} -A FORWARD ${UDP} --dport ${DNS_PORT} -d ${DMZ_DNS1} -j ACCEPT ${COM} "​LIBERA REPASSE PARA DNS1"
 +    ${IPTABLES} -A FORWARD ${UDP} --dport ${DNS_PORT} -d ${DMZ_DNS1} -j ACCEPT ${COM} "​LIBERA REPASSE PARA DNS2"
 +
 +    ### LIBERAR HTTP ###
 +    ${IPTABLES} -A FORWARD ${TCP} --dport ${HTTP_PORT} -d ${DMZ_WWW} -j LOG --log-prefix " FIREWALL: ACESSO WEB " --log-level info
 +    ${IPTABLES} -A FORWARD ${TCP} --dport ${HTTP_PORT} -d ${DMZ_WWW} -j ACCEPT ${COM} "​LIBERA REPASSE PARA HTTP"
 +
 +    ### LIBERAR NTP ###
 +    ${IPTABLES} -A INPUT ${UDP} --sport ${NTP_PORT} -j LOG --log-prefix " FIREWALL: ACESSO NTP " --log-level info
 +    ${IPTABLES} -A INPUT ${UDP} --sport ${NTP_PORT} -j ACCEPT ${COM} "​Libera entrada de NTP"
 +    ${IPTABLES} -A FORWARD ${UDP} --sport ${NTP_PORT} -d ${REDE_DMZ} -j LOG --log-prefix " FIREWALL: ACESSO NTP " --log-level info
 +    ${IPTABLES} -A FORWARD ${UDP} --sport ${NTP_PORT} -d ${REDE_DMZ} -j ACCEPT ${COM} "​Libera repasse do NTP"
 +
 +    ### REGRAS DE PREROUTING ###
 +
 +    ### DMZ_WWW ### 
 +    ${PRE_EXT} -d ${EXT_WWW} ${TCP} --dport ${HTTP_PORT} -j DNAT --to ${DMZ_WWW} ${COM} " SERVIDOR WWWW "
 +
 +    ### DMZ_DNS ###
 +    ${PRE_EXT} -d ${EXT_DNS1} ${TCP} --dport ${DNS_PORT} -j DNAT --to ${DMZ_DNS1} ${COM} "​SERVIDOR DE DNS PRIMARIO"​
 +    ${PRE_EXT} -d ${EXT_DNS1} ${UDP} --dport ${DNS_PORT} -j DNAT --to ${DMZ_DNS1} ${COM} "​SERVIDOR DE DNS PRIMARIO" ​
 +    ${PRE_EXT} -d ${EXT_DNS2} ${TCP} --dport ${DNS_PORT} -j DNAT --to ${DMZ_DNS2} ${COM} "​SERVIDOR DE DNS SLAVE"
 +    ${PRE_EXT} -d ${EXT_DNS2} ${UDP} --dport ${DNS_PORT} -j DNAT --to ${DMZ_DNS2} ${COM} "​SERVIDOR DE DNS SLAVE"
 +
 +    ### SERVIDOR DE MAIL ###
 +    ${PRE_EXT} -d ${EXT_MAIL} -p tcp -m multiport --dports ${EMAIL_PORTS} -j DNAT --to ${DMZ_MAIL} ${COM} "​Servidor de Email"
 +    ${IPTABLES} -t nat -A POSTROUTING -s ${DMZ_MAIL} -p tcp -m multiport --dport ${EMAIL_PORTS} -j SNAT --to ${EXT_MAIL} ${COM} "Saida do email"
 +
 +    ### CONTROLE DE ICMP (PING) ###
 +    ${IPTABLES} -A INPUT ${ICMP} 0 ${LIMIT} 1/s -j LOG --log-prefix " FIREWALL: ICMP REPLY " --log-level info
 +    ${IPTABLES} -A INPUT ${ICMP} 0 ${LIMIT} 1/s -j ACCEPT ${COM} "​CONTROLE DE ICMP"
 +    ${IPTABLES} -A INPUT ${ICMP} 8 ${LIMIT} 1/s -j LOG --log-prefix " FIREWALL: ICMP REQUEST " --log-level info
 +    ${IPTABLES} -A INPUT ${ICMP} 8 ${LIMIT} 1/s -j ACCEPT ${COM} "​CONTROLE DE PING"
 +    ${IPTABLES} -A FORWARD ${ICMP} 0 ${LIMIT} 1/s -j LOG --log-prefix " FIREWALL: ICMP REPLY " --log-level info
 +    ${IPTABLES} -A FORWARD ${ICMP} 0 ${LIMIT} 1/s -j ACCEPT ${COM} "​CONTROLE DE PING"
 +    ${IPTABLES} -A FORWARD ${ICMP} 8 ${LIMIT} 1/s -j LOG --log-prefix " FIREWALL: ICMP REQUEST " --log-level info
 +    ${IPTABLES} -A FORWARD ${ICMP} 8 ${LIMIT} 1/s -j ACCEPT ${COM} "​CONTROLE DE PING"
 + 
 +    ### Port SCANNER
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix " FIREWALL: PS E SF " --log-level info
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags ALL FIN,URG,PSH -j DROP ${COM} "PS e SF"
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix " FIREWALL: PS E SF " --log-level info
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags SYN,RST SYN,RST -j DROP ${COM} "PS e SF"
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix " FIREWALL: PS E SF " --log-level info
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags SYN,FIN SYN,FIN -j DROP ${COM} "PS e SF"
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags ALL NONE        -j LOG --log-prefix " FIREWALL: PS E SF " --log-level info
 +    ${IPTABLES} -A INPUT ${TCP} --tcp-flags ALL NONE        -j DROP ${COM} "PS e SF"
 +    ${IPTABLES} -A INPUT ${TCP} --sport 0 --tcp-flags FIN,​SYN,​RST,​ACK SYN -j LOG --log-prefix " FIREWALL: PS E SF "
 +    ${IPTABLES} -A INPUT ${TCP} --sport 0 --tcp-flags FIN,​SYN,​RST,​ACK SYN -j DROP ${COM} "PS e SF"
 +    ${IPTABLES} -A FORWARD -p tcp --syn ${LIMIT} 2/s -j LOG --log-prefix " FIREWALL: PS E SF "
 +    ${IPTABLES} -A FORWARD -p tcp --syn ${LIMIT} 2/s -j ACCEPT ${COM} "PS e SF"
 +    ${IPTABLES} -A INPUT -p tcp --tcp-flags SYN,​ACK,​FIN,​RST RST ${LIMIT} 1/s -j LOG --log-prefix " FIREWALL: PS E SF "
 +    ${IPTABLES} -A INPUT -p tcp --tcp-flags SYN,​ACK,​FIN,​RST RST ${LIMIT} 1/s -j ACCEPT ${COM} "PS e SF"
 +    ${IPTABLES} -A FORWARD -p tcp --tcp-flags SYN,​ACK,​FIN,​RST RST ${LIMIT} 1/s -j LOG --log-prefix " FIREWALL: PS  E SF "
 +    ${IPTABLES} -A FORWARD -p tcp --tcp-flags SYN,​ACK,​FIN,​RST RST ${LIMIT} 1/s -j ACCEPT ${COM} "PS E SF"
 +
 +    ### NEGAR IDENT ###
 +    ${IPTABLES} -A INPUT ${TCP} --dport ${AUTH_PORT} -j LOG --log-prefix " FIREWALL: NEGA IDENT " --log-level info
 +    ${IPTABLES} -A INPUT ${TCP} --dport ${AUTH_PORT} -j REJECT --reject-with tcp-reset ${COM} "Nega identificacao"​
 +
 +    ### RESET EM CONEXOES PARA PORTAS DESCONHECIDAS ###
 +    ${IPTABLES} -A INPUT -p tcp -j LOG --log-prefix " FIREWALL: RESET PORT DESC " --log-level info
 +    ${IPTABLES} -A INPUT -p tcp -j REJECT --reject-with tcp-reset ${COM} "​Reseta conexoes em portas desconhecidas"​
 +
 +    ### REGRAS DE MASQUERADE ###
 +    ${IPTABLES} -A POSTROUTING -t nat -s ${REDE_DMZ} -j MASQUERADE ${COM} "​Masquerade da DMZ"
 +
 +    ## GERA LOG OUTROS ACESSOS INDEVIDOS
 +    ${IPTABLES} -A INPUT -j LOG --log-prefix " FIREWALL: ACCESSO DESCON " --log-level info
 +    ${IPTABLES} -A FORWARD -j LOG --log-prefix " FIREWALL: ACCESSO DESCON " --log-level info
 +
 +   echo "​${GREEN}[ ​        ​Firewall Iniciado ​         ]${CLOSE}"​
 +
 +  ;;
 +  stop)
 +   echo "​${RED}[ ​      ​Parando Firewall ...      ]${CLOSE}";​
 +    ### LIMPANDO REGRAS E CADEIAS ANTERIORES ###
 +    ${IPTABLES} -t filter -F
 +    ${IPTABLES} -t nat -F
 +    ${IPTABLES} -t mangle -F
 +    ${IPTABLES} -t filter -X
 +    ${IPTABLES} -t nat -X
 +    ${IPTABLES} -t mangle -X
 +
 +    ### LIMPANDO AS POLITICAS DEFAULT ###
 +    ${IPTABLES} -P INPUT ACCEPT
 +    ${IPTABLES} -P FORWARD ACCEPT
 +    ${IPTABLES} -P OUTPUT ACCEPT
 +
 +    ### REGRAS DE MASQUERADE ###
 +    ${IPTABLES} -A POSTROUTING -t nat -s ${REDE_DMZ} -j MASQUERADE ${COM} "​Masquerade da DMZ com o firewall em stop"
 +
 +   ​echo ​ "​${RED}[ ​       Firewall Parado ​         ] ${CLOSE}";​
 +
 +  ;;
 +   ​status)
 +   ​echo ​ "​${RED}########################################################################################";​
 +   ​echo ​ "​*******************************Table Filter*********************************************${CLOSE}";​
 +   ​${IPTABLES} -t filter -L -n
 +   ​echo ​ "​${RED}########################################################################################";​
 +   ​echo ​ "​********************************Table Nat***********************************************${CLOSE}";​
 +   ​${IPTABLES} -t nat -L -n
 +   ;;
 +
 +   ​restart)
 +     $0 stop
 +     $0 start
 +   ;;
 +
 +  *)
 +   ​echo ​ "​${RED}Opcoes Validas:​(start|stop|restart|status)${CLOSE}"​
 +  ;;
 +esac
 +</​sxh>​
 +
 +Agora vamos dar permissão de execucação para ele
 +<sxh bash>
 +
 +chmod +x /​etc/​init.d/​rc.firewall
 +</​sxh>​
 +
 +Agora vamos colocar ele na inicialização do sistema
 +<sxh bash>
 +
 +insserv -f -v rc.firewall
 +</​sxh>​
 +
 +Pronto já temos o nosso firewall e o nosso rsyslog configurados agora precisamos acertar a configuração do psad, os arquivos de configuração do psad se encontram em /etc/psad
 +<sxh bash>
 +
 +ls /etc/psad/
 +archive ​ auto_dl ​ icmp_types ​ ip_options ​ pf.os  posf  psad.conf ​ signatures ​ snort_rule_dl ​ snort_rules
 +</​sxh>​
 +
 +O arquivo auto_dl nos definimos quais redes vão ser excluídas da auditória ou que vão ter um nível pré-definido de perigo, vamos ver um exemplo do arquivo auto_dl
 +<sxh bash>
 +
 +vim /​etc/​psad/​auto_dl
 +#  <IP address> ​ <danger level> ​ <​optional protocol>/<​optional ports>;
 +#
 +# Examples:
 +#
 +#  10.111.21.23 ​   5;          # Very bad IP.
 +#  127.0.0.1 ​      ​0; ​         # Ignore this IP.
 +#  10.10.1.0/​24 ​   0;          # Ignore traffic from this entire class C.
 +#  192.168.10.4 ​   3    tcp;   # Assign danger level 3 if protocol is tcp.
 +#  10.10.1.0/​24 ​   3    tcp/​1-1024; ​ # Danger level 3 for tcp port range
 +172.20.0.0/​24 ​  0;
 +</​sxh>​
 +
 +Como pode ser notado podemos definir o tipo de perigo que um host ou uma rede pode nos causar podemos definir também por tipo de protocolo e portas. Aqui eu vou deixar isenta de auditoria a minha DMZ então eu informo o meu range 172.20.0.0/​24 e o nível de perigo 0.
 +
 +  - O arquivo **icmp_types** é aonde o psad vai se referenciar quando for tratar um pacote do protocolo ICMP.
 +  - O arquivo **ip_option** define assinaturas de interfaces para o psad detectar suspeitos.
 +  - O arquivo **pf.os** é para sistema que utilizam o packet filter como firewall.
 +  - O arquivo **posf** é utilizado para determinar qual o tipo de sistema que esta originando o scan.
 +  - O arquivo **signatures** contem as assinaturas de possíveis ataques ou tentativas de ataques.
 +  - O arquivo **snort_rule_dl** podemos definir um nível padrão para um determinado SID "Snort rule ID".
 +  - O diretório **snort_rules** podemos armazenar as regras do snort para o psad ter referências de assinaturas.
 +  - O arquivo **psad.conf** é o arquivo com o núcleo de opções utilizadas, ele é bem parecido com o snort.conf
 +
 +Vamos agora trabalhar com o arquivo psad.conf, vamos dar uma olhada em sua estrutura e vamos mudar o que acharmos necessário,​ para ele trabalhar corretamente não precisamos efetuar muitos acertos.
 +
 +<sxh bash>
 +
 +vim /​etc/​psad/​psad.conf
 +[...]
 +#Vamos definir o email de quem vai receber os emails de alerta do sistema
 +EMAIL_ADDRESSES ​            ​douglas@douglas.wiki.br;​
 +[...]
 +#Aqui nos temos a variável HOME_NET mais não vamos modificá-la pois o psad já reconhece a nossa rede e nos liberamos ela tambem em auto_dl ​
 +[...]
 +#Aqui definimos que o psad vai procurar em todas as entras de log do iptables e não em alguma flag pré-definida.
 +FW_SEARCH_ALL Y;
 +[...]
 +#Flag que ele vai se basear caso o FW_SEARCH_ALL estiver com a opção N
 +FW_MSG_SEARCH ​  DROP;
 +[...]
 +#Qual daemon de gerenciamento de log que vai ser utilizado
 +SYSLOG_DAEMON ​  ​syslogd;​
 +[...]
 +#Qual a interface que esta configurada que vai ser utilizado ele vai descobrir com o ifconfig
 +IFCFGTYPE ​      ​ifconfig;​
 +[...]
 +#Aqui estamos definindo o níveis de perigo pela quantidade de pacotes com alguma assinatura
 +DANGER_LEVEL1 ​              ​5; ​   ### Number of packets.
 +DANGER_LEVEL2 ​              15;
 +DANGER_LEVEL3 ​              150;
 +DANGER_LEVEL4 ​              1500;
 +DANGER_LEVEL5 ​              ​10000;​
 +[...]
 +#Intervalo que vai esperar até checar novamente os logs do iptables
 +CHECK_INTERVAL ​  5;
 +[...]
 +#Aqui vamos definir que vamos definir opções de log do iptables não esqueça de acertar a variável IPT_SYSLOG_FILE ​ como foi definida em /​etc/​rsyslog.conf
 +ENABLE_SYSLOG_FILE ​         Y;
 +IPT_WRITE_FWDATA ​           Y;
 +IPT_SYSLOG_FILE ​            /​var/​log/​iptables;​
 +[...]
 +#Aqui definimos o nível mínimo para que seja enviado um e-mail nos notificando sobre algum alerta
 +#Para testes deixe como 1 mais depois acredito que você vai mudar isso de acordo com a necessidade.
 +MIN_DANGER_LEVEL ​           1;
 +[...]
 +# Aqui definimos que sera enviado um email de alerta se o nivel de perigo for maior ou igual ao definido
 +EMAIL_ALERT_DANGER_LEVEL ​   1;
 +[...]
 +#Habilitar o psad para trabalhar como IDS
 +ENABLE_AUTO_IDS ​            Y;
 +[...]
 +#Aqui estamos definindo o nível de perigo analisado pelo psad que já sera bloqueado por iptables automaticamente.
 +#Aqui vai ter que ser acompanhado os logs do psad para verificar o que vai ser melhor para a sua rede
 +AUTO_IDS_DANGER_LEVEL ​      1;
 +[...]
 +#Tempo que o atacante sera bloqueado por padrão é uma hora.
 +AUTO_BLOCK_TIMEOUT ​         3600;
 +[...]
 +#Quando um atacante for bloqueado vamos ser informado por e-mail.
 +ENABLE_AUTO_IDS_EMAILS ​     Y;
 +[...]
 +#Bloquear automaticamente com iptables somente funciona se a opção ENABLE_AUTO_IDS estiver ativa.
 +IPTABLES_BLOCK_METHOD ​      Y;
 +#Mais abaixo temos mais um monte de opções de personalização mais eu acho essas bem importantes para um bom funcionamento.
 +[...]
 +</​sxh>​
 +
 +Não esqueça de configurar um servidor de e-mail ou fazer algum relay para algum servidor.
 +
 +Agora vamos reiniciar o psad
 +<sxh bash>
 +
 +/​etc/​init.d/​psad restart
 +</​sxh>​
 +Podemos listar as estatísticas do psad com o seguinte comando
 +<sxh bash>
 +
 +psad -S
 +[+] psadwatchd (pid: 23600) ​ %CPU: 0.0  %MEM: 0.0
 +    Running since: Fri Jan  6 12:37:05 2012
 +
 +[+] psad (pid: 23593) ​ %CPU: 3.0  %MEM: 2.7
 +    Running since: Fri Jan  6 12:37:05 2012
 +    Command line arguments: [none specified]
 +    Alert email address(es):​ douglas@douglas.wiki.br
 +
 +[+] Version: psad v2.1.7
 +
 +[+] Top 50 signature matches:
 +        [NONE]
 +
 +[+] Top 25 attackers:
 +        [NONE]
 +
 +[+] Top 20 scanned ports:
 +        [NONE]
 +
 +[+] iptables log prefix counters:
 +        [NONE]
 +
 +    iptables auto-blocked IPs:
 +        [NONE]
 +
 +    Total packet counters: tcp: 0, udp: 0, icmp: 0
 +
 +[+] IP Status Detail:
 +        [NONE]
 +
 +    Total scan sources: 0
 +    Total scan destinations:​ 0
 +
 +[+] These results are available in: /​var/​log/​psad/​status.out
 +</​sxh>​
 +
 +Um exemplo de email enviado pelo psad de um possível ataque
 +<sxh bash>
 +=-=-=-=-=-=-=-=-=-=-=-= Fri Jan  6 11:51:00 2012 =-=-=-=-=-=-=-=-=-=-=-=
 +
 +
 +         ​Danger level: [3] (out of 5)
 +
 +    Scanned TCP ports: [443: 1 packets]
 +            TCP flags: [SYN: 1 packets, Nmap: -sT or -sS]
 +       ​iptables chain: FORWARD (prefix "​FIREWALL:​ PS E SF"), 1 packets
 +
 +               ​Source:​ 201.80.165.98
 +                  DNS: c950a562.virtua.com.br
 +             OS guess: Linux (2.4.x kernel)
 +
 +          Destination:​ 172.20.0.201
 +                  DNS: [No reverse dns info available]
 +
 +   ​Overall scan start: Fri Jan  6 11:44:28 2012
 +   Total email alerts: 36
 +   ​Complete TCP range: [80-443]
 +      Syslog hostname: fw-teste
 +
 +         ​Global stats: chain: ​  ​interface: ​  ​TCP: ​  ​UDP: ​  ​ICMP:  ​
 +                       ​FORWARD ​ eth2         ​150 ​   0      0      ​
 +
 +[+] Whois Information (source IP):
 +
 +% Joint Whois - whois.lacnic.net
 +%  This server accepts single ASN, IPv4 or IPv6 queries
 + 
 +% Brazilian resource: whois.registro.br
 +
 +
 +% Copyright (c) Nic.br
 +%  The use of the data below is only permitted as described in
 +%  full by the terms of use (http://​registro.br/​termo/​en.html),​
 +%  being prohibited its distribution,​ comercialization or
 +%  reproduction,​ in particular, to use it for advertising or
 +%  any similar purpose.
 +%  2012-01-06 11:45:09 (BRST -02:00)
 +
 +inetnum: ​    ​201.80/​14
 +aut-num: ​    ​AS28573
 +abuse-c: ​    GRSVI
 +owner: ​      NET Serviços de Comunicação S.A.
 +ownerid: ​    ​000.108.786/​0001-65
 +responsible:​ Grupo de Segurança da Informação Vírtua
 +country: ​    BR
 +owner-c: ​    GRSVI
 +tech-c: ​     GRSVI
 +inetrev: ​    ​201.80/​16
 +nserver: ​    ​ns7.virtua.com.br ​
 +nsstat: ​     20120106 AA
 +nslastaa: ​   20120106
 +nserver: ​    ​ns8.virtua.com.br ​
 +nsstat: ​     20120106 AA
 +nslastaa: ​   20120106
 +created: ​    ​20060427
 +changed: ​    ​20120105
 +
 +nic-hdl-br: ​ GRSVI
 +person: ​     Grupo de Segurança Vírtua
 +e-mail: ​     virtua@virtua.com.br
 +created: ​    ​20080512
 +changed: ​    ​20090518
 +
 +% Security and mail abuse issues should also be addressed to
 +% cert.br, http://​www.cert.br/,​ respectivelly to cert@cert.br
 +% and mail-abuse@cert.br
 +%
 +% whois.registro.br accepts only direct match queries. Types
 +% of queries are: domain (.br), ticket, provider, ID, CIDR
 +% block, IP and ASN.
 +
 +
 +=-=-=-=-=-=-=-=-=-=-=-= Fri Jan  6 11:51:00 2012 =-=-=-=-=-=-=-=-=-=-=-=
 +</​sxh>​
 +
 +
 +Podemos acompanhar agora os logs do iptables em /​var/​log/​iptables
 +<sxh bash>
 +
 +tail -f /​var/​log/​iptables
 +Jan  6 11:58:49 fw kernel: [5609066.829080] ​ FIREWALL: ACESSO DNS UDP IN=eth1 OUT=eth2 SRC=172.20.0.201 DST=204.x.x.x LEN=81 TOS=0x00 PREC=0x00 TTL=63 ID=33404 PROTO=UDP SPT=25291 DPT=53 LEN=61 ​
 +Jan  6 11:58:49 fw kernel: [5609066.829736] ​ FIREWALL: ACESSO DNS UDP IN=eth1 OUT=eth2 SRC=172.20.0.201 DST=208.x.x.x LEN=85 TOS=0x00 PREC=0x00 TTL=63 ID=21775 PROTO=UDP SPT=5424 DPT=53 LEN=65 ​
 +Jan  6 11:58:49 fw kernel: [5609066.927918] ​ FIREWALL: ACESSO DNS UDP IN=eth2 OUT=eth1 SRC=200.x.x.x DST=172.20.0.201 LEN=72 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=32768 DPT=53 LEN=52 ​
 +Jan  6 11:58:49 fw kernel: [5609066.977318] ​ FIREWALL: ACESSO DNS UDP IN=eth1 OUT=eth2 SRC=172.20.0.201 DST=193.x.x.x LEN=99 TOS=0x00 PREC=0x00 TTL=63 ID=57820 PROTO=UDP SPT=47284 DPT=53 LEN=79 ​
 +Jan  6 11:58:49 fw kernel: [5609066.984478] ​ FIREWALL: ACESSO WEB IN=eth2 OUT=eth1 SRC=200.x.x.x DST=172.20.0.201 LEN=60 TOS=0x00 PREC=0x00 TTL=120 ID=2134 DF PROTO=TCP SPT=50623 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0 ​
 +Jan  6 11:58:49 fw kernel: [5609066.985718] ​ FIREWALL: ACESSO DNS UDP IN=eth1 OUT=eth2 SRC=172.20.0.201 DST=193.x.x.x LEN=75 TOS=0x00 PREC=0x00 TTL=63 ID=15736 PROTO=UDP SPT=40897 DPT=53 LEN=55 ​
 +Jan  6 11:58:49 fw kernel: [5609067.002125] ​ FIREWALL: ACESSO WEB IN=eth2 OUT=eth1 SRC=200.x.x.x DST=172.20.0.201 LEN=60 TOS=0x00 PREC=0x00 TTL=120 ID=2135 DF PROTO=TCP SPT=50624 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0 ​
 +</​sxh>​
 +
 +Agora vamos consultar novamente as estatísticas do psad
 +<sxh bash>
 +
 +psad -S
 +[+] psadwatchd (pid: 23600) ​ %CPU: 0.0  %MEM: 0.0
 +    Running since: Fri Jan  6 12:37:05 2012
 +
 +[+] psad (pid: 23593) ​ %CPU: 1.8  %MEM: 2.8
 +    Running since: Fri Jan  6 12:37:05 2012
 +    Command line arguments: [none specified]
 +    Alert email address(es):​ douglas@scitechinfo.com.br
 +
 +[+] Version: psad v2.1.7
 +
 +[+] Top 50 signature matches:
 +        [NONE]
 +
 +[+] Top 25 attackers:
 +        [NONE]
 +
 +[+] Top 20 scanned ports:
 +      tcp 80    379 packets
 +      tcp 443   10 packets
 +      tcp 25    5 packets
 +      tcp 143   2 packets
 +
 +      udp 694   312 packets
 +      udp 53    218 packets
 +      udp 138   7 packets
 +
 +[+] iptables log prefix counters:
 +      "​FIREWALL:​ RESET PORT DESC": 8
 +      "​FIREWALL:​ PKGS INVALIDOS":​ 43
 +      "​FIREWALL:​ ACESSO DNS UDP": 218
 +      "​FIREWALL:​ ACCESSO DESCON":​ 319
 +      "​FIREWALL:​ ACESSO SMTP": 4
 +      "​FIREWALL:​ PS E SF": 11
 +      "​FIREWALL:​ ACESSO WEB": 371
 +      "​FIREWALL:​ ACESSO IMAP": 2
 +
 +    iptables auto-blocked IPs:
 +        [NONE]
 +
 +    Total packet counters: tcp: 396, udp: 537, icmp: 0
 +
 +[+] IP Status Detail:
 +        [NONE]
 +
 +    Total scan sources: 0
 +    Total scan destinations:​ 0
 +
 +[+] These results are available in: /​var/​log/​psad/​status.out
 +</​sxh>​
 +
 +
 +Caso tenhamos algum ip em iptables auto-blocked podemos remove com psad -F, podemos obter mais opções com psad -h.
 +
 +
 +===== Referências =====
 +
 +  - http://​cipherdyne.org/​psad/​docs/​
 +  - http://​cipherdyne.org/​psad/​docs/​config.html
 +  - http://​cipherdyne.org/​psad/​docs/​install.html
 +  - http://​cipherdyne.org/​psad/​docs/​syslog.html