Skip to content

IDS

Ahtapot projesi kapsamında IDS işlevinin kurulumunu ve yönetimini sağlayan playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “ids.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[surcata_ids]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “sudo” satırı ile çalışacak komutların sudo yetkisi ile çalışması belirlenir. “vars_files” satırı ids playbookunun değişken dosyalarını belirtmektedir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base”, “ids”, “barnyard2” ve “pulledpork”rollerinin çalışacağı belirtilmektedir.

- hosts: suricata_ids
  sudo: yes
  vars_files:
  - /etc/ansible/roles/base/vars/group.yml
  - /etc/ansible/roles/base/vars/user.yml
  - /etc/ansible/roles/base/vars/repo.yml
  - /etc/ansible/roles/base/vars/rsyslog.yml
  - /etc/ansible/roles/base/vars/ntp.yml
  - /etc/ansible/roles/base/vars/package.yml
  - /etc/ansible/roles/base/vars/kernelmodules_remove.yml
  - /etc/ansible/roles/base/vars/kernelmodules_blacklist.yml
  - /etc/ansible/roles/base/vars/host.yml
  - /etc/ansible/roles/base/vars/audit.yml
  - /etc/ansible/roles/base/vars/sudo.yml
  - /etc/ansible/roles/base/vars/ssh.yml
  - /etc/ansible/roles/base/vars/grub.yml
  - /etc/ansible/roles/base/vars/logger.yml
  - /etc/ansible/roles/base/vars/logrotate.yml
  - /etc/ansible/roles/base/vars/directory.yml
  - /etc/ansible/roles/base/vars/profile.yml
  - /etc/ansible/roles/base/vars/fusioninventory.yml
  - /etc/ansible/roles/ids/vars/main.yml
  - /etc/ansible/roles/pulledpork/vars/main.yml
  - /etc/ansible/roles/barnyard2/vars/main.yml
  - /etc/ansible/roles/snorby/vars/main.yml
  - /etc/ansible/roles/mysql/vars/main.yml
  - /etc/ansible/roles/ids/vars/blocked-domains.yml
  - /etc/ansible/roles/ids/vars/protocol-anomaly.rules.yml
  - /etc/ansible/roles/ids/vars/fileblacklist.sha256.yml
  - /etc/ansible/roles/ids/vars/fileblacklist.sha1.yml
  - /etc/ansible/roles/ids/vars/fileblacklist.md5.yml
  - /etc/ansible/roles/ids/vars/local.rules.yml
  - /etc/ansible/roles/ids/vars/content.yml
  roles:
    - role: base
    - role: ids
    - role: barnyard2
    - role: pulledpork

IDS Rolü Değişkenleri

Bu roldeki değişkenler “/etc/ansible/roles/ids/vars/” dizini altında bulunan yml dosyalarında belirtilmiştir. yml dosyalarının içerikleri ve değişken bilgileri aşağıdaki gibidir;

  • blocked-domains.yml” dosyasına engellenmesi istenen alan adları girilir. Her satırda bir alan adı olacak şekilde ekleme yapılır.
---
suricata_blocked_domains:
  - testsite123.com
  - badsitetesting.com

  • content.yml” dosyasına engellenmesi veya alarm oluşturulması istenen içerikler girilir. Burada “suricata_keyword_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan içerikler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_keyword_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_keyword_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_keyword_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_keyword_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_keyword_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_keyword_proto” kısmına bu kuralın çalışacağı protokoller liste olarak tanımlanır. TCP, UDP veya her ikisi birlikte yazılabilir. “suricata_keywords” kısmına her satıra bir içerik eklenerek engellenecek/alarm üretilecek içerikler belirtilir.
suricata_keyword_action: alert
suricata_keyword_src: any
suricata_keyword_src_port: any
suricata_keyword_dst: any
suricata_keyword_dst_port: any
suricata_keyword_msg: "Content detection: "
suricata_keyword_proto: ['tcp','udp']
suricata_keywords:
  - test zararli deneme

  • fileblacklist.md5.yml” dosyasına engellenmesi veya alarm oluşturulması istenen hashler girilir. Burada “suricata_blacklistmd5_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan hashler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_blacklistmd5_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_blacklistmd5_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_blacklistmd5_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_blacklistmd5_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_blacklistmd5_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_blacklistmd5_sid” kısmına bu kuralın sid’i yazılır. “suricata_blacklistmd5_revision” kısmına bu kuralın revision’u yazılır. “suricata_blacklistmd5” kısmına her satıra bir md5 ve opsiyonal olarak dosya adı eklenerek engellenecek/alarm üretilecek dosya hashleri belirtilir.
suricata_blacklistmd5_action: alert
suricata_blacklistmd5_src: any
suricata_blacklistmd5_src_port: any
suricata_blacklistmd5_dst: any
suricata_blacklistmd5_dst_port: any
suricata_blacklistmd5_msg: "Black list checksum match MD5"
suricata_blacklistmd5_sid: 1089811401
suricata_blacklistmd5_rev: 1

suricata_blacklistmd5:
  - 2f8d0355f0032c3e6311c6408d7c2dc2  util-path.c
  - b9cf5cf347a70e02fde975fc4e117760
  - 02aaa6c3f4dbae65f5889eeb8f2bbb8d  util-pool.c
  - dd5fc1ee7f2f96b5f12d1a854007a818

  • fileblacklist.sha1.yml” dosyasına engellenmesi veya alarm oluşturulması istenen hashler girilir. Burada “suricata_blacklistsha1_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan hashler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_blacklistsha1_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_blacklistsha1_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_blacklistsha1_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_blacklistsha1_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_blacklistsha1_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_blacklistsha1_sid” kısmına bu kuralın sid’i yazılır. “suricata_blacklistsha1_revision” kısmına bu kuralın revision’u yazılır. “suricata_blacklistsha1” kısmına her satıra bir sha1 ve opsiyonal olarak dosya adı eklenerek engellenecek/alarm üretilecek dosya hashleri belirtilir.
suricata_blacklistsha1_action: alert
suricata_blacklistsha1_src: any
suricata_blacklistsha1_src_port: any
suricata_blacklistsha1_dst: any
suricata_blacklistsha1_dst_port: any
suricata_blacklistsha1_msg: "Black list checksum match SHA1"
suricata_blacklistsha1_sid: 1089811402
suricata_blacklistsha1_rev: 1
suricata_blacklistsha1:

  • fileblacklist.sha256.yml” dosyasına engellenmesi veya alarm oluşturulması istenen hashler girilir. Burada “suricata_blacklistsha256_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan hashler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_blacklistsha256_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_blacklistsha256_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_blacklistsha256_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_blacklistsha256_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_blacklistsha256_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_blacklistsha256_sid” kısmına bu kuralın sid’i yazılır. “suricata_blacklistsha256_revision” kısmına bu kuralın revision’u yazılır. “suricata_blacklistsha256” kısmına her satıra bir sha256 ve opsiyonal olarak dosya adı eklenerek engellenecek/alarm üretilecek dosya hashleri belirtilir.
suricata_blacklistsha256_action: alert
suricata_blacklistsha256_src: any
suricata_blacklistsha256_src_port: any
suricata_blacklistsha256_dst: any
suricata_blacklistsha256_dst_port: any
suricata_blacklistsha256_msg: "Black list checksum match SHA256"
suricata_blacklistsha256_sid: 1089811403
suricata_blacklistsha256_rev: 1

