AWSの上でVPSを使っているファイアウォールを迂回する方法


あなたが学校で閲覧したり、仕事をする場合は、おそらくいくつかの問題は、特定のウェブサイトで閲覧したり、特定のアプリケーションを使用して経験している.仕事や学校の環境でインターネット上のいくつかの種類のブロックをブロックするために一般的な練習は、彼らはtorrent、アダルトコンテンツなどのトラフィックの別の種類をブロックしたり、彼らはちょうどあなたが承認されていないサイトを閲覧する必要はありませんウェブトラフィック、あなたの学校や仕事を許可します.

ファイアウォールの種類


ファイアウォールのブロックの特定のレベルがあり、最も簡単なのは、Webページの特定の種類のブロックに基づいています.他のタイプのファイアウォールブロッキングはプロトコルに基づいています、そして、彼らはちょうどウェブトラフィック、SSH、DNSなどの特定の種類のトラフィックを許します.

誰がファイアウォールをバイパスしたいですか?


さまざまな理由でファイアウォールを迂回したいユーザがいくつかあります.
  • Webページの特定の種類で閲覧したい
  • そのような奔流をブロックされている特定のアプリケーションを使用したい
  • ファイアウォールの背後にある学校や職場環境にアクセスする必要性
  • 使用方法に応じてファイアウォールをバイパスする方法が異なります.ブロックされたウェブサイトで閲覧するだけのユーザーの最初の種類のために、方法はVPNまたはプロキシでありえました.特定の非Webアプリケーションを使いたいユーザのために、このメソッドはVPNであるかもしれません.ユーザーの最後の種類は、学校や職場で実行しているSSHサーバのようなファイアウォールの背後に実行しているいくつかのサービスを公開したい、このユーザーのためのメソッドは、サーバー側でのポート転送をSSHポート転送またはVPNすることができます.

    免責事項


    このチュートリアルは、情報と教育目的のためだけに行われました.私は与えられた情報の不正使用の責任を負うことはできません.あなたが違法な目的のために情報を使う予定であるならば、現在、このチュートリアルを残してください.

    始める前に


    このチュートリアルでは、ファイアウォールをバイパスするためにVPNサーバ、プロキシサーバ、およびSSHサーバを設定するつもりです.通常、一部のサービスは、HTTP、HTTPS、SSH、DNSのようなファイアウォールによってブロックされません.
  • ポート80/TCPのSQUIDプロキシ
  • ポート22/tcp上のSSHサーバ
  • ポート443/TCP上のOpenVPN
  • ポート53/UDPの上のwireguard VPN
  • これらのサービスのそれぞれに利点と欠点があり、SSHのトンネルとしてSSHトンネルを使用することができます特定の目的を提供し、SSHポート転送を使用してSSHトンネルを介して転送ポートが有用ですが、いくつかのアプリケーションとモバイルデバイスでは、このメソッドは十分ではありません.プロキシを使用すると、ブロックされたWebページで閲覧したい場合に非常に便利です.VPNは、制限なしにナビゲートするのに最適なソリューションですが、それはデスクトップとモバイルデバイスで動作する場合は、クライアントからインターネットへのトラフィックを転送することができますまたはプライベートサブネットは、ゲートウェイデバイスを使用してVPSサーバーを介してクライアントにクライアントを接続するようにラズベリーパイ.このチュートリアルでは、2つのVPN、wireguardとOpenVPNは、私の個人的な意見のwivguardのセットアップでは、OpenVPNよりも優れていますが、WreguardはTCPプロトコルでは動作しませんので、私はWikiGuardを53/UDPとOpenVPNで443/TCPで設定する理由ですOpenVPNのTCP 1つの利点は、キー交換のためのSSL/TLSを利用しているので、パケット分析はHTTPSトラフィックのように表示されますプロトコルです.

    のVPSの設定


    私たちが仮想プライベートサーバ(VPS)を必要とするすべてのサービスのために、このVPSはどんなパブリッククラウドプロバイダーでもセットアップでありえました.
    最初のステップはAWSのアカウントを作成し、VPSを作成し、キーペアとセキュリティグループを設定します.私は次の設定でubuntu 20.04を選びます.

    VPSを再起動するとき、私は静的IPアドレスを関連付けることを推薦するとき、変化OS IPを避けるために、これは以下のイメージに示されるように、弾性IPオプションでセットされることができます

    VPSへのアクセス


    我々は、以前の手順を作成し、移動するキーペアをダウンロードする必要があります~/.ssh ディレクトリ
    $ mv ~/Downloads/aws.pem ~/.ssh/
    
    ファイルのパーミッションを変更する
    $ chmod 400 ~/.ssh/aws.pem
    
    リモートVPSへのアクセス
    $ ssh -i ~/.ssh/aws.pem ubuntu@<public_ip_address>
    
    システムを更新する
    $ apt-get update && apt-get upgrade -y
    

    パッケージのインストール


    $ apt-get install wireguard squid fail2ban qrencode apache2-utils -y
    

    FAIL 2 BANを設定する


    FAIL 2 BANは、インターネットに公開されたサービスで自動化されたブルートフォース攻撃を防ぐのを助けるツールです.
    SSHD刑務所を加える/etc/fail2ban/jail.d/sshd-jail.conf
    [sshd]
    enabled   = true
    maxretry  = 3
    findtime  = 1d
    bantime   = 4w
    ignoreip  = 127.0.0.1/8
    
    リロード失敗サービス
    $ systemctl restart fail2ban
    
    チェックSSHD刑務所
    $ fail2ban-client status sshd
    

    サーバの設定


    SSHポート転送を設定するには、/etc/ssh/sshd_config TCPフォワーディングとゲートウェイポートを許可する
    AllowTcpForwarding yes
    GatewayPorts yes
    
    SSHサーバの再読み込み
    $ systemctl restart sshd
    
    これでSSHトンネルを経由してポートフォワーディングを設定できますthis SSHトンネルでSystemIDサービスを作成するチュートリアル.

    のプロキシを設定する


    SQUIDはHTTPプロキシ、それはファイアウォールをバイパスするポート80で設定することができます.
    Squidプロキシを設定するポート80と基本的なユーザー認証を聞いてください.
    ユーザーとパスワードを作成
    $ htpasswd -c /etc/squid/passwd client1
    
    configファイルを生成します
    $ mv /etc/squid/squid.conf /etc/squid/squid.conf.bk
    
    設定ファイルを生成する/etc/squid/squid.conf
    $ cat <<EOF > /etc/squid/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
    
    auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
    auth_param basic children 5
    auth_param basic realm Squid Basic Authentication
    auth_param basic credentialsttl 2 hours
    acl auth_users proxy_auth REQUIRED
    http_access allow auth_users
    
    http_access deny !Safe_ports
    
    http_access deny CONNECT !SSL_ports
    
    http_access allow localhost manager
    http_access deny manager
    
    include /etc/squid/conf.d/*
    
    http_access allow localhost
    
    http_access deny all
    
    http_port 80
    
    coredump_dir /var/spool/squid
    
    refresh_pattern ^ftp:           1440    20%     10080
    refresh_pattern ^gopher:        1440    0%      1440
    refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
    refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
    refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
    refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
    refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
    refresh_pattern .               0       20%     4320
    EOF
    
    SQUIDサービスの再起動
    $ systemctl restart squid
    
    今すぐあなたのブラウザ、システムや電話でプロキシを構成することができます.

    で53 / UDPを設定する


    WireGuardは、カーネル側で動作する近代的なVPNプロトコルは、残念ながら、UDPポート上でのみ動作し、ファイアウォールのほとんどは、いくつかのサービスを除いて、UDP接続を出て、53/UDPのようなDNSのようなDNSのように、我々は53/UDPで聞くためにwireguardを設定します.
    まず最初に、我々はIP推進を可能にする必要があります
    $ sysctl -w net.ipv4.ip_forward=1
    
    変更を永続化するnet.ipv4.ip_forward=1 イン/etc/syctl.conf
    $ sed -i '/net.ipv4.ip_forward/s/^#//g' /etc/sysctl.conf
    
    systemdベースのdistrosのほとんどはシステムの解決を使用してDNSクエリを解決するために使用していますが、これは問題を解決します.
    $ ss -ulpn4
    
    以下のイメージで見ることができるように、ポート53/UDPを聞くプロセスはシステム解決です

    無効にする
    $ systemctl disable --now systemd-resolved
    
    この行を追加する/etc/resolv.conf
    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
    これでポート53/UDPを使用していることを確認できます
    $ ss -ulpn4
    
    この点では、wireguardサーバ用の設定ファイルを生成する必要があります.
    configファイルを作成する前に、あなたのインターフェース名に従って、私のケースのデフォルトインターフェースはeth 0です
    $ ip -o -4 route show to default | cut -d ' ' -f 5
    
    の設定ファイルを作成する/etc/wireguard/wgserver.conf
    [Interface]
    Address = 10.20.0.1/24
    ListenPort = 53
    PrivateKey = <your_private_key>
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    SaveConfig = true
    
    秘密のキーを生成する/etc/wireguard/wgserver.conf
    $ sed -i "s/<your_private_key>/$(wg genkey)/" /etc/wireguard/wgserver.conf
    
    有効にする
    $ sudo systemctl enable --now wg-quick@wgserver
    
    クライアントテンプレートの生成~/wgclients/template.conf
    [Interface]
    PrivateKey = <private_key>
    Address = 10.20.0.xxx/32
    
    [Peer]
    PublicKey = <server_public_key>
    Endpoint = <public_ip_address>:53
    AllowedIPs = 0.0.0.0/0, ::/0
    
    サーバ公開鍵を取得します<server_public_key> イン~/wgclients/template.conf ファイル
    $ wg show wgserver | awk '/public key:/{print $3}'
    
    サーバのIPアドレスを設定する~/wgclients/template.conf
    $ sed -i "s/<public_ip_address>/$(curl -s ifconfig.me/ip)/" ~/wgclients/template.conf
    
    クライアントとコピーテンプレートの生成
    $ mkdir -p ~/wgcliets/client1
    $ cp ~/wgclients/template.conf ~/wgcliets/client1/client1.conf
    
    クライアントキーの生成
    $ cd ~/wgclients/client1
    $ wg genkey | tee private-key | wg pubkey > public-key
    
    プライベートキーと貼り付けをコピー~/wgclients/client1.conf ファイルとIPアドレスを設定します.クライアント公開キーを追加する/etc/wireguard/wgserver.conf トンネルIPアドレス
    [Peer]
    PublicKey = <client_public_key>
    AllowedIPs = 10.20.0.10/32
    
    オンザフライで再ロード設定
    $ su -c "wg addconf wgserver <(wg-quick strip wgserver)"
    
    Wireguard接続をチェックするには、プレイストアでWreguard Androidアプリをダウンロードしてください.クライアントの設定ファイルからのQRコードを生成し、wireguardアプリでインポートします.
    $ qrencode -t ansiutf8 < ~/wgclients/client1/client1.conf
    
    今、あなたは接続タイピングをチェックすることができますifconfig.me モバイルWebブラウザでは、サーバーのパブリックIPアドレスが表示されます

    のOpenVPNの設定


    OpenVPNは、すべてのWebサイトがSSL/TSLを使用しているので、ファイアウォールがそのポートを塞ぐことができないので、それがHTTPSポートでセットされることができたように、鍵交換のためにSSL/TLSを利用するカスタムセキュリティプロトコルを使用するVPNです.
    OpenVPNを自動スクリプトでインストールする
    $ git clone https://github.com/Nyr/openvpn-install.git
    $ cd openvpn-install
    $ bash openvpn-install.sh
    
    次のパラメータを使用して設定します.
  • 私の場合はeth 0でIPv 4アドレスを使います.172.31.14.144
  • パブリックIPv 4アドレスを設定する
  • プロトコル: TCP
  • ポート443
  • DNS:1.1.1.1
  • 構成は以下のイメージで示されます

    クライアントの設定ファイルは/root ディレクトリ、コピー
    $ mkdir ~/ovpnclients
    $ mv /root/client1.ovpn /home/ubuntu/ovpnclients/
    $ chown ubuntu:ubuntu ~/ovpnclients/client1.ovpn
    
    ダウンロードしてPCに設定ファイルとAndroidアプリに転送
    $ scp -i ~/.ssh/aws.pem ubuntu@<public_ip_address>:~/ovpnclients/client1.ovpn ~/ovpnclients
    
    Androidアプリでのファイルのインポートと接続ifconfig.me サーバのパブリックIPアドレスが表示されます.

    結論


    これらのメソッドは、ほとんどすべてのシナリオで動作します.これらのメソッドは、作業環境でセキュリティ違反を開くことができますので、独自のリスクでそれらを使用してください.