OpenVPN Access Server用のiptables設定

概要

OpenVPN Access ServerではTCP 914, UDP 915:918をiptablesで閉じると接続できなくなります。

背景

OpenVPN Access Serverが壊れたので作り直しました。
作り方は記事にしてあるし大丈夫やろ、と思っていたら、iptables周りで躓いたので備忘録です。

やりかた

構成

クライアントはインターネット経由でルーターに接続しにきて、それをポートフォワードでOpenVPN Access Serverへ転送するという構成をとっています。

TCP 443とUDP 1194は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で監視してみてもアクセス来てないんですよね。何やってるかさっぱりです。

コメント