Burnchi

Burnchi

欢迎来到我的安全屋~
github
bilibili

centos7でredsocksを使用する

依存関係のダウンロード#

yum install -y libevent libevent-devel gcc

ソースコードのダウンロード#

https://github.com/darkk/redsocks

ソースコードのコンパイル#

cd redsocks
make

ショートカット#

redsocks を /usr/bin にコピーします

設定ファイルの変更#

proxy.sh(自動化スクリプト)と /etc/redsocks.conf を変更します

proxy.sh(centos7)

#!/bin/bash

socks5_ip="192.168.31.200"
user="root"



line(){
    echo -e "========================================="
}

startproxy(){
    # iptablesポリシーの設定
    iptables -t nat -N REDSOCKS
    iptables -t nat -A REDSOCKS -d $socks5_ip -j RETURN
    iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 100.64.0.0/10 -j RETURN
    iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
    iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
    iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

    # その他はすべてポート12345にリダイレクトされるべきです
    iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

    # `luser'によって作成された任意のtcp接続はリダイレクトされるべきです。
    iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $user -j REDSOCKS

    # redsocksサービスを開始します
    nohup redsocks -c /etc/redsocks.conf > /dev/null 2>&1 &

    redsocks_pid=$(ps -ef | grep 'redsocks' | grep -v 'grep' | awk '{ printf $2 }')
}

stopproxy(){
    # iptablesポリシーをクリアします
    iptables -t nat -F
    iptables -t nat -X
    
    # redsocksサービスを停止します
    kill $redsocks_pid
    wait $redsocks_pid 2>/dev/null
}



while true;do
line
    echo -e "Redsocks自動化スクリプト【1.0】
【1】全体プロキシを開始
【2】全体プロキシを停止"
line

    read -r -p "数字を入力してください【1-2】:" num
        

    if [ $num -eq 1 ]; then
        startproxy
        echo "【+】Redsocksが開始されました。。。"
        continue
    elif [ $num -eq 2 ]; then
        stopproxy
        echo "【-】Redsocksが停止されました。。。"
        continue
    else
        echo -e "正しい数字を入力してください!!!"
    fi

done

proxy.sh(kali)

#!/bin/bash

socks5_ip="192.168.31.121"
user="root"
red_prefix="\033[31m"
green_prefix="\033[32m"
purple_prefix="\033[35m"
font_suffix="\033[0m"

line(){
    echo -e "========================================="
}




startproxy(){
    # iptablesポリシーの設定
    iptables -t nat -N REDSOCKS
    iptables -t nat -A REDSOCKS -d $socks5_ip -j RETURN
    iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
    iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
    iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

    # その他はすべてポート12345にリダイレクトされるべきです
    iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

    # `luser'によって作成された任意のtcp接続はリダイレクトされるべきです。
    iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $user -j REDSOCKS

    # redsocksサービスを開始します
    nohup redsocks -c /etc/redsocks.conf > /dev/null 2>&1 &
    # redsocksプロセスIDを取得します
    redsocks_pid=$(ps -ef | grep 'redsocks' | grep -v 'grep' | awk '{ printf $2 }')
}

stopproxy(){
    # iptablesポリシーをクリアします
    iptables -t nat -F
    iptables -t nat -X
    
    # redsocksサービスを停止します
    pkill redsocks
}

while true;do
if [ $(netstat -tanplu | grep redsocks | wc -l) -ne 0 ];then
line
    echo -e "   $purple_prefix Redsocks自動化スクリプト【1.0】$font_suffix
$green_prefix【現在の状態:開始】$font_suffix
【1】全体プロキシを開始
【2】全体プロキシを停止"
line
else
line
    echo -e "   $purple_prefix Redsocks自動化スクリプト【1.0】$font_suffix
$red_prefix【現在の状態:停止】$font_suffix
【1】全体プロキシを開始
【2】全体プロキシを停止"
line
fi

    read -r -p "数字を入力してください【1-2】:" num
    if [ $num -eq 1 ]; then
        startproxy
        echo -e "$green_prefix 【+】Redsocksが開始されました。。。$font_suffix"
        continue
    elif [ $num -eq 2 ]; then
        stopproxy
        echo -e "$red_prefix【-】Redsocksが停止されました。。。$font_suffix"
        continue
    else
        echo -e "正しい数字を入力してください!!!"
    fi

