当前位置: 首页 > 知识库问答 >
问题:

将squid设置为透明代理(在公共子网中)时,无法从私有子网中的EC2实例访问公共EC2实例

西门威
2023-03-14

我正在尝试在公有子网中的 EC2 实例上使用 squid 设置 DNS 筛选。将允许通过/阻止来自私有子网的 EC2 实例通过公有 EC2 实例。

如果我SSH到私有EC2实例并运行curlgoogle.com,什么都不会发生(google.com在我的whitelist.txt文件中)。/var/log/squid/access.log没有显示新条目。

如果我运行ssh

我认为存在配置错误。为了调试这种情况,我需要知道什么?有没有办法知道路由在哪里失败(从实例或AWS控制台)?我已经验证了VPC设置、路由表和安全组权限,但看不出缺少什么。

我从AWS控制台并通过EC2实例中的SSH手动进行了设置。

我的设置是:

    <李> 10.0.0.0/16 < ul > < li >公共子网:10.0.0.0/20 < li >专用子网1: 10.0.128.0/20 < li >专用子网2: 10.0.144.0/20
  • 公共rtb:
    • 2016年0月10日-
    • 10.0.0.0/16 -
      < li >公共-sg: < ul > < li >从10.0.0.0/16开始允许所有ICMP-IP v4 < li >允许从我的本地IP使用SSH < li >从10.0.0.0/16开始允许HTTPS (TCP IPV4,端口443 ) < li >从10.0.0.0/16开始允许HTTP (TCP IPV4,端口80 )
    • SSH允许从10.0.0.0/16开始
    • 自身允许的所有流量
    • 公有子网中安装并配置了 squid 的 EC2 实例
    • 私有子网中有 2 个私有实例

    鱿鱼设置:

    1. 在公有 EC2 实例中设置开放证书
    mkdir /etc/squid/ssl
    cd /etc/squid/ssl
    openssl genrsa -out squid.key 4096
    openssl req -new -key squid.key -out squid.csr -subj "/C=XX/ST=XX/L=squid/O=squid/CN=squid"
    openssl x509 -req -days 3650 -in squid.csr -signkey squid.key -out squid.crt
    cat squid.key squid.crt >> squid.pem  
    
    
    visible_hostname squid 
    cache deny all 
    
    # Log format and rotation 
    logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %ssl::>sni %Sh/%<a %mt 
    logfile_rotate 10 
    debug_options rotate=10 
    
    # Handle HTTP requests 
    http_port 3128 
    http_port 3129 intercept 
    
    # Handle HTTPS requests 
    https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept 
    acl SSL_port port 443 
    http_access allow SSL_port 
    acl step1 at_step SslBump1 
    acl step2 at_step SslBump2 
    acl step3 at_step SslBump3 
    ssl_bump peek step1 all 
    
    # Deny requests to proxy instance metadata 
    acl instance_metadata dst 169.254.169.254 
    http_access deny instance_metadata 
    
    # Filter HTTP requests based on the whitelist 
    acl allowed_http_sites dstdomain "/etc/squid/whitelist.txt" 
    http_access allow allowed_http_sites 
    
    # Filter HTTPS requests based on the whitelist 
    acl allowed_https_sites ssl::server_name "/etc/squid/whitelist.txt" 
    ssl_bump peek step2 allowed_https_sites 
    ssl_bump splice step3 allowed_https_sites 
    ssl_bump terminate step2 all 
    
    http_access deny all     
    
    sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
    sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130  
    

共有1个答案

钱凌
2023-03-14
匿名用户

我认为这里的问题是,在您的配置文件中,您有http_access拒绝所有,但没有ACL允许来自任何网络的流量

例如(从squid.conf模板):

acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8     # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10      # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16     # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12      # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16     # RFC 1918 local private network (LAN)
acl localnet src fc00::/7           # RFC 4193 local private network range
acl localnet src fe80::/10          # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager

http_access allow localhost
http_access allow localnet
http_access deny all

为简单起见,您可以在配置文件的开头添加这两行(必须在< code>http_access deny all之前):

acl acl_name src your_public_ip
http_access allow acl_name

 类似资料:
  • 我可以就我正在进行的AWS VPC实验室练习寻求帮助吗?谢谢 我创建了一个新的 VPC,分别是公有子网和私有子网,然后分别在每个子网中启动了 2 个 EC2 实例。我还设置了在私有子网安全组上进行 ping (ICMP) 访问所需的安全组。但是,我无法从公有子网中的实例 ping 私有子网中的实例。 以下是设置: VPC:(CIDR块10.0.0.0/16) 公共子网:(CIDR区块10.0.1.

  • 是否有人在VPC的公共子网中配置了NLB以将流量路由到私有子网中的EC2实例? 使用ELB时,一个好的解决方案是为ELB创建一个安全组,然后为私有EC2实例创建另一个安全组,允许来自该ELB安全组的传入流量,如下所述: https://aws.amazon.com/premiumsupport/knowledge-center/public-load-balancer-private-ec2/ “

  • 我在AWS中有一个公共子网,我在其中有3个实例。。。 WebApp01 (例如弹性 IP - 54.23.61.239) WebApp02 (私有 IP - 192.168.0.24) 虚拟应用程序03 (私有 IP - 192.168.0.25) 我的路由表设置为192.168.0.0/16 - 我可以看到拥有公共IP的实例可以访问互联网,但没有公共IP的实例无法访问互联网。 如何让Intern

  • 我是StackOverflow的新手,如果我需要编辑这篇文章以使其更清晰,请告诉我。 目标:通过位于公用子网内的wireguard vpn(这些子网都在同一VPC内),通过专用子网内HTTP/HTTPS web应用实例访问。 情况: 我有一个VPC: 1个公共子网,其中包含运行wireguard VPN的ec2实例 4个私有子网,分别包含运行单个web应用程序的ec2(基于bitnami图像)。w

  • 我已经设置了下面的VPC配置,但SSH到该实例目前没有发生: 创建新VPC 创建了公用和专用子网 将ec2实例启动到公共子网,更新了互联网网关的路由表 已将ec2实例启动到专用子网 将一个natgateway与EIP中的公用子网关联 已使用natgateway更新专用子网的路由表 从公共实例到私有实例的SSH不会发生在密钥对上。你能告诉我我错过了什么吗?

  • 一个和我一起工作的人给了我EC2证书,让我登录到他的EC2控制台。不是我设计的。一些实例显示公共dns名称,而另一些实例具有空白的公共dns。我希望能够连接到具有空白公共DNS的实例。我一直无法理解为什么这些显示为空白。