kwami
(usa Debian)
Enviado em 23/05/2018 - 11:54h
LSSilva escreveu:
kwami escreveu:
LSSilva escreveu:
kwami escreveu:
Olá linuxeiros,
Estou a dois dias "lutando" para configurar um firewall e gateway com debian 9 e pau!
Cenário:
server debia9 com duas placas de rede
eno1 - internet
enp3s2 - LAN
Procedimentos efectuados:
- activação do FWD net.ipv4.ip**** =1
- modprobe iptables_nat
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW ! -i eno1 -j ACCEPT
iptables -A FORWARD -m state --state NEW ! -i eno1 -j ACCEPT
iptables -A INPUT -m state --state NEW ! -i enp3s2 -j ACCEPT
iptables -A FORWARD -m state --state NEW ! -i enp3s2 -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -P FORWARD ACCEPT
Não emite mensagem de erro mas não trafega de uma placa para outra!
Bom dia!
Firewall básico para que haja comutação entre interfaces e tráfego em rede local:
#!/bin/bash
#var's
ifinternet=eno1
iflocal=enp3s2
lan=192.168.2.0/24
#Ativa comutação entre interfaces
echo 1 > /proc/sys/net/ipv4/ip_forward
#firewall
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#Filter
#Drop Invalid
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "Firewall - Drop INVALID "
iptables -A INPUT -m state --state INVALID -j DROP
#Accept Valid
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Libera Serviços que estarao ativos no server
#SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW --syn -j ACCEPT
#Apache - Apenas rede local
iptables -A INPUT -i $iflocal -p tcp --dport 80 -m state --state NEW --syn -j ACCEPT
#Libera interface de loopback
iptables -A INPUT -i lo -j ACCEPT
#Libera ping - Local
iptables -A INPUT -p icmp --icmp-type echo-request -i $iflocal -j ACCEPT
#Loga restante
iptables -A INPUT ! -i lo -j LOG --log-prefix "Firewall - Drop INPUT "
#Forward
#Drop invalid
iptables -A FORWARD -m state --state INVALID -j LOG --log-prefix "Firewall - INVALID Forward "
iptables -A FORWARD -m state --state INVALID -j DROP
#Accept Valid
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#Localnet - Spoofed
iptables -A FORWARD -i $iflocal ! -s $lan -j LOG --log-prefix "Firewlal - Drop Spoofed Forward "
iptables -A FORWARD -i $iflocal ! -s $lan -j DROP
#Localnet
iptables -A FORWARD -i $iflocal -s $lan -j ACCEPT
iptables -A FORWARD -i $ifinternet -d $lan -j ACCEPT
#Ping
iptables -A FORWARD -p icmp --icmp-type echo-request -i $iflocal -s $lan -j ACCEPT
#Log
iptables -A FORWARD ! -i lo -j LOG --log-prefix "Firewall - Drop Forward "
#Output
#Drop invalid
iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "Drop Output - INVALID "
iptables -A OUTPUT -m state --state INVALID -j DROP
#Masquerading
iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
Eu acredito que é um bom firewall para começar. Verifique bem a sintaxe antes de testar, posso ter errado em algum ponto e não ter conseguido ver para corrigir.
Oi, obrigado por ter respondido à minha inquietação!
Coloquei o scrypt, fiz as alterações para a minha realidade e nada.
Não há tráfego entre as placas ifinternet e iflocal. veja o ping de um host da rede local para o servidor via ifinternet:
ping -c4 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
From 192.168.10.100 icmp_seq=1 Destination Host Unreachable
From 192.168.10.100 icmp_seq=2 Destination Host Unreachable
From 192.168.10.100 icmp_seq=3 Destination Host Unreachable
From 192.168.10.100 icmp_seq=4 Destination Host Unreachable
Mais detalhes do cenário para que eu te ajude a me ajudar (rsrs)
Servidor debia 9 - Serviços
DHCP
Samba
Proxy (Squid)
Banco de dados Firebird e PostgresSql
Interfaces
eno1 = internet
enp3s2 = LAN
Acontece que as máquinas na LAN navegam sem problemas pela internet usando o proxy. Basta desactivar o proxy na LAN, não há internet o que significa que o servidor não está fazendo o NAT nem FOWARD entre as placas.
X da questão, se o meu problema fosse só navegação internet, estaria resolvido com o squid (ele funciona), mas eu preciso de mandar algumas máquinas da LAN para a internet sem o squid, por exemplo há um host configurado como pentester (Kali) que precisa de sair da LAN mas não pelo browser, obviamente.
Com isto: "ping -c4 192.168.1.254", você não está pingando um IP Válido, logo, não vai funcionar mesmo. A sua subrede encontra-se em outra faixa e no gateway não há nenhuma rota para este destino. 192.168.1.0/24 não é roteável, a não ser que haja uma conexão de vpn para isso.
Poste pra gente como está exatamente seu script de firewall, porém, antes disso poste a saída dos 3 comandos:
iptables -nL
iptalbes -t nat -nL
iptables -S
E mais disso:
cat /proc/sys/net/ipv4/ip_forward
saída iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 0 level 4 prefix "Firewall - Drop INVALID"
DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02 state NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 state NEW
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "Firewall - Drop INPUT "
Chain FORWARD (policy DROP)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 0 level 4 prefix "Firewall - INVALID Forward "
DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
LOG all -- !192.168.10.0/24 0.0.0.0/0 LOG flags 0 level 4 prefix "Firewlal - Drop Spoofed Forwa"
DROP all -- !192.168.10.0/24 0.0.0.0/0
ACCEPT all -- 192.168.10.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 192.168.10.0/24
ACCEPT icmp -- 192.168.10.0/24 0.0.0.0/0 icmptype 8
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "Firewall - Drop Forward "
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 0 level 4 prefix "Drop Output - INVALID "
DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID
Saída iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 3128
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
root@mufassa:/home/what#
Saída iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -m state --state INVALID -j LOG --log-prefix "Firewall - Drop INVALID"
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -i enp3s2 -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp3s2 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT ! -i lo -j LOG --log-prefix "Firewall - Drop INPUT "
-A FORWARD -m state --state INVALID -j LOG --log-prefix "Firewall - INVALID Forward "
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD ! -s 192.168.10.0/24 -i enp3s2 -j LOG --log-prefix "Firewlal - Drop Spoofed Forwa"
-A FORWARD ! -s 192.168.10.0/24 -i enp3s2 -j DROP
-A FORWARD -s 192.168.10.0/24 -i enp3s2 -j ACCEPT
-A FORWARD -d 192.168.10.0/24 -i eno1 -j ACCEPT
-A FORWARD -s 192.168.10.0/24 -i enp3s2 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A FORWARD ! -i lo -j LOG --log-prefix "Firewall - Drop Forward "
-A OUTPUT -m state --state INVALID -j LOG --log-prefix "Drop Output - INVALID "
-A OUTPUT -m state --state INVALID -j DROP
root@mufassa:/home/whitehat#
Saída cat /proc/sys/net/ipv4/ip_forward
1
root@mufassa:/home/whitehat#
O avanço que obtive até agora é com o squid, ele passa pelo firewall lindamente, com o as seguintes regras
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -t nat -A PREROUTING -i $ifinternet -p tcp --dport 80 -j REDIRECT --to-port 3128
Então caso essa confusão (Firewall+NAT+FORWARD) persita, darei um jeito de redirecionar,um por um, os protocolos/portas para o squid. Depois defino as máquinas da LAN para usarem o squid para qualquer saída/entrada nos /etc/profile, /etc/apt/apt.conf e /etc/enviromenent (o Ubuntu mais antigos traziam esta possibilidade na configuração GUI da NIC- aplicar proxy para o sistema todo-porém agora uso o UBUNTU 18.04 e não vejo esta ferramenta) .