suricata_blacklistsha256:

  • local.rules.yml” dosyasına doğrudan suricata imzaları her satırda bir tane olacak şekilde tanımlanır.
---
suricata_local_rules:

  • suricata_protocol_anomaly_rules.yml” dosyasında protokol anormalliklerini tespit edecek bazı ön tanımlı imzalar girilmiştir. İstenirse her satırda bir tane olacak şekilde ek imzalar tanımlanabilir.
---
suricata_protocol_anomaly_rules:
  - alert tcp any any -> any ![80,8080] (msg:"SURICATA HTTP but not tcp port 80, 8080"; flow:to_server; app-layer-protocol:http; sid:2271001; rev:1;)
  - alert tcp any any -> any 80 (msg:"SURICATA Port 80 but not HTTP"; flow:to_server; app-layer-protocol:!http; sid:2271002; rev:1;)
  - alert http any any -> any 443 (msg:"SURICATA HTTP clear text on port 443"; flow:to_server; app-layer-protocol:http; sid:2271019; rev:1;)
  - alert tcp any any -> any 443 (msg:"SURICATA Port 443 but not TLS"; flow:to_server; app-layer-protocol:!tls; sid:2271003; rev:1;)
  - alert tcp any any -> any ![20,21] (msg:"SURICATA FTP but not tcp port 20 or 21"; flow:to_server; app-layer-protocol:ftp; sid:2271004; rev:1;)
  - alert tcp any any -> any [20,21] (msg:"SURICATA TCP port 21 but not FTP"; flow:to_server; app-layer-protocol:!ftp; sid:2271005; rev:1;)
  - alert tcp any any -> any ![25,587,465] (msg:"SURICATA SMTP but not tcp port 25,587,465"; flow:to_server; app-layer-protocol:smtp; sid:2271006; rev:1;)
  - alert tcp any any -> any [25,587,465] (msg:"SURICATA TCP port 25,587,465 but not SMTP"; flow:to_server; app-layer-protocol:!smtp; sid:2271007; rev:1;)
  - alert tcp any any -> any !22 (msg:"SURICATA SSH but not tcp port 22"; flow:to_server; app-layer-protocol:ssh; sid:2271008; rev:1;)
  - alert tcp any any -> any 22 (msg:"SURICATA TCP port 22 but not SSH"; flow:to_server; app-layer-protocol:!ssh; sid:2271009; rev:1;)
  - alert tcp any any -> any !143 (msg:"SURICATA IMAP but not tcp port 143"; flow:to_server; app-layer-protocol:imap; sid:2271010; rev:1;)
  - alert tcp any any -> any 143 (msg:"SURICATA TCP port 143 but not IMAP"; flow:to_server; app-layer-protocol:!imap; sid:2271011; rev:1;)
  - alert tcp any any -> any 139 (msg:"SURICATA TCP port 139 but not SMB"; flow:to_server; app-layer-protocol:!smb; sid:2271012; rev:1;)
  - alert tcp any any -> any [80,8080] (msg:"SURICATA DCERPC detected over port tcp 80,8080"; flow:to_server; app-layer-protocol:dcerpc; sid:2271013; rev:1;)
  - alert tcp any any -> any 53 (msg:"SURICATA TCP port 53 but not DNS"; flow:to_server; app-layer-protocol:!dns; sid:2271014; rev:1;)
  - alert udp any any -> any 53 (msg:"SURICATA UDP port 53 but not DNS"; flow:to_server; app-layer-protocol:!dns; sid:2271015; rev:1;)
  - alert tcp any any -> any 502 (msg:"SURICATA TCP port 502 but not MODBUS"; flow:to_server; app-layer-protocol:!modbus; sid:2271018; rev:1;)
  • main.yml” dosyasında ids ayarlarının yapılması için gerekli ayar parametreleri bulunmaktadır. Burda ids yapılandırması için gerekli olan parametreler açıklanacaktır. “suricata_mode” ids için buraya ids yazılır. “suricata_home_net:” iç ağ tanımlarının yapıldığı değişkendir. “suricata_external_net” dış ağ tanımlarının yapıldığı parametredir. “suricata_pcap_interfaces” IDS’in paketleri dinleyeceği arabirim tanımlarının yapıldığı yerdir. “-int: arabirim_adi” şeklinde her satıra bir arabirim yazılır. “suricata_rules” aktif edilecek imza gruplarının tanımlandığı yerdir. Aktif edilmesi istenmeyen parametreler başına “#” konularak yorum satırına alınabilir.
---
# defaults file for ansible-suricata
suricata_mode: "ids"#ids|ips
fwbuilder_exists: "false"
suricata_ips_mode: "bridge" #nat|bridge
ips_int_iface_master: enp1s3
ips_ext_iface_master: enp0s3
ips_int_iface_backup: enp1s3
ips_ext_iface_backup: enp0s3
ips_master_hostname: ahtapot-ips
config_suricata: true  #defines if suricata should be configured
scripts_dir: /opt/scripts
suricata_home_net: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
suricata_external_net: "!$HOME_NET"
suricata_http_servers: "$HOME_NET"
suricata_smtp_servers: "$HOME_NET"
suricata_sql_servers: "$HOME_NET"
suricata_dns_servers: "$HOME_NET"
suricata_telnet_servers: "$HOME_NET"
suricata_aim_servers: "$HOME_NET"
suricata_dnp3_server: "$HOME_NET"
suricata_dnp3_client: "$HOME_NET"
suricata_modbus_client: "$HOME_NET"
suricata_modbus_server: "$HOME_NET"
suricata_enip_client: "$HOME_NET"
suricata_enip_server: "$HOME_NET"
suricata_action_order: "$HOME_NET"
suricata_action_order:
  - pass
  - drop
  - reject
  - alert
suricata_af_packet_interfaces:
  - int: eth0
    threads: 1
    defrag: "yes"
    cluster_type: cluster_flow  #cluster_round_robin, cluster_flow or cluster_cpu
    cluster_id: 99
    copy_mode: ips
    copy_iface: eth1
    buffer_size: 64535
    disable_promisc: "no"  # Set to yes to disable promiscuous mode
    use_nmap: "yes"
  - int: eth1
    threads: 1
    defrag: "yes"
    cluster_type: cluster_flow  #cluster_round_robin, cluster_flow or cluster_cpu
    cluster_id: 98
    copy_mode: ips
    copy_iface: eth0
    buffer_size: 64535
    disable_promisc: "no"  # Set to yes to disable promiscuous mode
    use_nmap: "yes"
suricata_pcap_interfaces:
  - int: enp0s3
    # On Linux, pcap will try to use mmaped capture and will use buffer-size
    # as total of memory used by the ring. So set this to something bigger
    # than 1% of your bandwidth.
    buffer_size: 16777216
    bpf_filter: "tcp and port 25"
    # Choose checksum verification mode for the interface. At the moment
    # of the capture, some packets may be with an invalid checksum due to
    # offloading to the network card of the checksum computation.
    # Possible values are:
    #  - yes: checksum validation is forced
    #  - no: checksum validation is disabled
    #  - auto: suricata uses a statistical approach to detect when
    #  checksum off-loading is used. (default)
    # Warning: 'checksum-validation' must be set to yes to have any validation
    checksum_checks: auto
    # With some accelerator cards using a modified libpcap (like myricom), you
    # may want to have the same number of capture threads as the number of capture
    # rings. In this case, set up the threads variable to N to start N threads
    # listening on the same interface.
    threads: 16
    # set to no to disable promiscuous mode:
    promisc: no
    # set snaplen, if not set it defaults to MTU if MTU can be known
    # via ioctl call and to full capture if not.
    snaplen: 1518
# - int: INT1

suricata_classification_file: /etc/suricata/classification.config
suricata_config_file: /etc/suricata/suricata.yaml
suricata_config_outputs: true
suricata_default_rule_path: /etc/suricata/rules
suricata_flow_timeouts:
  - name: default
    new: 30
    established: 300
    closed: 0
    emergency_new: 10
    emergency_established: 100
    emergency_closed: 0
  - name: tcp
    new: 60
    established: 3600
    closed: 120
    emergency_new: 10
    emergency_established: 100
    emergency_closed: 20
  - name: udp
    new: 30
    established: 300
    emergency_new: 10
    emergency_established: 100
  - name: icmp
    new: 30
    established: 300
    emergency_new: 10
    emergency_established: 100
suricata_host_mode: auto  #defines surica operating mode...Options are auto, router (IPS-Mode) or sniffer-only (IDS-Mode)
#    suricata_include_files:  #Files included here will be handled as if they were inlined in the configuration file.
#        - include1.yaml
#        - include2.yaml
suricata_iface: "{{ ansible_default_ipv4.interface }}"  #Interface to listen on (for pcap mode)
suricata_interfaces:  #define the interfaces on your suricata host and define if offloading should be disabled.
  - int: eth0
    disable_offloading: false
    disable_features:
      - gro
      - gso
      - lro
      - rx
      - rxhash
      - rxvlan
      - sg
      - tso
      - tx
      - txvlan
      - ufo
  - int: eth1
    disable_offloading: false
    disable_features:
      - gro
      - gso
      - lro
      - rx
      - rxhash
      - rxvlan
      - sg
      - tso
      - tx
      - txvlan
      - ufo
suricata_listen_mode: pcap  #pcap, nfqueue or af-packet
suricata_log_dir: /var/log/suricata/
suricata_nfqueue: 0  #Queue number to listen on (for nfqueue mode)
suricata_oinkmaster_rules_url: http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
suricata_outputs:
  - name: fast
    enabled: "yes"
    filename: fast.log
    append: "yes"
  - name: eve-log
    enabled: "yes"
    type: file  #file|syslog|unix_dgram|unix_stream
    filename: eve.json
    types:
      - name: alert
      - name: http
        config_addl: true  #defines if additional parameters are to be defined....required for template check
        extended: "yes"  # enable this for extended logging information
      - name: dns
      - name: tls
        config_addl: true  #defines if additional parameters are to be defined....required for template check
        extended: "yes"  # enable this for extended logging information
      - name: files
        config_addl: true  #defines if additional parameters are to be defined....required for template check
        force_magic: "yes"  # force logging magic on all logged files
        force_md5: "yes"  # force logging of md5 checksums
#      - name: "drop"
      - name: ssh
      - name: smtp
      - name: flow
  - name: unified2-alert
    enabled: "yes"
    filename: unified2.alert
    limit: 32mb  # File size limit.  Can be specified in kb, mb, gb.
    xff:
      - var: enabled
        val: "no"
      - var: mode
        val: extra-data
      - var: header
        val: X-Forwarded-For
  - name: http-log
    enabled: "yes"
    filename: http.log
    append: "yes"
  - name: tls-log
    enabled: "no"
    filename: tls.log
    append: "yes"
    certs_log_dir: certs
  - name: dns-log
    enabled: "no"
    filename: dns.log
    append: "yes"
  - name: pcap-info
    enabled: "no"
  - name: pcap-log
    enabled: "no"
    filename: log.pcap
    limit: 1000mb
    max_files: 2000
    mode: normal  # normal or sguil
    use_stream_depth: "no"  #If set to "yes" packets seen after reaching stream inspection depth are ignored. "no" logs all packets
  - name: alert-debug
    enabled: "no"
    filename: alert-debug.log
    append: "yes"
  - name: alert-prelude
    enabled: "no"
    profile: suricata
    log_packet_content: "no"
    log_packet_header: "yes"
  - name: stats
    enabled: "yes"
    filename: stats.log
    interval: 8
  - name: syslog
    enabled: "no"
    facility: local5
    level: Info  # possible levels: Emergency, Alert, Critical, Error, Warning, Notice, Info, Debug
  - name: drop
    enabled: "no"
    filename: drop.log
    append: "yes"
  - name: file-store
    enabled: "no"
    log_dir: files
    force_magic: "no"
    force_md5: "no"
  - name: file-log
    enabled: "no"
    filename: files-json.log
    append: "yes"
    force_magic: "no"
    force_md5: "no"
suricata_pfring_interfaces:
  - int: eth0
    threads: 1
    cluster_id: 99
    cluster_type: cluster_flow
  - int: eth1
    threads: 1
    cluster_id: 93
    cluster_type: cluster_flow
suricata_reference_config_file: /etc/suricata/reference.config
suricata_rules:
  - botcc.rules
  - ciarmy.rules
  - compromised.rules
  - drop.rules
  - dshield.rules
  - emerging-activex.rules
  - emerging-attack_response.rules
  - emerging-chat.rules
  - emerging-current_events.rules
  - emerging-dns.rules
  - emerging-dos.rules
  - emerging-exploit.rules
  - emerging-ftp.rules
  - emerging-games.rules
  - emerging-icmp_info.rules
# - emerging-icmp.rules
  - emerging-imap.rules
  - emerging-inappropriate.rules
  - emerging-malware.rules
  - emerging-misc.rules
  - emerging-mobile_malware.rules
  - emerging-netbios.rules
  - emerging-p2p.rules
  - emerging-policy.rules
  - emerging-pop3.rules
  - emerging-rpc.rules
  - emerging-scada.rules
  - emerging-scan.rules
  - emerging-shellcode.rules
  - emerging-smtp.rules
  - emerging-snmp.rules
  - emerging-sql.rules
  - emerging-telnet.rules
  - emerging-tftp.rules
  - emerging-trojan.rules
  - emerging-user_agents.rules
  - emerging-voip.rules
  - emerging-web_client.rules
  - emerging-web_server.rules
  - emerging-web_specific_apps.rules
  - emerging-worm.rules
  - tor.rules
  - dns_query.rules
  - protocol-anomaly.rules
  - blacklist.rules
  - local.rules
  - content.rules
  - decoder-events.rules # available in suricata sources under rules dir
  - stream-events.rules  # available in suricata sources under rules dir
  - http-events.rules    # available in suricata sources under rules dir
  - smtp-events.rules    # available in suricata sources under rules dir
  - dns-events.rules     # available in suricata sources under rules dir
  - tls-events.rules     # available in suricata sources under rules dir
suricata_run_initd: 'yes'  #set to yes to start the server in the init.d script
suricata_suppress_list:  #Defines a list of alerts to suppress
  - gen_id: 1
    sig_id: 2210020
#    track: by_src  #options are: by_src|by_dst
#    ip_addresses:  #define IP addressORsubnet if setting up track by
#      - 172.16.0.0/16
#      - 192.168.1.0/24
  - gen_id: 1
    sig_id: 2210021
  - gen_id: 1
    sig_id: 2210029
suricata_ubuntu_ppa: ppa:oisf/suricata-stable  #Options are ppa:oisf/suricata-stable, ppa:oisf/suricata-beta or ppa:oisf/suricata-daily
suricata_unix_command:
  enabled: "no"
