Bloqueio ICMP

1. Bloqueio ICMP

Danilo Silva Mattos
danilo.mattos

(usa Debian)

Enviado em 27/01/2018 - 13:54h

Boa tarde pessoal,

Estou fazendo alguns testes e não estou conseguindo bloquear o ping para acesso externo e deixar apenas o ping na minha rede local.
Segue meu simples script de firewall. Agradeço a todos por ajudar =).
Simplesmente minha regras iptables -A INPUT -p icmp --icmp-type 8 e 0 -s $NETWORK - ACCEPT não funciona e se eu dropar essa regra também não funciona.
Se eu inserir esse echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all ele bloqueia tudo.

OBS: ESSE FIREWALL NÃO VAI ROTEAR NADA PARA REDE LOCAL APENAS PARA SEGURANÇA DE UM WEBSERVER

#!/bin/bash

# IPTABLES #

# Variaveis de rede
IF_WAN="ens7"
IF_LAN="ens5"
NETWORK="192.168.200.0/24"

# Case de start
function start () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica padrao
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Liberando cadeias
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT

# Liberando regras de INPUT
# Loopback
iptables -A INPUT -i lo -j ACCEPT

# IMCP para o host
iptables -A INPUT -s $NETWORK -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -s $NETWORK -p icmp --icmp-type 0 -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# MSQL
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p udp --dport 3306 -j ACCEPT

# APACHE
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

}

# Case stop
function stop () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica como accept
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

}

case $1 in

start) echo "Firewall Iniciado"
start
;;

stop) echo "Firewall Parado"
stop
;;

restart) echo "Firewall reiniciado"
stop
start
;;

esac

# FIM



  


2. Re: Bloqueio ICMP

Leandro Silva
LSSilva

(usa Outra)

Enviado em 27/01/2018 - 17:17h

danilo.mattos escreveu:

Boa tarde pessoal,

Estou fazendo alguns testes e não estou conseguindo bloquear o ping para acesso externo e deixar apenas o ping na minha rede local.
Segue meu simples script de firewall. Agradeço a todos por ajudar =).
Simplesmente minha regras iptables -A INPUT -p icmp --icmp-type 8 e 0 -s $NETWORK - ACCEPT não funciona e se eu dropar essa regra também não funciona.
Se eu inserir esse echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all ele bloqueia tudo.

OBS: ESSE FIREWALL NÃO VAI ROTEAR NADA PARA REDE LOCAL APENAS PARA SEGURANÇA DE UM WEBSERVER

#!/bin/bash

# IPTABLES #

# Variaveis de rede
IF_WAN="ens7"
IF_LAN="ens5"
NETWORK="192.168.200.0/24"

# Case de start
function start () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica padrao
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Liberando cadeias
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT

# Liberando regras de INPUT
# Loopback
iptables -A INPUT -i lo -j ACCEPT

# IMCP para o host
iptables -A INPUT -s $NETWORK -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -s $NETWORK -p icmp --icmp-type 0 -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# MSQL
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p udp --dport 3306 -j ACCEPT

# APACHE
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

}

# Case stop
function stop () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica como accept
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

}

case $1 in

start) echo "Firewall Iniciado"
start
;;

stop) echo "Firewall Parado"
stop
;;

restart) echo "Firewall reiniciado"
stop
start
;;

esac

# FIM



#!/bin/bash

# IPTABLES #

# Variaveis de rede
IF_WAN="ens7"
IF_LAN="ens5"
NETWORK="192.168.200.0/24"

# Case de start
function start () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica padrao
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Liberando cadeias
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT

Uso política DROP e logo depois deu accept nas chains?

Não precisa de nada disso, já deu accept anteriormente em toda chain (-A INPUT -j ACCEPT)
# Liberando regras de INPUT
# Loopback
iptables -A INPUT -i lo -j ACCEPT