done

/etc/redsocks.conf

base {
        // デバッグ: 接続の進行状況
        log_debug = off;

        // 情報: クライアントセッションの開始と終了
        log_info = on;

        /* 可能な`log`値は次のとおりです:
         *   stderr
         *   "file:/path/to/file"
         *   syslog:FACILITY  facilityは"daemon"、"local0"..."local7"のいずれかです
         */
        log = stderr;
        // log = "file:/path/to/file";
        // log = "syslog:local7";

        // コンソールから切り離す
        daemon = off;

        /* uid、gid、およびルートディレクトリを変更します。これらのオプションは、起動時にroot権限を必要とします。
         * 注意: chrootを使用する場合、ログをsyslogに書き込む場合は/etc/localtimeが必要です。
         * ログはchrootおよびuid変更の前に開かれます。
         * Debian、Ubuntuおよび他のいくつかのディストリビューションは、`nobody`の代わりに`nogroup`を使用します。
         * したがって、redsocksがroot権限を放棄するようにしたい場合は、システムに応じて変更してください。
         */
        // user = nobody;
        // group = nobody;
        // chroot = "/var/chroot";

        /* 可能な`redirector`値は次のとおりです:
         *   iptables   - Linux用
         *   ipf        - FreeBSD用
         *   pf         - OpenBSD用
         *   generic    - 動作する可能性のある一般的なリダイレクタ
         */
        redirector = iptables;

        /* TCP_KEEPIDLE、TCP_KEEPCNT、およびTCP_KEEPINTVLのソケットごとの値をオーバーライドします。
         * 詳細についてはman 7 tcpを参照してください。
         * `redsocks`はSO_KEEPALIVEオプションに大きく依存しています。 */
        //tcp_keepalive_time = 0;
        //tcp_keepalive_probes = 0;
        //tcp_keepalive_intvl = 0;

        // 各`redsocks`接続には、ソケット用に2つのファイルディスクリプタが必要です。
        // `splice`が有効な場合、パイプ用に4つのファイルディスクリプタも必要です。`redudp`は現在考慮されていません。
        // 最大接続数に達すると、redsocksはアイドル接続を閉じようとします。アイドル接続がない場合、新しい接続をaccept()するのを停止しますが、
        // カーネルはlistenqを埋め続けます。

        // 開いているファイルディスクリプタの最大数を設定します(`ulimit -n`としても知られています)。
        //  0 -- 起動制限を変更しない(デフォルト)
        // rlimit_nofile = 0;

        // サーブされる接続の最大数を設定します。デフォルトは、`splice`設定とRLIMIT_NOFILEから安全な制限を推測することです。
        // redsocks_conn_max = 0;

        // 接続数制限に達した場合、N秒間アイドル状態の接続を閉じます。
        //  0 -- アイドル接続を閉じない
        //  7440 -- 2時間4分、RFC 5382を参照(デフォルト)
        // connpres_idle_timeout = 7440;

        // `max_accept_backoff`は、失敗後に`accept()`を再試行するためのミリ秒単位の遅延です(例: ファイルディスクリプタが不足しているため)。
        // これは、誤って設定された`redsocks_conn_max`のための安全ネットです。acceptバックオフが発生した場合は、redsocks_conn_maxを調整する必要があります。
        // max_accept_backoff = 60000;
}

