Servidor Fedora 11 de maneira fácil e funcional
Neste artigo mostro como configurar um servidor Fedora oferecendo os principais serviços para sua rede: firewall, servidor DHCP, web cache (Squid), DNS cache (bind), controle de banda (cbq), servidor web (Apache), controle de acesso, limite de conexões simultâneas, acesso remoto (SSH), relatório de acesso (Sarg). Ao final você deverá ter um servidor confiável.
Parte 10: 9. Outras regras
O kernel conta com algumas opções interessantes, vamos adicioná-las em nosso script de firewall, deixando por fim como mostrado em seguida.
Temos um problema no acesso remoto (ssh), pois deixamos nosso firewall restritivo, liberando acesso somente aos cadastrados. Vamos então adicionar mais uma regra que permitirá o acesso remoto na porta do ssh.
Temos um problema no acesso remoto (ssh), pois deixamos nosso firewall restritivo, liberando acesso somente aos cadastrados. Vamos então adicionar mais uma regra que permitirá o acesso remoto na porta do ssh.
# Parâmetros do Controle de acesso
MACLIST=/etc/macxip
echo " Configurações necessárias.....................[ OK ]"
# Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Política Padrão
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo " Alterando política padrão.....................[ OK ]"
# Aceita os Pacotes que realmente devem entrar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Proteções #
# evita ataques como 'syn flood atack'
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# rejeita todas as requisição de ICMP ECHO, ou apenas aquelas destinadas a endereçamento broadcasting ou multicasting
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# ignora mensagens falsas de icmp_error_responses
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Kill timestamps. These have been the subject of a recent bugtraq thread
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
# Permite o redirecionamento seguro dos pacotes
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# Evita problema de resposta tamanho zero
echo "0" > /proc/sys/net/ipv4/tcp_ecn
# Tempo em segundos para manter um fragmento IP na memória
echo "15" > /proc/sys/net/ipv4/ipfrag_time
# Tempo máximo de Espera da Conexão sem Resposta
echo "1800" > /proc/sys/net/ipv4/tcp_fin_timeout
# conf/accept_redirects - essa opção decide se o kernel aceita redirecionar mensagens ICMP ou não
# conf/accept_source_route - Desativar essa opção fecha as chances para que um cracker realize ataques do tipo IP Spoofing
# conf/send_redirects - Não envie mensagens de redirecionamento ICMP
# conf/*/log_martians - permite que pacotes de origem suspeita ou desconhecida (como pacotes forjados) sejam logados pelo próprio kernel.
# conf/*/rp_filter - verifica o Endereço de Origem do Pacote, prevenindo a sua máquina de ataques como 'IP Spoofing'.
for i in /proc/sys/net/ipv4/conf/*; do
echo "0" > $i/accept_redirects
echo "0" > $i/accept_source_route
echo "0" > $i/send_redirects
echo "1" > $i/log_martians
echo "1" > $i/rp_filter;
done
# Liberando todos os dados cacheados da memória
echo 3 > /proc/sys/vm/drop_caches
echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo "4096" > /proc/sys/net/core/netdev_max_backlog
echo "3" > /proc/sys/net/ipv4/tcp_syn_retries
# permite determinar o n° de segundos que uma conexão precisa estar ociosa antes de o TCP enviar checagens de keep-alive
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "30" > /proc/sys/net/ipv4/tcp_keepalive_intvl
# Permite ativar o TCP Selective Acknowledgements previsto pela RFC2018
echo "0" > /proc/sys/net/ipv4/tcp_sack
# permite ativar o TCP window scaling previsto pela RFC1323
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
# Confundir fingerprinting "
echo "255" > /proc/sys/net/ipv4/ip_default_ttl
# Esse parâmetro determina o nº de pacotes SYN+ACK enviados antes de o kernel liberar a conexão
echo "2" > /proc/sys/net/ipv4/tcp_synack_retries
echo " Carregando Proteções Adicionais...............[ OK ]"
# # Controle de ACESSO # #
# Diretivas do BD IP, MAC e Port
for i in `cat $MACLIST`; do
IPSOURCE=`echo $i | cut -d ';' -f 1`
MACSOURCE=`echo $i | cut -d ';' -f 2`
CBQMARK=`echo $i | cut -d ';' -f 3`
# Controle de Acesso IPxMAC
iptables -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
iptables -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
#Pacote Marcado
iptables -A PREROUTING -t mangle -i eth1 -s $IPSOURCE -j MARK --set-mark $CBQMARK
done
# Redireciona o tráfego http(80) para o Squid (3128)
iptables -t nat -A PREROUTING -i eth1 -p TCP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p UDP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
# Compartilha Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
# Aceita todo o tráfego vindo do loopback e indo para o loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
# # SSH - mude a porta caso necessário
iptables -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
MACLIST=/etc/macxip
echo " Configurações necessárias.....................[ OK ]"
# Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Política Padrão
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo " Alterando política padrão.....................[ OK ]"
# Aceita os Pacotes que realmente devem entrar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Proteções #
# evita ataques como 'syn flood atack'
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# rejeita todas as requisição de ICMP ECHO, ou apenas aquelas destinadas a endereçamento broadcasting ou multicasting
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# ignora mensagens falsas de icmp_error_responses
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Kill timestamps. These have been the subject of a recent bugtraq thread
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
# Permite o redirecionamento seguro dos pacotes
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# Evita problema de resposta tamanho zero
echo "0" > /proc/sys/net/ipv4/tcp_ecn
# Tempo em segundos para manter um fragmento IP na memória
echo "15" > /proc/sys/net/ipv4/ipfrag_time
# Tempo máximo de Espera da Conexão sem Resposta
echo "1800" > /proc/sys/net/ipv4/tcp_fin_timeout
# conf/accept_redirects - essa opção decide se o kernel aceita redirecionar mensagens ICMP ou não
# conf/accept_source_route - Desativar essa opção fecha as chances para que um cracker realize ataques do tipo IP Spoofing
# conf/send_redirects - Não envie mensagens de redirecionamento ICMP
# conf/*/log_martians - permite que pacotes de origem suspeita ou desconhecida (como pacotes forjados) sejam logados pelo próprio kernel.
# conf/*/rp_filter - verifica o Endereço de Origem do Pacote, prevenindo a sua máquina de ataques como 'IP Spoofing'.
for i in /proc/sys/net/ipv4/conf/*; do
echo "0" > $i/accept_redirects
echo "0" > $i/accept_source_route
echo "0" > $i/send_redirects
echo "1" > $i/log_martians
echo "1" > $i/rp_filter;
done
# Liberando todos os dados cacheados da memória
echo 3 > /proc/sys/vm/drop_caches
echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo "4096" > /proc/sys/net/core/netdev_max_backlog
echo "3" > /proc/sys/net/ipv4/tcp_syn_retries
# permite determinar o n° de segundos que uma conexão precisa estar ociosa antes de o TCP enviar checagens de keep-alive
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "30" > /proc/sys/net/ipv4/tcp_keepalive_intvl
# Permite ativar o TCP Selective Acknowledgements previsto pela RFC2018
echo "0" > /proc/sys/net/ipv4/tcp_sack
# permite ativar o TCP window scaling previsto pela RFC1323
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
# Confundir fingerprinting "
echo "255" > /proc/sys/net/ipv4/ip_default_ttl
# Esse parâmetro determina o nº de pacotes SYN+ACK enviados antes de o kernel liberar a conexão
echo "2" > /proc/sys/net/ipv4/tcp_synack_retries
echo " Carregando Proteções Adicionais...............[ OK ]"
# # Controle de ACESSO # #
# Diretivas do BD IP, MAC e Port
for i in `cat $MACLIST`; do
IPSOURCE=`echo $i | cut -d ';' -f 1`
MACSOURCE=`echo $i | cut -d ';' -f 2`
CBQMARK=`echo $i | cut -d ';' -f 3`
# Controle de Acesso IPxMAC
iptables -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
iptables -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
#Pacote Marcado
iptables -A PREROUTING -t mangle -i eth1 -s $IPSOURCE -j MARK --set-mark $CBQMARK
done
# Redireciona o tráfego http(80) para o Squid (3128)
iptables -t nat -A PREROUTING -i eth1 -p TCP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p UDP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
# Compartilha Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
# Aceita todo o tráfego vindo do loopback e indo para o loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
# # SSH - mude a porta caso necessário
iptables -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT