Preciso de conselhos para as regras do iptables

0

Você pode me dizer se meu script do iptables é bom? As regras finais protegem contra ataques DOS. Eles são úteis? Eu não tenho servidor e meu pc é usado apenas para navegar na internet.

Aqui está meu script:

iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -A INPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
or
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state ! --state INVALID -j ACCEPT
#if I want to open a port:
iptables -t filter -A INPUT -s 192.168.0.0/24 --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.0.0/24 --sport 110 -j ACCEPT
#
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix   "iptables denied: " --log-level 7
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Obrigado antecipadamente.

#

Então eu mudei o script.
Conexão básica (sem servidor, sem roteador, sem DHCP e o Ipv6 desativado)

Eu fiz 2 scripts. O segundo é, espero, mais seguro. O que você acha?

roteiro 1:

  iptables -F
  iptables -X -t filter
  iptables -P INPUT DROP 
  iptables -P FORWARD DROP 
  iptables -P OUTPUT ACCEPT

  #lo
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
  iptables -A OUTPUT -o lo -j ACCEPT

  #CONNECTION
  iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

  #PING ACCEPTED AND OPENING PORTS THAT I NEED
  iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
  iptables -A INPUT -p tcp --dport xxxx -j ACCEPT
  iptables -A INPUT -p udp --dport xxxx -j ACCEPT

  #LOG
  iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
  iptables -A FORWARD -j LOG

Script 2 (mais seguro):

  iptables -F
  iptables -X -t filter
  iptables -P INPUT -j DROP
  iptables -P FORWARD DROP 
  iptables -P OUTPUT -j DROP

  modprobe ip-conntrack

  #lo
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
  iptables -A OUTPUT -o lo -j ACCEPT

  #connection
  iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
  iptables -A OUTPUT -m state ! --state INVALID -j ACCEPT

  #PING ACCEPTED AND OPENING PORTS THAT I NEED
  iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
  iptables -A INPUT -d 0.0.0.0/0 -p tcp --sport xxxx -m state --state ESTABLISHED -j ACCEPT (I don't know if I must add 0.0.0.0/0 or 192.168.0.0/24)
  iptables -A INPUT -m limit --limit 7/s -j LOG

  #LOG
  iptables -A OUTPUT -m limit --limit 7/s -j LOG
  iptables -A FORWARD -m limit --limit 7/s -j LOG

Obrigado antecipadamente.

    
por Abigael 09.12.2016 / 18:17

2 respostas

0

Esta resposta é específica para o script número 2 do segundo conjunto de scripts.

Primeiro: Por favor, pelo menos, tente carregar o seu script antes de publicá-lo aqui e obter a sintaxe resolvida.

  • Você ainda está se referindo a uma tabela chamada "filtro", que não faz existe.
  • Não há necessidade de forçar módulos de carregamento, eles serão carregados automaticamente uma vez referenciado.
  • Sugiro sempre usar um prefixo de log exclusivo para cada logging line, porque torna muito mais fácil correlacionar log entradas para localização de scripts para depuração e simples clareza.
  • Não há necessidade de especificar o endereço de destino em sua porta específica linha, mas você não quer dport em vez de esporte?
  • Não há necessidade para essa linha de qualquer maneira porque o anterior, mais linha genérica ESTABLISHED significa que a regra nunca será atingida.
  • Eu não sei se você vai ter problemas usando apenas ESTABELECIDO em vez de RELACIONADO, ESTABELECIDO.
  • Como mencionado anteriormente, você não precisa de nenhuma regra FORWARD, mas eu entenda que talvez você só queira registrá-lo, no caso.
  • Para o seu ping, não está claro para mim que você conseguirá objetivo com a regra, apesar de admitir que não sei qual é o seu objetivo é. Eu ainda era capaz de inundar ping no computador do jeito que você teve isto. Talvez você precise lidar especificamente com o outro caminho, aquele que não aciona a regra. Dê uma olhada no que eu fiz.

Então, estou executando isso:

#!/bin/sh
# See: https://sobrelinux.info/questions/218940/i-need-advice-for-iptables-rules"ICATCH:" --log-level info
iptables -A OUTPUT -m limit --limit 7/s -j LOG --log-prefix "OCATCH:" --log-level info
iptables -A FORWARD -m limit --limit 7/s -j LOG --log-prefix "FCATCH:" --log-level info

Até agora:

$ sudo iptables -v -x -n -L
Chain INPUT (policy DROP 218 packets, 21841 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
       0        0 REJECT     all  --  !lo    *       0.0.0.0/0            127.0.0.0/8          reject-with icmp-port-unreachable
       5      420 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 limit: avg 1/sec burst 1
     329    27636 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8
    3081   206772 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state ESTABLISHED
     213    21380 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 7/sec burst 5 LOG flags 0 level 6 prefix "ICATCH:"

Chain FORWARD (policy DROP 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 7/sec burst 5 LOG flags 0 level 6 prefix "FCATCH:"

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
    5726  7988360 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ! state INVALID
       0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 7/sec burst 5 LOG flags 0 level 6 prefix "OCATCH:"
    
por Doug Smythies 30.12.2016 / 18:26
0

Não, o seu script iptables não é muito bom (e desculpe se isso soa duro). Não, suas regras de ataque do DOS não são úteis, e acho que a cadeia INPUT pode atrapalhar o desempenho normal. Suas correntes FORWARD não são necessárias, porque você não está usando a corrente FORWARD (seu computador não está agindo como um roteador).

Você tem muitas -t filter linhas, mas não definiu uma cadeia chamada "filtro".

Eu não estou familiarizado com o módulo pkttype e, portanto, não posso comentar sobre essa linha.

Acho que você precisará permitir algum tráfego DHCP (portas 67 e 68), dependendo de como você atribui seus endereços IP.

    
por Doug Smythies 10.12.2016 / 01:21