#        filename: custom.socket

IPS

Ahtapot projesi kapsamında IPS işlevinin kurulumunu ve yönetimini sağlayan playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “ips.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[surcata_ips]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “sudo” satırı ile çalışacak komutların sudo yetkisi ile çalışması belirlenir. “vars_files” satırı ips playbookunun değişken dosyalarını belirtmektedir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base”, “ips”, “barnyard2” ve “pulledpork”rollerinin çalışacağı belirtilmektedir.

- hosts: suricata_ids
  sudo: yes
  vars_files:
  - /etc/ansible/roles/base/vars/group.yml
  - /etc/ansible/roles/base/vars/user.yml
  - /etc/ansible/roles/base/vars/repo.yml
  - /etc/ansible/roles/base/vars/rsyslog.yml
  - /etc/ansible/roles/base/vars/ntp.yml
  - /etc/ansible/roles/base/vars/package.yml
  - /etc/ansible/roles/base/vars/kernelmodules_remove.yml
  - /etc/ansible/roles/base/vars/kernelmodules_blacklist.yml
  - /etc/ansible/roles/base/vars/host.yml
  - /etc/ansible/roles/base/vars/audit.yml
  - /etc/ansible/roles/base/vars/sudo.yml
  - /etc/ansible/roles/base/vars/ssh.yml
  - /etc/ansible/roles/base/vars/grub.yml
  - /etc/ansible/roles/base/vars/logger.yml
  - /etc/ansible/roles/base/vars/logrotate.yml
  - /etc/ansible/roles/base/vars/directory.yml
  - /etc/ansible/roles/base/vars/profile.yml
  - /etc/ansible/roles/base/vars/fusioninventory.yml
  - /etc/ansible/roles/ips/vars/main.yml
  - /etc/ansible/roles/pulledpork/vars/main.yml
  - /etc/ansible/roles/barnyard2/vars/main.yml
  - /etc/ansible/roles/snorby/vars/main.yml
  - /etc/ansible/roles/mysql/vars/main.yml
  - /etc/ansible/roles/ips/vars/blocked-domains.yml
  - /etc/ansible/roles/ips/vars/protocol-anomaly.rules.yml
  - /etc/ansible/roles/ips/vars/fileblacklist.sha256.yml
  - /etc/ansible/roles/ips/vars/fileblacklist.sha1.yml
  - /etc/ansible/roles/ips/vars/fileblacklist.md5.yml
  - /etc/ansible/roles/ips/vars/local.rules.yml
  - /etc/ansible/roles/ips/vars/content.yml
  roles:
    - role: base
    - role: ips
    - role: barnyard2
    - role: pulledpork

IPS Rolü Değişkenleri

Bu roldeki değişkenler “/etc/ansible/roles/ips/vars/” dizini altında bulunan yml dosyalarında belirtilmiştir. yml dosyalarının içerikleri ve değişken bilgileri aşağıdaki gibidir;

  • blocked-domains.yml” dosyasına engellenmesi istenen alan adları girilir. Her satırda bir alan adı olacak şekilde ekleme yapılır.
---
suricata_blocked_domains:
  - testsite123.com
  - badsitetesting.com

  • content.yml” dosyasına engellenmesi veya alarm oluşturulması istenen içerikler girilir. Burada “suricata_keyword_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan içerikler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_keyword_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_keyword_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_keyword_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_keyword_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_keyword_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_keyword_proto” kısmına bu kuralın çalışacağı protokoller liste olarak tanımlanır. TCP, UDP veya her ikisi birlikte yazılabilir. “suricata_keywords” kısmına her satıra bir içerik eklenerek engellenecek/alarm üretilecek içerikler belirtilir.
suricata_keyword_action: alert
suricata_keyword_src: any
suricata_keyword_src_port: any
suricata_keyword_dst: any
suricata_keyword_dst_port: any
suricata_keyword_msg: "Content detection: "
suricata_keyword_proto: ['tcp','udp']
suricata_keywords:
  - test zararli deneme

  • fileblacklist.md5.yml” dosyasına engellenmesi veya alarm oluşturulması istenen hashler girilir. Burada “suricata_blacklistmd5_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan hashler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_blacklistmd5_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_blacklistmd5_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_blacklistmd5_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_blacklistmd5_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_blacklistmd5_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_blacklistmd5_sid” kısmına bu kuralın sid’i yazılır. “suricata_blacklistmd5_revision” kısmına bu kuralın revision’u yazılır. “suricata_blacklistmd5” kısmına her satıra bir md5 ve opsiyonal olarak dosya adı eklenerek engellenecek/alarm üretilecek dosya hashleri belirtilir.
suricata_blacklistmd5_action: alert
suricata_blacklistmd5_src: any
suricata_blacklistmd5_src_port: any
suricata_blacklistmd5_dst: any
suricata_blacklistmd5_dst_port: any
suricata_blacklistmd5_msg: "Black list checksum match MD5"
suricata_blacklistmd5_sid: 1089811401
suricata_blacklistmd5_rev: 1

suricata_blacklistmd5:
  - 2f8d0355f0032c3e6311c6408d7c2dc2  util-path.c
  - b9cf5cf347a70e02fde975fc4e117760
  - 02aaa6c3f4dbae65f5889eeb8f2bbb8d  util-pool.c
  - dd5fc1ee7f2f96b5f12d1a854007a818

  • fileblacklist.sha1.yml” dosyasına engellenmesi veya alarm oluşturulması istenen hashler girilir. Burada “suricata_blacklistsha1_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan hashler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_blacklistsha1_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_blacklistsha1_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_blacklistsha1_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_blacklistsha1_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_blacklistsha1_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_blacklistsha1_sid” kısmına bu kuralın sid’i yazılır. “suricata_blacklistsha1_revision” kısmına bu kuralın revision’u yazılır. “suricata_blacklistsha1” kısmına her satıra bir sha1 ve opsiyonal olarak dosya adı eklenerek engellenecek/alarm üretilecek dosya hashleri belirtilir.
suricata_blacklistsha1_action: alert
suricata_blacklistsha1_src: any
suricata_blacklistsha1_src_port: any
suricata_blacklistsha1_dst: any
suricata_blacklistsha1_dst_port: any
suricata_blacklistsha1_msg: "Black list checksum match SHA1"
suricata_blacklistsha1_sid: 1089811402
suricata_blacklistsha1_rev: 1
suricata_blacklistsha1:

  • fileblacklist.sha256.yml” dosyasına engellenmesi veya alarm oluşturulması istenen hashler girilir. Burada “suricata_blacklistsha256_action” alert veya drop olabilir. “alert” yazılırsa bu dosyada tanımlaması yapılan hashler için alarm üretilir. “drop” yazılırsa ids modu için yine alarm üretilir fakat ips modu için engelleme yapılır. “suricata_blacklistsha256_src” kısmına alarm üretilcek/engellenecek trafiğinin kaynak adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün kaynak adresler için bu kural tetiklenir. “suricata_blacklistsha256_src_port” kısmına alarm üretilcek/engellenecek trafiğinin kaynak portu yazılır. “any” yazılarak bütün kaynak portlar için bu kural tetiklenir. “suricata_blacklistsha256_dst” kısmına alarm üretilcek/engellenecek trafiğinin hedef adresi yazılır. Bu adres IP veya ağ veya bunların bir listesi olabilir. “any” yazılarak bütün hedef adresler için bu kural tetiklenir. “suricata_blacklistsha256_dst_port” kısmına alarm üretilcek/engellenecek trafiğinin hedef portu yazılır. “any” yazılarak bütün hedef portlar için bu kural tetiklenir. “suricata_blacklistsha256_msg” kısmına bu kural tarafından üretilen alarmlarda geçecek mesaj tanımlanır. “suricata_blacklistsha256_sid” kısmına bu kuralın sid’i yazılır. “suricata_blacklistsha256_revision” kısmına bu kuralın revision’u yazılır. “suricata_blacklistsha256” kısmına her satıra bir sha256 ve opsiyonal olarak dosya adı eklenerek engellenecek/alarm üretilecek dosya hashleri belirtilir.
suricata_blacklistsha256_action: alert
suricata_blacklistsha256_src: any
suricata_blacklistsha256_src_port: any
suricata_blacklistsha256_dst: any
suricata_blacklistsha256_dst_port: any
suricata_blacklistsha256_msg: "Black list checksum match SHA256"
suricata_blacklistsha256_sid: 1089811403
suricata_blacklistsha256_rev: 1

suricata_blacklistsha256:

  • local.rules.yml” dosyasına doğrudan suricata imzaları her satırda bir tane olacak şekilde tanımlanır.
---
suricata_local_rules:

  • suricata_protocol_anomaly_rules.yml” dosyasında protokol anormalliklerini tespit edecek bazı ön tanımlı imzalar girilmiştir. İstenirse her satırda bir tane olacak şekilde ek imzalar tanımlanabilir.
---
suricata_protocol_anomaly_rules:
  - alert tcp any any -> any ![80,8080] (msg:"SURICATA HTTP but not tcp port 80, 8080"; flow:to_server; app-layer-protocol:http; sid:2271001; rev:1;)
  - alert tcp any any -> any 80 (msg:"SURICATA Port 80 but not HTTP"; flow:to_server; app-layer-protocol:!http; sid:2271002; rev:1;)
  - alert http any any -> any 443 (msg:"SURICATA HTTP clear text on port 443"; flow:to_server; app-layer-protocol:http; sid:2271019; rev:1;)
  - alert tcp any any -> any 443 (msg:"SURICATA Port 443 but not TLS"; flow:to_server; app-layer-protocol:!tls; sid:2271003; rev:1;)
  - alert tcp any any -> any ![20,21] (msg:"SURICATA FTP but not tcp port 20 or 21"; flow:to_server; app-layer-protocol:ftp; sid:2271004; rev:1;)
  - alert tcp any any -> any [20,21] (msg:"SURICATA TCP port 21 but not FTP"; flow:to_server; app-layer-protocol:!ftp; sid:2271005; rev:1;)
  - alert tcp any any -> any ![25,587,465] (msg:"SURICATA SMTP but not tcp port 25,587,465"; flow:to_server; app-layer-protocol:smtp; sid:2271006; rev:1;)
  - alert tcp any any -> any [25,587,465] (msg:"SURICATA TCP port 25,587,465 but not SMTP"; flow:to_server; app-layer-protocol:!smtp; sid:2271007; rev:1;)
  - alert tcp any any -> any !22 (msg:"SURICATA SSH but not tcp port 22"; flow:to_server; app-layer-protocol:ssh; sid:2271008; rev:1;)
  - alert tcp any any -> any 22 (msg:"SURICATA TCP port 22 but not SSH"; flow:to_server; app-layer-protocol:!ssh; sid:2271009; rev:1;)
  - alert tcp any any -> any !143 (msg:"SURICATA IMAP but not tcp port 143"; flow:to_server; app-layer-protocol:imap; sid:2271010; rev:1;)
  - alert tcp any any -> any 143 (msg:"SURICATA TCP port 143 but not IMAP"; flow:to_server; app-layer-protocol:!imap; sid:2271011; rev:1;)
  - alert tcp any any -> any 139 (msg:"SURICATA TCP port 139 but not SMB"; flow:to_server; app-layer-protocol:!smb; sid:2271012; rev:1;)
  - alert tcp any any -> any [80,8080] (msg:"SURICATA DCERPC detected over port tcp 80,8080"; flow:to_server; app-layer-protocol:dcerpc; sid:2271013; rev:1;)
  - alert tcp any any -> any 53 (msg:"SURICATA TCP port 53 but not DNS"; flow:to_server; app-layer-protocol:!dns; sid:2271014; rev:1;)
  - alert udp any any -> any 53 (msg:"SURICATA UDP port 53 but not DNS"; flow:to_server; app-layer-protocol:!dns; sid:2271015; rev:1;)
  - alert tcp any any -> any 502 (msg:"SURICATA TCP port 502 but not MODBUS"; flow:to_server; app-layer-protocol:!modbus; sid:2271018; rev:1;)
  • main.yml” dosyasında ips ayarlarının yapılması için gerekli ayar parametreleri bulunmaktadır. Burda ips yapılandırması için gerekli olan parametreler açıklanacaktır. “suricata_mode” ips için buraya ips yazılır. Eğer ips kurulacak makinede firewall kuralları fwbuilder tarafından yönetiliyorsa “fwbuilder_exists” paarametresi “true” yapılır yoksa “false” yapılır. “suricata_ips_mode” parametresi ips’in çalışma şeklini belirtmektedir. Router modu için “nat”, bridge modu için “bridge” yazılır. Eğer ips bridge modunda çalışacaksa iç ağ trafiğinin geçeceği arabirim “ips_int_iface_master” dış ağ trafiğinin geçeceği arabirim “ips_ext_iface_master” parametrseinde ayarlanır. Eğer kurulum yedekli yapılıyorsa bu durumda hosts dosyası altında tanımlanan IPS sunucu isimlerinden master olması istenen sunucunun adı “ips_master_hostname” değişkenine yazılır. Bu durumda pasif modda olan sunucunun iç ve dış ağ arabirimleri sırasıyla “ips_int_iface_backup” ve “ips_ext_iface_backup” değişkenlerine yazılır. “suricata_home_net” iç ağ tanımlarının yapıldığı değişkendir. “suricata_external_net” dış ağ tanımlarının yapıldığı parametredir. “suricata_rules” aktif edilecek imza gruplarının tanımlandığı yerdir. Aktif edilmesi istenmeyen parametreler başına “#” konularak yorum satırına alınabilir.
---
# defaults file for ansible-suricata
suricata_mode: "ids"#ids|ips
fwbuilder_exists: "false"
suricata_ips_mode: "bridge" #nat|bridge
ips_int_iface_master: enp1s3
ips_ext_iface_master: enp0s3
ips_int_iface_backup: enp1s3
ips_ext_iface_backup: enp0s3
ips_master_hostname: ahtapot-ips
config_suricata: true  #defines if suricata should be configured
scripts_dir: /opt/scripts
suricata_home_net: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
suricata_external_net: "!$HOME_NET"
suricata_http_servers: "$HOME_NET"
suricata_smtp_servers: "$HOME_NET"
suricata_sql_servers: "$HOME_NET"
suricata_dns_servers: "$HOME_NET"
suricata_telnet_servers: "$HOME_NET"
suricata_aim_servers: "$HOME_NET"
suricata_dnp3_server: "$HOME_NET"
suricata_dnp3_client: "$HOME_NET"
suricata_modbus_client: "$HOME_NET"
suricata_modbus_server: "$HOME_NET"
suricata_enip_client: "$HOME_NET"
suricata_enip_server: "$HOME_NET"
suricata_action_order: "$HOME_NET"
suricata_action_order:
  - pass
  - drop
  - reject
  - alert
