Linuxで簡単にポートを変更(リダイレクト)しよう
こんにちは、水珈琲(@mizucoffee)です。
今回は、Unix/Linuxで簡単にポートリダイレクト出来るコマンドを紹介します!
redirコマンドを使おう
例えば、サーバのプログラムは標準ユーザで実行したいけど、80番ポートで公開したい。とか思うことありますよね。Unix系の制約として、ウェルノンポートは標準ユーザではバインド出来ない事になっています。
ケーパビリティ機能を使って割り当てるのが正しいけど面倒くさい...
iptables等を使ってリダイレクトする事も出来るけど、これも結構面倒くさい...
そんな時にはredirコマンドがおすすめです!
インストールしよう
redirコマンドのGitHubリポジトリはこちらです。
apt、yum、brew等大体のリポジトリには入っているようです。ArchLinuxはAURに入っていました。
$ apt install redir
$ yum install redir
$ brew install redir
$ yay -S redir
こんな感じでインストールしましょう。
環境によって入るバージョンが違います。バージョンによってコマンドが違うので注意して下さい。
使い方(v3)
コマンドのヘルプはこんな感じです。
$ redir
Usage: redir [-hinspv] [-b IP] [-f TYPE] [-I NAME] [-l LEVEL] [-t SEC]
[-x STR] [-m BPS] [-o FLAG] [-w MSEC] [-z BYTES]
[SRC]:PORT [DST]:PORT
Options:
-b, --bind=IP Force specific IP to bind() to when listening for
incoming connections. Not applicable with -p
-f, --ftp=TYPE Redirect FTP connections. Where type is
one of: 'port', 'pasv', or 'both'
-h, --help Show this help text
-i, --inetd Run from inetd, SRC:PORT comes from stdin
Usage: redir [OPTIONS] [DST]:PORT
-I, --ident=NAME Identity, tag syslog messages with NAME
Also used as service name for TCP wrappers
-l, --loglevel=LEVEL Set log level: none, err, notice*, info, debug
-n, --foreground Run in foreground, do not detach from terminal
-p, --transproxy Run in Linux's transparent proxy mode
-s, --syslog Log messages to syslog
-t, --timeout=SEC Set timeout to SEC seconds, default off (0)
-v, --version Show program version
-x, --connect=STR CONNECT string passed to proxy server
Traffic Shaping:
-m, --max-bandwidth=BPS Limit the bandwidth to BPS bits/second
-o, --wait-in-out=FLAG Wait for in(1), out(2), or in&out(3)
-w, --random-wait=MSEC Wait MSEC milliseconds before each packet
-z, --bufsize=BYTES Size of the traffic shaping buffer
SRC and DST are optional, redir will revert to use 0.0.0.0 (ANY)
使い方は以下のとおりです。
$ redir :<待ち受けるポート> 127.0.0.1:<転送先のポート>
では試しにpython3でサーバーを立ててポートリダイレクトをしてみましょう。
$ python -m http.server 8000
$ sudo redir :80 127.0.0.1:8000
このようにすると、80番ポートでアクセスできるようになります!
使い方(v2)
コマンドのヘルプはこんな感じです。
$ redir
usage:
redir --lport=<n> --cport=<n> [options]
redir --inetd --cport=<n>
Options are:-
--lport=<n> port to listen on
--laddr=IP address of interface to listen on
--cport=<n> port to connect to
--caddr=<host> remote host to connect to
--inetd run from inetd
--debug output debugging info
--timeout=<n> set timeout to n seconds
--syslog log messages to syslog
--name=<str> tag syslog messages with 'str'
--connect=<str> CONNECT string passed to proxy server
--bind_addr=IP bind() outgoing IP to given addr
--ftp=<type> redirect ftp connections
where type is either port, pasv, both
--transproxy run in linux's transparent proxy mode
--bufsize=<octets> size of the buffer
--maxbandwidth=<bit-per-sec> limit the bandwidth
--random_wait=<millisec> wait before each packet
--wait_in_out=<flag> 1 wait for in, 2 out, 3 in&out
Version 2.2.1.
使い方は以下の通りです。
$ redir --lport=<待ち受けるポート> --cport=<転送先のポート>
では試しにpython3でサーバーを立ててポートリダイレクトをしてみましょう。
$ python -m http.server 8000
$ sudo redir --lport=80 --cport=8000
このようにすると、80番ポートでアクセスできるようになります!
まとめ
今回はredirコマンドを紹介しました。
検証でポートを変えたい時など、意外と便利なので是非使ってみてください!
ちなみにUDPポートリダイレクト用のuredirというコマンドもあるので必要に応じて使い分けてみてください。
Discussion
New Comments
No comments yet. Be the first one!