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
aptitude update
Agora vamos instalar o psad
aptitude install psad -y
Agora vamos configurar o rsyslogd para controlar os logs que vamos gerar pelo iptables
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 [...]
Agora vamos reiniciar o rsyslog
/etc/init.d/rsyslog restart
Agora vamos pegar um script de firewall de borda como exemplo
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
Agora vamos dar permissão de execucação para ele
chmod +x /etc/init.d/rc.firewall
Agora vamos colocar ele na inicialização do sistema
insserv -f -v rc.firewall
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
ls /etc/psad/ archive auto_dl icmp_types ip_options pf.os posf psad.conf signatures snort_rule_dl snort_rules
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
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;
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.
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. [...]
Não esqueça de configurar um servidor de e-mail ou fazer algum relay para algum servidor.
Agora vamos reiniciar o psad
/etc/init.d/psad restartPodemos listar as estatísticas do psad com o seguinte comando
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
Um exemplo de email enviado pelo psad de um possível ataque
=-=-=-=-=-=-=-=-=-=-=-= 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 =-=-=-=-=-=-=-=-=-=-=-=
Podemos acompanhar agora os logs do iptables em /var/log/iptables
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
Agora vamos consultar novamente as estatísticas do psad
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
Caso tenhamos algum ip em iptables auto-blocked podemos remove com psad -F, podemos obter mais opções com psad -h.