概要
OpenVPN Access ServerではTCP 914, UDP 915:918をiptablesで閉じると接続できなくなります。
背景
OpenVPN Access Serverが壊れたので作り直しました。
作り方は記事にしてあるし大丈夫やろ、と思っていたら、iptables周りで躓いたので備忘録です。
やりかた
構成
クライアントはインターネット経由でルーターに接続しにきて、それをポートフォワードでOpenVPN Access Serverへ転送するという構成をとっています。

その上で、OpenVPN Access Serverのiptablesで次の設定を入れていました。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -s 192.168.0.0/16 -j ACCEPT
# specific settings #
-A INPUT -p tcp -m multiport --dports 443 -j ACCEPT
-A INPUT -p udp -m multiport --dports 1194 -j ACCEPT
# implicit deny #
-A INPUT -j DROP
COMMITこれ普通に繋がると思うじゃないですか。
でもクライアントからの接続は失敗するんです。
解決策
これが正しい設定です。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -s 192.168.0.0/16 -j ACCEPT
# specific settings #
-A INPUT -p tcp -m multiport --dports 443,914 -j ACCEPT
-A INPUT -p udp -m multiport --dports 1194,915:918 -j ACCEPT
# implicit deny #
-A INPUT -j DROP
COMMITルーター側の設定は変える必要はありません。
何が起きているのか
全然わかりません。
ポートフォワードされていないポートが開いていようが閉まっていようが関係なくないですか?
わかっていることは、lsof -i でlisten portを見てみると対象のポートをOpenVPN Access Serverが使っていることと、これを開ければ動くということだけです。
# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
openvpn-o 2147 openvpn_as 5u IPv4 38510 0t0 TCP *:914 (LISTEN)
openvpn-o 2153 openvpn_as 6u IPv4 40856 0t0 TCP xxx:914->00-0-000-00.infrawat.ch:5470 (ESTABLISHED)
openvpn-o 2153 openvpn_as 8u IPv4 43320 0t0 TCP localhost:56564->localhost:909 (ESTABLISHED)
openvpn-o 2160 openvpn_as 5u IPv4 38955 0t0 UDP *:915
openvpn-o 2170 openvpn_as 5u IPv4 37795 0t0 UDP *:916
openvpn-o 2180 openvpn_as 5u IPv4 38570 0t0 UDP *:917
openvpn-o 2190 openvpn_as 5u IPv4 38714 0t0 UDP *:918おまけ
どうやって見つけたか
とりあえずiptablesをクリアしてみたら繋がることがわかりました。
そのあとは0~65535までのポートを2分探索で開けていって見つけました。
最初にlisten port見ればよかった。
これらのポートは何をやってんの?
tcpdumpで監視してみてもアクセス来てないんですよね。何やってるかさっぱりです。

コメント