suricata_af_packet_interfaces:
  - int: eth0
    threads: 1
    defrag: "yes"
    cluster_type: cluster_flow  #cluster_round_robin, cluster_flow or cluster_cpu
    cluster_id: 99
    copy_mode: ips
    copy_iface: eth1
    buffer_size: 64535
    disable_promisc: "no"  # Set to yes to disable promiscuous mode
    use_nmap: "yes"
  - int: eth1
    threads: 1
    defrag: "yes"
    cluster_type: cluster_flow  #cluster_round_robin, cluster_flow or cluster_cpu
    cluster_id: 98
    copy_mode: ips
    copy_iface: eth0
    buffer_size: 64535
    disable_promisc: "no"  # Set to yes to disable promiscuous mode
    use_nmap: "yes"
suricata_pcap_interfaces:
  - int: enp0s3
    # On Linux, pcap will try to use mmaped capture and will use buffer-size
    # as total of memory used by the ring. So set this to something bigger
    # than 1% of your bandwidth.
    buffer_size: 16777216
    bpf_filter: "tcp and port 25"
    # Choose checksum verification mode for the interface. At the moment
    # of the capture, some packets may be with an invalid checksum due to
    # offloading to the network card of the checksum computation.
    # Possible values are:
    #  - yes: checksum validation is forced
    #  - no: checksum validation is disabled
    #  - auto: suricata uses a statistical approach to detect when
    #  checksum off-loading is used. (default)
    # Warning: 'checksum-validation' must be set to yes to have any validation
    checksum_checks: auto
    # With some accelerator cards using a modified libpcap (like myricom), you
    # may want to have the same number of capture threads as the number of capture
    # rings. In this case, set up the threads variable to N to start N threads
    # listening on the same interface.
    threads: 16
    # set to no to disable promiscuous mode:
    promisc: no
    # set snaplen, if not set it defaults to MTU if MTU can be known
    # via ioctl call and to full capture if not.
    snaplen: 1518
# - int: INT1

suricata_classification_file: /etc/suricata/classification.config
suricata_config_file: /etc/suricata/suricata.yaml
suricata_config_outputs: true
suricata_default_rule_path: /etc/suricata/rules
suricata_flow_timeouts:
  - name: default
    new: 30
    established: 300
    closed: 0
    emergency_new: 10
    emergency_established: 100
    emergency_closed: 0
  - name: tcp
    new: 60
    established: 3600
    closed: 120
    emergency_new: 10
    emergency_established: 100
    emergency_closed: 20
  - name: udp
    new: 30
    established: 300
    emergency_new: 10
    emergency_established: 100
  - name: icmp
    new: 30
    established: 300
    emergency_new: 10
    emergency_established: 100
suricata_host_mode: auto  #defines surica operating mode...Options are auto, router (IPS-Mode) or sniffer-only (IDS-Mode)
#    suricata_include_files:  #Files included here will be handled as if they were inlined in the configuration file.
#        - include1.yaml
#        - include2.yaml
suricata_iface: "{{ ansible_default_ipv4.interface }}"  #Interface to listen on (for pcap mode)
suricata_interfaces:  #define the interfaces on your suricata host and define if offloading should be disabled.
  - int: eth0
    disable_offloading: false
    disable_features:
      - gro
      - gso
      - lro
      - rx
      - rxhash
      - rxvlan
      - sg
      - tso
      - tx
      - txvlan
      - ufo
  - int: eth1
    disable_offloading: false
    disable_features:
      - gro
      - gso
      - lro
      - rx
      - rxhash
      - rxvlan
      - sg
      - tso
      - tx
      - txvlan
      - ufo
suricata_listen_mode: pcap  #pcap, nfqueue or af-packet
suricata_log_dir: /var/log/suricata/
suricata_nfqueue: 0  #Queue number to listen on (for nfqueue mode)
suricata_oinkmaster_rules_url: http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
suricata_outputs:
  - name: fast
    enabled: "yes"
    filename: fast.log
    append: "yes"
  - name: eve-log
    enabled: "yes"
    type: file  #file|syslog|unix_dgram|unix_stream
    filename: eve.json
    types:
      - name: alert
      - name: http
        config_addl: true  #defines if additional parameters are to be defined....required for template check
        extended: "yes"  # enable this for extended logging information
      - name: dns
      - name: tls
        config_addl: true  #defines if additional parameters are to be defined....required for template check
        extended: "yes"  # enable this for extended logging information
      - name: files
        config_addl: true  #defines if additional parameters are to be defined....required for template check
        force_magic: "yes"  # force logging magic on all logged files
        force_md5: "yes"  # force logging of md5 checksums
#      - name: "drop"
      - name: ssh
      - name: smtp
      - name: flow
  - name: unified2-alert
    enabled: "yes"
    filename: unified2.alert
    limit: 32mb  # File size limit.  Can be specified in kb, mb, gb.
    xff:
      - var: enabled
        val: "no"
      - var: mode
        val: extra-data
      - var: header
        val: X-Forwarded-For
  - name: http-log
    enabled: "yes"
    filename: http.log
    append: "yes"
  - name: tls-log
    enabled: "no"
    filename: tls.log
    append: "yes"
    certs_log_dir: certs
  - name: dns-log
    enabled: "no"
    filename: dns.log
    append: "yes"
  - name: pcap-info
    enabled: "no"
  - name: pcap-log
    enabled: "no"
    filename: log.pcap
    limit: 1000mb
    max_files: 2000
    mode: normal  # normal or sguil
    use_stream_depth: "no"  #If set to "yes" packets seen after reaching stream inspection depth are ignored. "no" logs all packets
  - name: alert-debug
    enabled: "no"
    filename: alert-debug.log
    append: "yes"
  - name: alert-prelude
    enabled: "no"
    profile: suricata
    log_packet_content: "no"
    log_packet_header: "yes"
  - name: stats
    enabled: "yes"
    filename: stats.log
    interval: 8
  - name: syslog
    enabled: "no"
    facility: local5
    level: Info  # possible levels: Emergency, Alert, Critical, Error, Warning, Notice, Info, Debug
  - name: drop
    enabled: "no"
    filename: drop.log
    append: "yes"
  - name: file-store
    enabled: "no"
    log_dir: files
    force_magic: "no"
    force_md5: "no"
  - name: file-log
    enabled: "no"
    filename: files-json.log
    append: "yes"
    force_magic: "no"
    force_md5: "no"
suricata_pfring_interfaces:
  - int: eth0
    threads: 1
    cluster_id: 99
    cluster_type: cluster_flow
  - int: eth1
    threads: 1
    cluster_id: 93
    cluster_type: cluster_flow
suricata_reference_config_file: /etc/suricata/reference.config
suricata_rules:
  - botcc.rules
  - ciarmy.rules
  - compromised.rules
  - drop.rules
  - dshield.rules
  - emerging-activex.rules
  - emerging-attack_response.rules
  - emerging-chat.rules
  - emerging-current_events.rules
  - emerging-dns.rules
  - emerging-dos.rules
  - emerging-exploit.rules
  - emerging-ftp.rules
  - emerging-games.rules
  - emerging-icmp_info.rules
# - emerging-icmp.rules
  - emerging-imap.rules
  - emerging-inappropriate.rules
  - emerging-malware.rules
  - emerging-misc.rules
  - emerging-mobile_malware.rules
  - emerging-netbios.rules
  - emerging-p2p.rules
  - emerging-policy.rules
  - emerging-pop3.rules
  - emerging-rpc.rules
  - emerging-scada.rules
  - emerging-scan.rules
  - emerging-shellcode.rules
  - emerging-smtp.rules
  - emerging-snmp.rules
  - emerging-sql.rules
  - emerging-telnet.rules
  - emerging-tftp.rules
  - emerging-trojan.rules
  - emerging-user_agents.rules
  - emerging-voip.rules
  - emerging-web_client.rules
  - emerging-web_server.rules
  - emerging-web_specific_apps.rules
  - emerging-worm.rules
  - tor.rules
  - dns_query.rules
  - protocol-anomaly.rules
  - blacklist.rules
  - local.rules
  - content.rules
  - decoder-events.rules # available in suricata sources under rules dir
  - stream-events.rules  # available in suricata sources under rules dir
  - http-events.rules    # available in suricata sources under rules dir
  - smtp-events.rules    # available in suricata sources under rules dir
  - dns-events.rules     # available in suricata sources under rules dir
  - tls-events.rules     # available in suricata sources under rules dir
suricata_run_initd: 'yes'  #set to yes to start the server in the init.d script
suricata_suppress_list:  #Defines a list of alerts to suppress
  - gen_id: 1
    sig_id: 2210020
#    track: by_src  #options are: by_src|by_dst
#    ip_addresses:  #define IP addressORsubnet if setting up track by
#      - 172.16.0.0/16
#      - 192.168.1.0/24
  - gen_id: 1
    sig_id: 2210021
  - gen_id: 1
    sig_id: 2210029
suricata_ubuntu_ppa: ppa:oisf/suricata-stable  #Options are ppa:oisf/suricata-stable, ppa:oisf/suricata-beta or ppa:oisf/suricata-daily
suricata_unix_command:
  enabled: "no"
#        filename: custom.socket

Eğer IPS sistemi güvenlik duvarı ile entegre kurulacaksa FirewallBuilder üzerinden ayarlamaların yapılması gerekmektedir.

IPS eğer NAT/Router modda kullanılacaksa şu adımların izlenmesi gerekir:

1- Firewalls > Firwall_Obje > Policy > Çift Klik > Top Rule Set [ ] işareti kaldırılır. 2- Firewalls > Firwall_Obje > Sağ Klik > New Policy Rule Set denilerek yeni policy oluşturulur. Name: 00_SuricataNFQ [x] Top Rule Set işaretlenir. 3- Eklenen yeni Policy tablosuna 1 kural eklenir ve Options kısmında logging off seçilir. 4- Eklenen kuralın Rule Options kısmında aşağıdaki işlemler yapılır. a- Assume firewall is part of “any” for this rule only: off b- Stateless Rule [ ] işareti kaldırılır. 5- Kuralın ACTION kısmında Custom seçilir ve aşağıdaki değer yazılır.

nproc komutu ile cpu core sayısı belirlenir ve aşağıdaki kuraldaki uygun alana yazılır. /usr/bin/nproc Cpu Core Sayısı: 4

-j NFQUEUE –queue-balance 1:4 –queue-bypass

Eğer 1 tane cpu core var ise kural’ın ACTION kısmı aşağıdaki gibi yazılır.

-j NFQUEUE –queue-num 1 –queue-bypass

Not: queue-bypass parametresi ile suricata servisi çalışmıyor ise trafiği alttaki kurallardan işletmeye devam eder.

IPS eğer Bridge modda kullanılacaksa şu adımların izlenmesi gerekir:

1- Firewalls > Firwall_Obje > Policy > Çift Klik > Top Rule Set [ ] işareti kaldırılır. 2- Firewalls > Firwall_Obje > Sağ Klik > New Policy Rule Set denilerek yeni policy oluşturulur. Name: 00_SuricataNFQ [x] Top Rule Set işaretlenir. 3- Eklenen yeni Policy tablosuna 2 kural eklenir ve Options kısmında logging off seçilir. 4- Eklenen kuralların Rule Options kısmında aşağıdaki işlemler yapılır. a- Assume firewall is part of “any” for this rule only: off b- Stateless Rule [ ] işareti kaldırılır. 5- Eklenen kuralların Direction kısımları düzenlenir. a- 1 nolu kuralın Direction’u OUTBOUND olarak ayarlanır. b- 2 nolu kuralın Direction’u INBOUND olarak ayarlanır. 6- Kuralların ACTION kısmında Custom seçilir ve aşağıdaki değer yazılır.

nproc komut ile cpu core sayısı belirlenir ve aşağıdaki kuraldaki uygun alana yazılır. /usr/bin/nproc Cpu Core Sayısı: 4

a- OUTBOUND ACTION -m physdev –physdev-in eth1 –physdev-out eth2 -j NFQUEUE –queue-bypass –queue-balance 1:4 b- INBOUND ACTION -m physdev –physdev-in eth2 –physdev-out eth1 -j NFQUEUE –queue-bypass –queue-balance 1:4

Eğer 1 tane cpu core var ise kural’ın ACTION kısmı aşağıdaki gibi yazılır.

a- OUTBOUND ACTION -m physdev –physdev-in eth1 –physdev-out eth2 -j NFQUEUE –queue-bypass –queue-num 1 b- INBOUND ACTION -m physdev –physdev-in eth2 –physdev-out eth1 -j NFQUEUE –queue-bypass –queue-num 1

Not: queue-bypass parametresi ile suricata servisi çalışmıyor ise trafiği alttaki kurallardan işletmeye devam eder.

Pulledpork

Pulledpork rolü “ids” ve “ips” tarafından kullanılmaktadır.

Pulledpork Rolü Değişkenleri

Bu roldeki değişkenler “/etc/ansible/roles/pulledpork/vars/” dizini altında bulunan yml dosyalarında belirtilmiştir. yml dosyalarının içerikleri ve değişken bilgileri aşağıdaki gibidir;

  • main.yml” dosyasındaki parametreler şu şekildedir: “pulledpork_etpro_key” Emerging Threats Pro lisansı için kullanılan anahtardır. “pulledpork_rule_url” Pulledpork tarafından suricata imzalarının indirileceği URL’dir. “pulledpork_rule_file” Pulledpork tarafından indirilecek imza dosyasının adıdır. “pulledpork_update_frequency” Pulledpork güncelleme sıklığının belirlendiği parametredir.
pulledpork_etpro_key: open
pulledpork_rule_url: https://rules.emergingthreats.net/
pulledpork_rule_file: emerging.rules.tar.gz
pulledpork_exclude_rules:
#  - pass
pulledpork_update_frequency: daily

Barnyard2

Barnyard2 rolü “ids” ve “ips” tarafından kullanılmaktadır.

Barnyard2 Rolü Değişkenleri

Bu roldeki değişkenler “/etc/ansible/roles/barnyard2/vars/” dizini altında bulunan yml dosyalarında belirtilmiştir. yml dosyalarının içerikleri ve değişken bilgileri aşağıdaki gibidir;

  • main.yml” dosyasındaki parametreler şu şekildedir: “barnyard2_interface” Aslında görsel amaçlı kullanılmaktadır. Alarmların ids/ips’in hangi arabirimden geldiğini belirlemek için kullanılır. “barnyard2_mysql_user” Barnyard’ın alarmları göndereceği mysql sunucusuna bağlanırken kullanacağı kullanıcı adıdır. “barnyard2_mysql_password” Barnyard’ın alarmları göndereceği mysql sunucusuna bağlanırken kullanacağı şifredir. “barnyard2_mysql_host” Barnyard’ın alarmları göndereceği mysql sunucusunun adresidir. “barnyard2_sensor_name” Görsellik amaçlı alarmların geldiği sensörün adıdır.
---
barnyard2_interface: enp0s3
barnyard2_mysql_user: root
barnyard2_mysql_password: root
barnyard2_host: 127.0.0.1
barnyard2_sensor_name: ids_1

Snorby

Ahtapot projesi kapsamında Snorby işlevinin kurulumunu ve yönetimini sağlayan playbook’dur. “/etc/ansible/playbooks/” dizini altında bulunan “snorby.yml” dosyasına bakıldığında, “hosts” satırında Ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[snorby]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “sudo” satırı ile çalışacak komutların sudo yetkisi ile çalışması belirlenir. “vars_files” satırı ids playbookunun değişken dosyalarını belirtmektedir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “base”, “ ve “snorby”rollerinin çalışacağı belirtilmektedir.

- hosts: snorby
  sudo: yes
  vars_files:
  - /etc/ansible/roles/base/vars/group.yml
  - /etc/ansible/roles/base/vars/user.yml
  - /etc/ansible/roles/base/vars/repo.yml
  - /etc/ansible/roles/base/vars/rsyslog.yml
  - /etc/ansible/roles/base/vars/ntp.yml
  - /etc/ansible/roles/base/vars/package.yml
  - /etc/ansible/roles/base/vars/kernelmodules_remove.yml
  - /etc/ansible/roles/base/vars/kernelmodules_blacklist.yml
  - /etc/ansible/roles/base/vars/host.yml
  - /etc/ansible/roles/base/vars/audit.yml
  - /etc/ansible/roles/base/vars/sudo.yml
  - /etc/ansible/roles/base/vars/ssh.yml
  - /etc/ansible/roles/base/vars/grub.yml
  - /etc/ansible/roles/base/vars/logger.yml
  - /etc/ansible/roles/base/vars/logrotate.yml
  - /etc/ansible/roles/base/vars/directory.yml
  - /etc/ansible/roles/base/vars/profile.yml
  - /etc/ansible/roles/base/vars/fusioninventory.yml
  - /etc/ansible/roles/snorby/vars/main.yml

  roles:
    - role: base
    - role: snorby

Snorby Rolü Değişkenleri

Bu roldeki değişkenler “/etc/ansible/roles/snorby/vars/” dizini altında bulunan yml dosyalarında belirtilmiştir. yml dosyalarının içerikleri ve değişken bilgileri aşağıdaki gibidir;

  • main.yml” dosyasındaki parametreler şu şekildedir: “snorby_company_name” snorby arayüzünde görüntülenecek kurum ismidir. “snorby_domain” parametresi snorby’nin çalıştığı alan adıdır. “snorby_email” snorby arabirimine giriş için kullanılacak ve e-postaların göderileceği e-posta adresidir. “snorby_password” snorby girişinde kullanılacak şifredir. “snorby_mysql_user” snorby’nin mysql sunucusuna bağlanırken kullandığı kullanıcı adıdır. “snorby_mysql_password” snorby’nin mysql’ bağlanırken kullanacağı şifredir. “snorby_mysql_host” snorby’nin kullandığı mysql sunucusunun çalıştığı adrestir.
---
snorby_company_name: Ahtapot
snorby_domain: pardus
snorby_email: snorby@pardus
snorby_password: snorby
snorby_mysql_user: snorby
snorby_mysql_password: snorby
snorby_mysql_host: localhost

Kurulum tamamlandıktan sonra snorby’ye web erişim adresi kullanılarak bağlanılır.

Snorby Web Adresi: http://cihaz_ip_adresi:3000

IPS

Dashboard 1- Snorby menü opsiyonlarının bulunduğu alandır. Bu alanda yer alan menüleri kullanarak uyarı ve sensör listestelerine ulaşılabilir. Ayrıca Search kısmı kullanılarak detaylı arama yapılabilir. 2- Snorby’nin genel ayarları, imza sınıfları ve servis durumları gibi ayarların yapılabildiği alt menülere erişim sağlar. 3- Dashboard üzerinde görüntülenen verinin tarih filtresidir. 4- Uyarıların kiritiklik seviyesine göre istatistiklerinin gösterildiği alandır. Üzerine tıklanarak detaylarına ulaşılabilir. 5- Pasta ve zaman çizelgesi tiplerine göre bazı istatistiklerin yer aldığı alandır. 6- PDF dışa aktarma, zaman filtresi gibi opsiyonların bulunduğu alandır. 7- Sistemde yer alan ve en çok uyarı kaydı olan 5 sensör’ün listelendiği alandır. 8- Snorby sistemini en çok kullanan 5 kullanıcının listelendiği alandır. 9- En son kaydedilen farklı türkdeki 5 uyarı kaydının listelendiği alandır. 10- Uyarıların sınıflarına göre kategorize edilerek listelendiği alandır.

Events Bütün saldırı uyarılarının görüntülendiği bölümdür.

IPS

Uyarı Detayı İlgili saldırı üzerine tıklanarak saldırı hakkında detay bilgiye ulaşılabilir.

IPS

1- Bu uyarı ile ilgili yapılabilecek işlemlerin opsiyonlarının bulunduğu alandır. 2- IP başlık bilgilerinin yer aldığı alandır. IP Adresi üzerine tıklayarak iIP adresine isim verebilir, bu IP adresi ile ilgili whois sorgusu gerçekleştirilebilir veya uyarı veri tabanındaki geçmiş olayları aranabilir. 3- İmzaya ilişkin bilgilerin bulunduğu alandır. Bu alandaki Query signature Database butonu ile imzanın referans URL adresine erişilebilir detayına bakılabilir. Ayrıca View Rule opsyionu ile imzanın içeriği görüntülenebilir. 4- Referans Url adresinin bulunduğu bölümdür. 5- Uyarıya ilişkin trafiğin içeriğinin görüntülendiği alandır. Bu alanda ki içerik HEX formatında görüntülenebileceği gibi ASCII formatında da görüntülenebilir. 6- Uyarıya ilişkin yönetici notlarının eklendiği alandır.

Sensors Veri tabanındaki bütün sensorlerin yer aldığı alandır. Bu alandaki View events butonu kullanılarak sadece ilgili sensor’ün uyarı kayıtlarına ulaşılabilir. IPS

Search Bu bölümde veri tabanındaki uyarılar arasından birden fazla arama kriteri verilerek arama yapılabilir. IPS

Yedekli Kurulum Yedekli Saldırı tespit ve önleme sistemi kurulumu NAT/Router ve Bridge mod olarak yapılabilir.

Bridge Mode Yedekli yapılandırma için aşağıdaki keepalived Ayar dosyası uygulanır ve Bridge inteface yapılandırması düzenlenir. Bridge mode yedekli kurulumda iki cihaz arasında Özel bir HA port kullanılmalıdır. Yönetim poru ile sistem toplamda 4 interface ile yapılandırılmalıdır.

Örnek Topoloji

IPS