Como disse, já deu accept logo acima, isso aqui também não faz nada! Se quer permitir que os hosts da rede interna se "pinguem", ex: 192.168.200.1 "pingar" o 192.168.200.2, não precisa fazer nada, eles não usam o router para fazer isso. O router só manipula comutação de pacotes entre interfaces/redes.
Se quiser que os hosts da rede 192.168.200.0/24 não "pinguem" nada externo, faça da seguinte maneira: "iptables -A FORWARD -s $NETWORK -i $IF_LAN -p icmp --icmp-type echo-request -o $IF_WAN -j DROP"; isso utilizando política accept. Se utilizar política drop, não precisa fazer nada, isso já vai estar bloqueado.
# IMCP para o host
iptables -A INPUT -s $NETWORK -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -s $NETWORK -p icmp --icmp-type 0 -j ACCEPT

Não é necessário, já deu accept acima.
# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Não é necessário, já deu accept acima.
# FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
Não é necessário, já deu accept acima.
# MSQL
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p udp --dport 3306 -j ACCEPT
Não é necessário, já deu accept acima.
# APACHE
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

}

# Case stop
function stop () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica como accept
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

}

case $1 in

start) echo "Firewall Iniciado"
start
;;

stop) echo "Firewall Parado"
stop
;;

restart) echo "Firewall reiniciado"
stop
start
;;

esac

# FIM

Estou assumindo que este PC onde está configurado o firewall é o gateway da rede. Certo?
Se sim, um exemplo de firewall com política DROP para o que você quer seria o seguinte:


#!/bin/bash

# IPTABLES #

# Variaveis de rede
IF_WAN="ens7"
IF_LAN="ens5"
NETWORK="192.168.200.0/24"

# Case de start
function start () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica padrao
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#Block Invalid
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "Drop Invalid INPUT"
iptables -A INPUT -m state --state INVALID -j DROP
#Free Valid, Initiated
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Liberando regras de INPUT
# Loopback
iptables -A INPUT -i lo -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW --syn -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW --syn -j ACCEPT

# MSQL
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW --syn -j ACCEPT
iptables -A INPUT -p udp --dport 3306 -m state --state NEW --syn -j ACCEPT

# APACHE
iptables -A INPUT -p tcp --dport 80 -m state --state NEW --syn -j ACCEPT

# Log Padrão
iptables -A INPUT ! -i lo -j LOG --log-prefix "Drop Input "

#Até aqui é só a parte de INPUT, como deixou a política de FORWARD em DROP também, terá que configurar, assim como fez no INPUT. Vamos supor que quer os hosts da sua rede acessem internet na porta 80 e 443, ssh (22) e DNS (53), então faria da seguinte forma na chain FORWARD:
# Log/drop invalidos
iptables -A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID"
iptables -A FORWARD -m state --state INVALID -j DROP

# Aceita forwarding de pacotes válidos
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Anti-Spoofing
iptables -A FORWARD -i $IF_LAN ! -s $NETWORK -j LOG --log-prefix "SPOOFED PKT "
iptables -A FORWARD -i $IF_LAN ! -s $NETWORK -j DROP

# Accept

# Aceita forwarding de pacotes provenientes da rede internet/interface da rede interna e válidos
# SSH
iptables -A FORWARD -p tcp -i $IF_LAN -s $NETWORK --dport 22 --syn -m state --state NEW -j ACCEPT
#HTTP
iptables -A FORWARD -p tcp -i $IF_LAN -s $NETWORK --dport 80 --syn -m state --state NEW -j ACCEPT
#HTTPS
iptables -A FORWARD -p tcp -i $IF_LAN -s $NETWORK --dport 443 --syn -m state --state NEW -j ACCEPT
#UDP DNS
iptables -A FORWARD -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp --dport 53 -m state --state NEW -j ACCEPT

# Log padrão
iptables -A FORWARD ! -i lo -j LOG --log-prefix "DROP "

}

# Case stop
function stop () {

# Limpando regras
iptables -F
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

# Politica como accept
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

}

case $1 in

start) echo "Firewall Iniciado"
start
;;

stop) echo "Firewall Parado"
stop
;;

restart) echo "Firewall reiniciado"
stop
start
;;

esac

# FIM

Dessa forma iria proteger sua rede e não permitiria ping externos.
Se quiser permiter adicione:
iptables -A FORWARD -i $IF_LAN -s $NETWORK -o $IF_WAN -p icmp --icmp-type echo-request -j ACCEPT







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts