2024-02-07 05:33:07 +00:00
# Suricata & Iptables cheatsheet
2022-06-05 15:38:02 +00:00
2022-06-06 17:56:00 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-06-06 17:56:00 +00:00
2024-02-08 03:54:17 +00:00
* Trabalha em uma **empresa de cibersegurança** ? Gostaria de ver sua **empresa anunciada no HackTricks** ? ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF** ? Confira os [**PLANOS DE ASSINATURA** ](https://github.com/sponsors/carlospolop )!
2023-06-06 18:56:34 +00:00
* Descubra [**A Família PEASS** ](https://opensea.io/collection/the-peass-family ), nossa coleção exclusiva de [**NFTs** ](https://opensea.io/collection/the-peass-family )
2024-02-07 05:33:07 +00:00
* Adquira o [**swag oficial PEASS & HackTricks** ](https://peass.creator-spring.com )
2024-02-08 03:54:17 +00:00
* **Junte-se ao** [**💬** ](https://emojipedia.org/speech-balloon/ ) [**grupo Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo telegram** ](https://t.me/peass ) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2024-02-07 05:33:07 +00:00
* **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks ](https://github.com/carlospolop/hacktricks ) e [repositório hacktricks-cloud ](https://github.com/carlospolop/hacktricks-cloud )**.
2022-06-06 17:56:00 +00:00
< / details >
2022-06-05 15:38:02 +00:00
## Iptables
2024-02-07 05:33:07 +00:00
### Chains
2024-02-08 03:54:17 +00:00
No iptables, listas de regras conhecidas como chains são processadas sequencialmente. Entre essas, três chains principais estão universalmente presentes, com outras como NAT sendo potencialmente suportadas, dependendo das capacidades do sistema.
2022-06-05 15:38:02 +00:00
2024-02-08 03:54:17 +00:00
- **Input Chain**: Utilizada para gerenciar o comportamento das conexões de entrada.
- **Forward Chain**: Utilizada para lidar com conexões de entrada que não são destinadas ao sistema local. Isso é típico para dispositivos que atuam como roteadores, onde os dados recebidos devem ser encaminhados para outro destino. Esta chain é relevante principalmente quando o sistema está envolvido em roteamento, NATing ou atividades similares.
- **Output Chain**: Dedicada à regulamentação das conexões de saída.
2022-06-05 15:38:02 +00:00
2024-02-07 05:33:07 +00:00
Essas chains garantem o processamento ordenado do tráfego de rede, permitindo a especificação de regras detalhadas que regem o fluxo de dados para dentro, através e para fora de um sistema.
2022-06-05 15:38:02 +00:00
```bash
# Delete all rules
iptables -F
# List all rules
iptables -L
iptables -S
# Block IP addresses & ports
2022-06-06 21:48:24 +00:00
iptables -I INPUT -s ip1,ip2,ip3 -j DROP
iptables -I INPUT -p tcp --dport 443 -j DROP
iptables -I INPUT -s ip1,ip2 -p tcp --dport 443 -j DROP
2022-06-05 15:38:02 +00:00
# String based drop
2022-09-10 13:23:07 +00:00
## Strings are case sensitive (pretty easy to bypass if you want to check an SQLi for example)
2022-06-05 15:38:02 +00:00
iptables -I INPUT -p tcp --dport < port_listening > -m string --algo bm --string '< payload > ' -j DROP
iptables -I OUTPUT -p tcp --sport < port_listening > -m string --algo bm --string 'CTF{' -j DROP
## You can also check for the hex, base64 and double base64 of the expected CTF flag chars
# Drop every input port except some
iptables -P INPUT DROP # Default to drop
2022-06-06 21:48:24 +00:00
iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
2022-06-05 15:38:02 +00:00
# Persist Iptables
## Debian/Ubuntu:
apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
iptables-restore < /etc/iptables/rules.v4
##RHEL/CentOS:
iptables-save > /etc/sysconfig/iptables
ip6tables-save > /etc/sysconfig/ip6tables
iptables-restore < /etc/sysconfig/iptables
```
## Suricata
2023-06-06 18:56:34 +00:00
### Instalação e Configuração
2022-06-05 15:38:02 +00:00
```bash
# Install details from: https://suricata.readthedocs.io/en/suricata-6.0.0/install.html#install-binary-packages
# Ubuntu
2022-06-06 17:56:00 +00:00
add-apt-repository ppa:oisf/suricata-stable
apt-get update
apt-get install suricata
2022-06-05 15:38:02 +00:00
# Debian
echo "deb http://http.debian.net/debian buster-backports main" > \
2024-02-07 05:33:07 +00:00
/etc/apt/sources.list.d/backports.list
2022-06-05 15:38:02 +00:00
apt-get update
apt-get install suricata -t buster-backports
# CentOS
yum install epel-release
yum install suricata
2022-06-06 17:56:00 +00:00
# Get rules
suricata-update
suricata-update list-sources #List sources of the rules
suricata-update enable-source et/open #Add et/open rulesets
suricata-update
## To use the dowloaded rules update the following line in /etc/suricata/suricata.yaml
default-rule-path: /var/lib/suricata/rules
rule-files:
2024-02-07 05:33:07 +00:00
- suricata.rules
2022-06-06 17:56:00 +00:00
# Run
## Add rules in /etc/suricata/rules/suricata.rules
2024-02-07 05:33:07 +00:00
systemctl suricata start
2022-06-06 17:56:00 +00:00
suricata -c /etc/suricata/suricata.yaml -i eth0
# Reload rules
suricatasc -c ruleset-reload-nonblocking
## or set the follogin in /etc/suricata/suricata.yaml
detect-engine:
2024-02-07 05:33:07 +00:00
- rule-reload: true
2022-06-06 17:56:00 +00:00
# Validate suricata config
suricata -T -c /etc/suricata/suricata.yaml -v
# Configure suricata as IPs
2022-09-10 13:23:07 +00:00
## Config drop to generate alerts
2022-06-06 17:56:00 +00:00
## Search for the following lines in /etc/suricata/suricata.yaml and remove comments:
- drop:
2024-02-07 05:33:07 +00:00
alerts: yes
flows: all
2022-06-06 17:56:00 +00:00
## Forward all packages to the queue where suricata can act as IPS
iptables -I INPUT -j NFQUEUE
iptables -I OUTPUT -j NFQUEUE
## Start suricata in IPS mode
suricata -c /etc/suricata/suricata.yaml -q 0
2022-06-07 22:17:51 +00:00
### or modify the service config file as:
systemctl edit suricata.service
[Service]
ExecStart=
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid -q 0 -vvv
Type=simple
systemctl daemon-reload
2022-06-05 15:38:02 +00:00
```
2023-06-06 18:56:34 +00:00
### Definições de Regras
2022-06-06 17:56:00 +00:00
2024-02-07 05:33:07 +00:00
[Da documentação: ](https://github.com/OISF/suricata/blob/master/doc/userguide/rules/intro.rst ) Uma regra/assinatura consiste no seguinte:
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
* A **ação** , determina o que acontece quando a assinatura corresponde.
* O **cabeçalho** , define o protocolo, endereços IP, portas e direção da regra.
2024-02-07 05:33:07 +00:00
* As **opções da regra** , definem os detalhes da regra.
```bash
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"HTTP GET Request Containing Rule in URI"; flow:established,to_server; http.method; content:"GET"; http.uri; content:"rule"; fast_pattern; classtype:bad-unknown; sid:123; rev:1;)
```
#### **Ações válidas são**
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
* alerta - gerar um alerta
2024-02-07 05:33:07 +00:00
* passar - parar a inspeção adicional do pacote
2023-06-06 18:56:34 +00:00
* **drop** - descartar o pacote e gerar um alerta
2024-02-07 05:33:07 +00:00
* **rejeitar** - enviar um erro RST/ICMP inacessível para o remetente do pacote correspondente.
* rejeitarsrc - o mesmo que apenas _rejeitar_
* rejeitardst - enviar um pacote de erro RST/ICMP para o destinatário do pacote correspondente.
* rejeitarambos - enviar pacotes de erro RST/ICMP para ambos os lados da conversa.
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
#### **Protocolos**
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
* tcp (para tráfego tcp)
2022-06-06 17:56:00 +00:00
* udp
* icmp
2023-06-06 18:56:34 +00:00
* ip (ip significa 'todos' ou 'qualquer')
* _protocolos de camada 7_: http, ftp, tls, smb, dns, ssh... (mais na [**documentação** ](https://suricata.readthedocs.io/en/suricata-6.0.0/rules/intro.html ))
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
#### Endereços de Origem e Destino
2022-06-06 17:56:00 +00:00
2024-02-07 05:33:07 +00:00
Suporta intervalos de IP, negações e uma lista de endereços:
2022-06-06 17:56:00 +00:00
2024-02-08 03:54:17 +00:00
| Exemplo | Significado |
2022-06-06 17:56:00 +00:00
| ------------------------------ | ---------------------------------------- |
2024-02-08 03:54:17 +00:00
| ! 1.1.1.1 | Todos os endereços IP exceto 1.1.1.1 |
| !\[1.1.1.1, 1.1.1.2] | Todos os endereços IP exceto 1.1.1.1 e 1.1.1.2 |
| $HOME\_NET | Sua configuração de HOME\_NET em yaml |
| \[$EXTERNAL\_NET, !$HOME\_NET] | EXTERNAL\_NET e não HOME\_NET |
| \[10.0.0.0/24, !10.0.0.5] | 10.0.0.0/24 exceto 10.0.0.5 |
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
#### Portas de Origem e Destino
2022-06-06 17:56:00 +00:00
2024-02-07 05:33:07 +00:00
Suporta intervalos de portas, negações e listas de portas
2022-06-06 17:56:00 +00:00
2024-02-08 03:54:17 +00:00
| Exemplo | Significado |
2022-06-06 17:56:00 +00:00
| --------------- | -------------------------------------- |
2024-02-08 03:54:17 +00:00
| qualquer | qualquer endereço |
| \[80, 81, 82] | porta 80, 81 e 82 |
| \[80: 82] | Intervalo de 80 a 82 |
2023-06-06 18:56:34 +00:00
| \[1024: ] | De 1024 até o número de porta mais alto |
2024-02-08 03:54:17 +00:00
| !80 | Todas as portas exceto 80 |
| \[80:100,!99] | Intervalo de 80 a 100, exceto 99 |
| \[1:80,!\[2,4]] | Intervalo de 1 a 80, exceto portas 2 e 4 |
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
#### Direção
2022-06-06 17:56:00 +00:00
2023-06-06 18:56:34 +00:00
É possível indicar a direção da regra de comunicação sendo aplicada:
2022-06-06 17:56:00 +00:00
```
source -> destination
source < > destination (both directions)
```
2023-06-06 18:56:34 +00:00
#### Palavras-chave
2022-06-06 17:56:00 +00:00
2024-02-07 05:33:07 +00:00
Existem **centenas de opções** disponíveis no Suricata para buscar o **pacote específico** que você está procurando, aqui será mencionado se algo interessante for encontrado. Consulte a [**documentação** ](https://suricata.readthedocs.io/en/suricata-6.0.0/rules/index.html ) para mais informações!
2022-06-06 17:56:00 +00:00
```bash
# Meta Keywords
msg: "description"; #Set a description to the rule
sid:123 #Set a unique ID to the rule
rev:1 #Rule revision number
config classification: not-suspicious,Not Suspicious Traffic,3 #Classify
reference: url, www.info.com #Reference
priority:1; #Set a priority
metadata: key value, key value; #Extra metadata
# Filter by geolocation
geoip: src,RU;
# ICMP type & Code
itype:< 10 ;
icode:0
# Filter by string
content: "something"
content: |61 61 61| #Hex: AAA
content: "http|3A|//" #Mix string and hex
content: "abc"; nocase; #Case insensitive
2022-06-06 21:48:24 +00:00
reject tcp any any -> any any (msg: "php-rce"; content: "eval"; nocase; metadata: tag php-rce; sid:101; rev: 1;)
# Replaces string
2022-09-10 13:23:07 +00:00
## Content and replace string must have the same length
2022-06-06 21:48:24 +00:00
content:"abc"; replace: "def"
alert tcp any any -> any any (msg: "flag replace"; content: "CTF{a6st"; replace: "CTF{u798"; nocase; sid:100; rev: 1;)
## The replace works in both input and output packets
## But it only modifies the first match
2022-06-06 17:56:00 +00:00
# Filter by regex
pcre:"/< regex > /opts"
pcre:"/NICK .*USA.*[0-9]{3,}/i"
2022-06-06 21:48:24 +00:00
drop tcp any any -> any any (msg:"regex"; pcre:"/CTF\{[\w]{3}/i"; sid:10001;)
# Other examples
## Drop by port
drop tcp any any -> any 8000 (msg:"8000 port"; sid:1000;)
2022-06-06 17:56:00 +00:00
```
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-06-06 17:56:00 +00:00
2024-02-07 05:33:07 +00:00
* Trabalha em uma **empresa de cibersegurança** ? Gostaria de ver sua **empresa anunciada no HackTricks** ? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF** ? Confira os [**PLANOS DE ASSINATURA** ](https://github.com/sponsors/carlospolop )!
2023-06-06 18:56:34 +00:00
* Descubra [**A Família PEASS** ](https://opensea.io/collection/the-peass-family ), nossa coleção exclusiva de [**NFTs** ](https://opensea.io/collection/the-peass-family )
* Adquira o [**swag oficial do PEASS & HackTricks** ](https://peass.creator-spring.com )
2024-02-08 03:54:17 +00:00
* **Junte-se ao** [**💬** ](https://emojipedia.org/speech-balloon/ ) [**grupo Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo telegram** ](https://t.me/peass ) ou **siga-me no** **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2024-02-07 05:33:07 +00:00
* **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks ](https://github.com/carlospolop/hacktricks ) e [repositório hacktricks-cloud ](https://github.com/carlospolop/hacktricks-cloud )**.
2022-06-06 17:56:00 +00:00
< / details >