Meu servidor de aplicativos está em uma rede protegida por um firewall para toda a organização e meu servidor também está usando o fail2ban
. Dito isto, gostaria de configurar uma camada adicional de proteção com o iptables
. Estou tendo um pequeno problema com minha configuração.
Requisitos:
- Negar acesso a todos e permitir um intervalo de IP específico (4.3.4.0/16)
- Funcionalidade LDAP continuada no aplicativo (usando
ldap_connect
em PHP) - Capacidade de recuperar conteúdo externo via URL
Conhecidos:
- O IP do servidor de aplicativos é 1.2.3.4
- O servidor LDAP resolve para 1.2.100.200 e usa a porta 636
- O IP estático do meu laptop é 4.3.2.1
O que eu tentei:
Começando com uma configuração vanilla iptables
que permite tráfego nas portas 22, 80 e 443, adicionei o seguinte.
# explicitly allow ssh access from my laptop
iptables -A INPUT -s 4.3.2.1 -d 1.2.3.4 -p tcp --dport 22 -j ACCEPT
# deny all traffic
iptables --policy INPUT DROP
# allow traffic from a specific IP range
iptables -A INPUT -s 4.3.4.0/24 -j ACCEPT
# allow traffic from LDAP server IP
iptables -A INPUT -s 1.2.100.200 -j ACCEPT
iptables -A INPUT -p tcp --dport 636 -j ACCEPT
Eu salvo essa configuração usando service iptables save
e reinicio o serviço.
Problemas:
Se já estiver logado, posso navegar e usar o aplicativo (exceto por uma coisa, abaixo). Se eu não estiver conectado, a autenticação LDAP será interrompida.
O segundo problema é que não consigo acessar conteúdo externo com a nova configuração. Recupero dados de outra máquina usando HTTPS. É apenas uma questão de adicionar uma regra para permitir o tráfego de saída para o IP da máquina externa?
Responder1
O servidor LDAP poderia estar usando portas não padrão?
Você pode ver em qual porta o servidor ldap está escutandonetstat -tlpn
O segundo problema é que não consigo acessar conteúdo externo com a nova configuração
Presumo que você queira dizer que não consegue se conectar aos recursos de rede desta máquina depois de aplicar essas regras. As solicitações provavelmente estão sendo enviadas (já que aparentemente você não definiu OUTPUT
a política padrão do para DROP), mas as respostas do servidor remoto estão sendo descartadas pelo firewall.
Você pode verificar se isso está acontecendo monitorando a contagem de pacotes da política padrão à medida que gera o tráfego com o qual está preocupado:
root@xxxxxxvld02 ~ $ iptables -nvL
Chain INPUT (policy ACCEPT 157 packets, 18048 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 63 packets, 6998 bytes)
pkts bytes target prot opt in out source destination
Acima, na 157 packets
cadeia INPUT
é a contagem de pacotes que acabaram tendo a política padrão aplicada a eles (as regras têm suas próprias contagens à esquerda e não alteram esse número no topo).
Você provavelmente deseja criar uma regra que permita explicitamente o tráfego relacionado a conexões já existentes:
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT