Enviado em 31/10/2011 - 16:17h
Prezados, antes de tudo venho confessar a todos q sou 1/2 noob em netfilter, logo meu script de firewall n está lá muito 100%, portanto peço paciência e explicações + esmiuçadas, ok?#!/bin/bash # Script de firewall - ETE Republica - versao 0.4 # Ricardo J. Pinheiro - 21/10/2011 # Baseado em http://www.zago.eti.br/firewall/fireaula.sh # Faz uso de iptables-layer7 - kernelspace, kernel 2.6.34. # # Variaveis SERVICO="/usr/local/sbin/iptables" #$(which iptables) MODULO=$(which modprobe) WGET=$(which wget) REDE_DE_DENTRO="10.0.0.0/16" PLACA_ADSL=eth0 PLACA_FAETEC=eth1 PLACA_DE_DENTRO=eth2 PLACA_DE_FORA=eth+ FAIXA_FAETEC="10.10.10.128/27" FAIXA_ADSL="192.168.1.0/24" ROTEADOR_FAETEC="10.10.10.129" ROTEADOR_ADSL="192.168.1.254" PROXY_FAETEC="10.0.0.2" INETSERV="10.0.0.5" WEBSERV="10.0.0.4" BDSERV="10.0.0.3" LOOPBACK="127.0.0.1" DIRETORIO="." PORTAS_ABERTAS_REDIRECIONADAS="80 443" PORTAS_BLOQUEADAS_ULTRASURF="5938 19769 55433 33190 19769 23620 3103 3162 2000:3000" IPS_BLOQUEADOS_ULTRASURF="65.49.2.0/24 65.49.14.0/24 208.43.202.0/24" FAIXAS_IP_BLOQUEADAS_ULTRASURF="/home/install/bin/internet/faixas.ultrasurf.txt" ARQUIVO_IPS_ULTRASURF=$HOME"/bin/internet/ips.ultrasurf.txt" TEMPORARIO=$(mktemp) TOR_NODES=$HOME"/bin/internet/tor_nodes.csv" LAYER7="http-rtsp rtsp skypetoskype skypeout bittorrent msnmessenger msn-filetransfer tor teamspeak" URL='http://torstatus.all.de/ip_list_exit.php/Tor_ip_list_ALL.csv' #URL='http://torstatus.blutmagie.de/ip_list_exit.php/Tor_ip_list_EXIT.csv' # echo "Carrega modulos" $MODULO iptable_nat $MODULO nf_conntrack $MODULO nf_conntrack_netlink $MODULO nf_conntrack_ftp $MODULO nfnetlink_queue $MODULO ip_nat_ftp $MODULO ipt_LOG $MODULO ipt_REJECT $MODULO ipt_MASQUERADE # echo "Zera regras" $SERVICO -F $SERVICO -X $SERVICO -F -t nat $SERVICO -X -t nat $SERVICO -F -t mangle $SERVICO -X -t mangle $SERVICO -P INPUT DROP $SERVICO -P OUTPUT DROP $SERVICO -P FORWARD DROP # echo "NAT para os demais servicos" $SERVICO -A POSTROUTING -t nat -o $PLACA_ADSL -j MASQUERADE echo "0" > /proc/sys/net/ipv4/ip_forward # echo "Libera acesso externo para ssh e servidor web" $SERVICO -A INPUT -p tcp --dport 80 -i $PLACA_ADSL -j ACCEPT $SERVICO -A INPUT -p tcp --dport 80 -i $PLACA_DE_DENTRO -j ACCEPT $SERVICO -A INPUT -p tcp --dport 22 -i $PLACA_ADSL -j ACCEPT $SERVICO -A INPUT -p tcp --dport 22 -i $PLACA_DE_DENTRO -j ACCEPT # echo "Mascarando tudo de dentro pela placa de fora da rede (80 e 443 -> 3128)" for PORTAS in $PORTAS_ABERTAS_REDIRECIONADAS do $SERVICO -t nat -A PREROUTING -i $PLACA_DE_DENTRO -p tcp --dport $PORTAS -j REDIRECT --to-port 3128 done # echo "Conexoes para as portas 20, 21, 80 e 443 tem q passar pelo Squid." $SERVICO -t filter -A OUTPUT -p tcp -m multiport --dport ftp,ftp-data,http,https -m owner ! --uid-owner proxy -j REJECT --reject-with tcp-reset # echo "Conexoes para a porta 53 tem q passar pelo MaraDNS." $SERVICO -t filter -A OUTPUT -p tcp -m multiport --dport 53 -m owner ! --uid-owner maradns -j REJECT --reject-with tcp-reset # echo "Drop em alguns servicos especificos (layer 7)" for TIPO in $LAYER7; do $SERVICO -A INPUT -m layer7 --l7proto $TIPO -j DROP $SERVICO -A OUTPUT -m layer7 --l7proto $TIPO -j DROP $SERVICO -I FORWARD -m layer7 --l7proto $TIPO -d any/0 -j DROP $SERVICO -I FORWARD -m layer7 --l7proto $TIPO -s any/0 -j DROP $SERVICO -t filter -A FORWARD -m layer7 --l7proto $TIPO -j DROP done # #echo "Bloqueio ao Tor" #$SERVICO -N TOR_BLOCK #$SERVICO -A INPUT -j TOR_BLOCK #$SERVICO -F TOR_BLOCK #$SERVICO -I TOR_BLOCK -j RETURN #$WGET -t9 -c $URL --proxy=off --no-check-certificate -O $TEMPORARIO # #i=1 #LINHAS=$(cat $TEMPORARIO $TOR_NODES | wc -l) #echo -e "\n" #for IP in $(cat $TOR_NODES $TEMPORARIO | sort | uniq) #do # $SERVICO -I TOR_BLOCK -p tcp -m tcp -s $IP -j DROP # tput cup 22 0 ; echo -e "\t\t\t" # tput cup 22 0 ; echo "IPs bloqueados do TOR: $i de $LINHAS" # i=$((i+1)) #done # echo "Bloqueio ao Ultrasurf" for PORTA in $PORTAS_BLOQUEADAS_ULTRASURF; do $SERVICO -I FORWARD -p tcp --dport $PORTA -j DROP done for IP in $IPS_BLOQUEADOS_ULTRASURF; do $SERVICO -I FORWARD -p tcp -d $IP -j DROP $SERVICO -I FORWARD -p tcp -s $IP -j DROP done for FAIXA in $(cat $FAIXAS_IP_BLOQUEADAS_ULTRASURF); do $SERVICO -I FORWARD -d $FAIXA -p tcp --destination-port 443 -j DROP $SERVICO -I FORWARD -s $FAIXA -p tcp --destination-port 443 -j DROP done #i=1 #LINHAS=$(cat $ARQUIVO_IPS_ULTRASURF | wc -l) #echo -e "\n" #for IP in $(cat $ARQUIVO_IPS_ULTRASURF); do # $SERVICO -A FORWARD -p tcp --dport 443 -d $IP -j LOG --log-prefix "UltraSurf: " # $SERVICO -A FORWARD -p tcp --dport 443 -d $IP -j DROP # tput cup 22 0 ; echo -e "\t\t\t" # tput cup 22 0 ; echo "IPs bloqueados do Ultrasurf: $i de $LINHAS" # i=$((i+1)) #done # echo "Bloqueio ao TeamViewer" $SERVICO -A FORWARD -p TCP -i $PLACA_DE_DENTRO -s $REDE_DE_DENTRO --dport 5938 -j DROP # echo "Limitando o numero de conexoes simultaneas da porta 443." $SERVICO -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 10 -j REJECT # echo "Redirecionando portas 80 e 8080 pela placa externa p/ o servidor Web" PORTAS_ABERTAS_TCP_DENTRO="80 8080" for PORTAS in $PORTAS_ABERTAS_TCP_DENTRO; do $SERVICO -t nat -A PREROUTING -i $PLACA_ADSL -p tcp --dport $PORTAS -j DNAT --to-dest $WEBSERV $SERVICO -A FORWARD -p tcp -i $PLACA_ADSL --dport $PORTAS -d $WEBSERV -j ACCEPT done # echo "DROP para ataques brute force do SSH" $SERVICO -I INPUT -i $PLACA_ADSL -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource $SERVICO -I INPUT -i $PLACA_ADSL -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name DEFAULT --rsource -j DROP # echo "Protegendo contra o ping-of-death" $SERVICO -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # echo "Protegendo contra syn-floods" $SERVICO -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT # echo "Pacotes estabilizados e relatados passam sem problemas." $SERVICO -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # echo "Protegendo contra port-scanners avancados" $SERVICO -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # echo "Bloqueio ao traceroute" $SERVICO -A INPUT -p udp -i $PLACA_DE_FORA --dport 33435:33525 -j DROP # echo "Ignora (DROP) nos pacotes TCP indesejaveis" $SERVICO -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: NEW sem syn: " $SERVICO -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP # echo "LIbera (ACCEPT) pacotes de retorno da internet" $SERVICO -A INPUT ! -i $PLACA_ADSL -j ACCEPT $SERVICO -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $SERVICO -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT $SERVICO -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT # echo "DROP e LOG de port-scanners" $SERVICO -N SCANNER $SERVICO -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "DIVERSOS: port scanner: " $SERVICO -A SCANNER -j DROP $SERVICO -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $PLACA_ADSL -j SCANNER $SERVICO -A INPUT -p tcp --tcp-flags ALL NONE -i $PLACA_ADSL -j SCANNER $SERVICO -A INPUT -p tcp --tcp-flags ALL ALL -i $PLACA_ADSL -j SCANNER $SERVICO -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $PLACA_ADSL -j SCANNER $SERVICO -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $PLACA_ADSL -j SCANNER $SERVICO -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $PLACA_ADSL -j SCANNER $SERVICO -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $PLACA_ADSL -j SCANNER # echo "Log de acesso por porta" $SERVICO -A INPUT -p tcp --dport 21 -i $PLACA_ADSL -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: " $SERVICO -A INPUT -p tcp --dport 80 -i $PLACA_ADSL -j LOG --log-level 6 --log-prefix "FIREWALL: http: " $SERVICO -A INPUT -p tcp --dport 3128 -i $PLACA_ADSL -j LOG --log-level 6 --log-prefix "FIREWALL: squid: " # echo "DROP no samba" $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 139 -j DROP $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 138 -j DROP $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 137 -j DROP # echo "DROP no NFS (portmap)" $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 111 -j DROP # echo "Pronto" # MSX r0x a lot
# Porta 3128 pro Squid # http_port 3128 transparent # icp_port 0 # # Define 512 Mb pro Squid usar # cache_mem 512 MB cache_swap_low 90 cache_swap_high 95 # # Mais de 50 Mb, o Squid descarta do cache. # maximum_object_size 51200 KB minimum_object_size 0 KB # cache_replacement_policy lru memory_replacement_policy lru # # Define 53 Gb de espaco pro squid, e onde estarao os logs. # cache_dir ufs /var/spool/squid/ 54372 16 32 cache_access_log /var/log/squid3/access.log cache_log /var/log/squid3/cache.log cache_store_log /var/log/squid3/store.log # log_ip_on_direct off client_netmask 255.255.255.255 log_mime_hdrs off pid_filename /var/run/squid.pid request_header_max_size 80 KB url_rewrite_children 10 url_rewrite_concurrency 0 # # Como o Squid lida com FTP anonimo. # ftp_user Squid@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on # dns_retransmit_interval 5 seconds dns_timeout 5 minutes dns_nameservers 127.0.0.1 10.0.0.5 10.0.0.254 # 208.67.222.222 208.67.220.220 # hosts_file /etc/hosts # auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 # quick_abort_min 16 KB quick_abort_max 16 KB quick_abort_pct 95 # negative_ttl 5 minutes positive_dns_ttl 6 hours negative_dns_ttl 5 minutes connect_timeout 2 minutes peer_connect_timeout 30 seconds read_timeout 15 minutes request_timeout 5 minutes persistent_request_timeout 1 minute client_lifetime 7 days half_closed_clients on pconn_timeout 120 seconds shutdown_lifetime 30 seconds # # Redirecionamento para o squidGuard # redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf # # As regras de acesso # acl todos src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl ftp proto FTP acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 21 443 563 acl CONNECT method CONNECT acl POST method POST acl NOCACHE url_regex 10.0.0.0/16 \? # # Listas de controle de acesso # acl escola src 10.0.0.0/255.255.0.0 (...) # # ACLs de filtragem de acesso # # ACL para bloquear spywares e adwares # acl spyware url_regex "/etc/squid/blocked/blacklistspy.txt" # # ACL para garantir acesso direto # acl passareto dstdom_regex "/etc/squid/blocked/acessodireto.txt" # # ACL para as maquinas locais # acl locais dstdom_regex "/etc/squid/blocked/locais.txt" # # ACLs para filtragem por palavra (proibidos e liberados) # acl palavras_proibidas url_regex "/etc/squid/blocked/proibidos.txt" acl palavras_liberadas url_regex "/etc/squid/blocked/liberados.txt" # # ACLs para filtragem por extensao (proibidos e liberados) # acl downloads_proibidos url_regex "/etc/squid/blocked/downloads_proibidos.txt" acl downloads_liberados url_regex "/etc/squid/blocked/downloads_liberados.txt" # # ACL para filtragem do MSN # acl msn url_regex -i /gateway/gateway.dll # # ACLs para bloqueio de navegacao por IP e p/ o TeamViewer # acl Block_IP_Navegacao dstdom_regex [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ acl teamviewer browser -i .*DynGate.* # # ACLs para cache do YouTube # acl googlevideo dstdomain .googlevideo.com cache allow googlevideo acl youtube dstdomain .youtube.com cache allow youtube # # cgi-bins nao ficam armazenados. # acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY # # Sites que geram muito trafego. # acl pesado url_regex "/etc/squid/blocked/trafego.txt" #acl pesado req_mime_type "/etc/squid/blocked/mimetypes.txt" acl gulosos src "/etc/squid/blocked/ip.pesado.txt" acl regime src "/etc/squid/blocked/ip.leve.txt" # # Regras de bloqueio de acesso # #http_access allow localhost http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow ftp todos http_access allow !spyware todos http_access allow passareto todos http_access allow palavras_liberadas todos http_access allow !palavras_proibidas todos http_access allow downloads_liberados todos http_access allow !downloads_proibidos todos http_access deny Block_IP_Navegacao todos http_access deny teamviewer todos http_access deny all ##### always_direct allow locais #always_direct deny all #never_direct allow all ##### #never_direct allow passareto #never_direct allow CONNECT #never_direct allow POST # # Nao faz cache dos enderecos locais # no_cache deny NOCACHE # # delay pools - 2 deles, um c/ restricoes p/ Youtube, Adobe, Macromedia # e sites de vÃdeo. # delay_pools 2 # # delay classes - Classe 2 # delay_class 1 2 delay_class 2 2 # # delay access - Redirecionando acesso # delay_access 1 allow pesado gulosos delay_access 2 allow pesado regime # # delay parameters - classe 3 # delay_parameters 1 10240/10240 10240/10240 delay_parameters 2 -1/-1 -1/-1 # http_access allow biblioteca (...) http_access deny secretaria # # Não caiu numa das regras de cima, corta o acesso. # tcp_outgoing_address 10.10.10.130 DINFO tcp_outgoing_address 192.168.1.64 ADSL1 tcp_outgoing_address 192.168.1.64 ADSL2 tcp_outgoing_address 192.168.1.64 ADSL3 # # Acesso cortado para quem escapar da regra anterior. # http_access deny todos icp_access allow todos # http_reply_access allow todos miss_access allow todos # cache_mgr Squid's_BAFH cache_effective_user proxy cache_effective_group proxy visible_hostname firewall # dns_testnames faetec.rj.gov.br rio.rj.gov.br brasil.gov.br ufrj.br linux.org logfile_rotate 7 # icon_directory /usr/share/squid3/icons error_directory /usr/share/squid3/errors/Portuguese coredump_dir /tmp client_persistent_connections on server_persistent_connections on pipeline_prefetch off store_dir_select_algorithm least-load ie_refresh on htcp_access deny todos htcp_clr_access deny todos ident_lookup_access deny todos #reply_body_max_size 0 allow todos #follow_x_forwarded_for deny todos snmp_access deny todos # #MSX r0x a lot
Enviado em 03/11/2011 - 17:35h
No seu squid.conf altere a opçãodns_nameservers 127.0.0.1 10.0.0.5 10.0.0.254
dns_nameservers 8.8.4.4 8.8.8.8
Enviado em 04/11/2011 - 14:10h
Eu tenho um DNS interno (rodando em cima do MaraDNS), funciona como caching nameserver e servidor de domínio p/ a "parte de dentro" da nossa rede. O MaraDNS resolve os IPs no OpenDNS, q é um serviço muito útil p/ quem tem uma escola cheia de adolescentes c/ a cabeça cheia de hormônios... =)Enviado em 04/11/2011 - 14:31h
Nesse caso está faltando você liberar o acesso à porta 53/udp na chain INPUT. Sem isso a interface de loopback não consegue acessar o MaraDNS para resolver os nomes.Enviado em 07/11/2011 - 17:13h
Coloquei as linhas do iptables conforme foi passado, e coloquei como a 1a entrada no script (antes mesmo do ponto onde eu desligo o ip forward), e neca: A rede continua muito lenta.Enviado em 07/11/2011 - 17:30h
Enviado em 08/11/2011 - 10:52h
Desliguei o layer7 e o problema foi resolvido. Layer 7 em kernelspace era quem estava fazendo c/ q a velocidade fosse p/ o chão, e está resolvido. Valeu pela força!Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
De volta para o futuro - ou melhor, para o presente (21)
A area de trabalho ficou preta (2)
Cursos, livros e comunidades (4)
Erro de Montagem SSD Nvme (11)
O gerenciamento da placa de som do meu sistema está maluco (0)