redsocks {
        /* `local_ip`はセキュリティ上の理由から127.0.0.1がデフォルトですが、
         * すべてのインターフェースでリッスンしたい場合は0.0.0.0を使用します。
         * `local_*`はリダイレクト先のポートとして使用されます。
         */
        local_ip = 127.0.0.1;
        local_port = 12345;

        // listen()キューの長さ。デフォルト値はSOMAXCONNで、ほとんどの人にとって十分であるはずです。
        // listenq = 128; // SOMAXCONNは私のLinuxボックスで128に等しいです。

        // splice(2)システムコールに基づいて、より高速なデータポンプを有効または無効にします。
        // デフォルト値はカーネルのバージョンに依存し、2.6.27.13以上ではtrueです。
        // splice = false;

        // `ip``port`はプロキシサーバーのIPとtcpポートです。
        // IPの代わりにホスト名を使用することもできます。マルチホーミングホストのアドレスのうち、1つ(ランダム)だけが使用されます。
        ip = 192.168.31.200;
        port = 2801;

        // 知られているタイプ: socks4, socks5, http-connect, http-relay
        type = socks5;

        // login = "foobar";
        // password = "baz";

        // プロキシにクライアントIPを開示する方法:
        //  false -- 何も開示しない
        // http-connectは次のことをサポートします:
        //  X-Forwarded-For  -- X-Forwarded-For: IP
        //  Forwarded_ip     -- Forwarded: for=IP # RFC7239を参照
        //  Forwarded_ipport -- Forwarded: for="IP:port" # RFC7239を参照
        // disclose_src = false;

        // プロキシの失敗を処理するさまざまな方法
        //  close -- 接続を単に閉じる(デフォルト)
        //  forward_http_err -- プロキシからHTTPエラーページをそのまま転送
        // on_proxy_fail = close;
}

redudp {
        // `local_ip`は0.0.0.0であってはならず、これは応答として送信されるパケットにも使用されるため、
        // NATが正しく機能するためには修正する必要があります。
        local_ip = 127.0.0.1;
        local_port = 10053;

        // socks5プロキシサーバーの`ip``port`
        ip = 10.0.0.1;
        port = 1080;
        login = username;
        password = pazzw0rd;

        // redsocksは、LinuxでUDPパケットをリダイレクトする際に2つのオプションを認識しています: TPROXYとREDIRECT。
        // TPROXYはより複雑なルーティング設定と新しいカーネル(>= 2.6.37、squid開発者による)を必要としますが、
        // 元の宛先アドレスを取得するためのハックフリーな方法です。REDIRECTは設定が簡単ですが、`dest_ip`
        // `dest_port`を設定する必要があり、パケットのリダイレクトを単一の宛先に制限します。
        // [1] http://wiki.squid-cache.org/Features/Tproxy4
        dest_ip = 8.8.8.8;
        dest_port = 53;

        udp_timeout = 30;
        udp_timeout_stream = 180;
}

dnstc {
        // 偽の非常に単純なDNSサーバーで、すべてのクエリに対して"切り捨てられた回答"を返します。
        // RFC準拠のリゾルバは、この場合TCP経由で同じクエリを繰り返す必要があります。
        local_ip = 127.0.0.1;
        local_port = 5300;
}

dnsu2t {
        // 偽の少し賢いDNSサーバーで、いくつかのUDPクエリを単一のパイプライン化されたTCPストリームのDNSクエリに変換します。
        local_ip = 127.0.0.1;
        local_port = 5313;

        // https://en.wikipedia.org/wiki/Public_recursive_name_serverを参照してください
        // 注意: この${ip}:${port}へのTCP接続はプロキシを通過しません。必要に応じてファイアウォールルールを設定してください。
        remote_ip = 8.8.8.8;
        remote_port = 53;

        // リモートサーバーに送信される同時に進行中のDNSクエリの最大数。
        // 一部の公共DNSサーバーはこれを制限し、高い数の進行中のリクエストで接続を終了するようです。
        // したがって、リクエストの待機時間と可用性の間のトレードオフです。進行中のリクエストはキャッシュされず、
        // DNS/TCP接続が終了した場合は失われます。
        // inflight_max = 16;

        // リモートエンドポイントのI/Oタイムアウト。デフォルト値はかなり保守的で、Wikipediaの公共サーバーの中で最も高いタイムアウトに対応しています。
        // remote_timeout = 30;
}

// 必要に応じて、さらに多くの`redsocks`および`redudp`セクションを追加できます。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。