YAMAHAルータ RTX830で鎖国フィルタの構築

Firewallパソコンルーター

ssh接続やメールの送受信など認証が必要な通信については、サーバのfirewalldで国内からだけに限定していました。

世界中からの通信を受け取るpublic zoneと日本だけに限定したjapan zoneの2つを作っていましたが、これだとfail2banとの相性が悪く、「日本からの悪意ある通信」の遮断ができないことに困っていました。

YAMAHAルータ RTX830で日本以外の通信をブロック

そこで、こちらのページを参考に、ルータ側で日本以外からの通信をブロックするフィルタ(鎖国フィルタ)を追加してみることにしました。

「日本以外のIPアドレスを列挙」する必要があるので、configがとても長くなります。性能的に影響があるのかなとしばらく試してみましたが、自分の家の環境では特に性能低下はなさそうなので採用です!

pp select 2
 ip pp secure filter in 1010 1020 1030 1040 1050 2000 2010 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120 2130 2140 2150 2160 2170 2180 2190 2200 2210 2220 2230 2240 2250 2260 2270 2280 2290 2300 2310 2320 2330 2340 2350 2360 2370 2380 2390 2400 2410 2420 2430 2440 2450 3010 4010
 ip pp secure filter out 9010
:
省略
:
ip filter 1010 pass * * icmp * *
ip filter 1020 pass * * established * *
ip filter 1030 pass * * udp * *
ip filter 1040 pass * 192.168.1.4 * * domain,853,smtp,www,https,ftpdata-21,20000-20200,6667
ip filter 1050 pass * 192.168.1.4 * * 5500-5501
ip filter 2000 reject-nolog 1.0.0.0/20,1.0.32.0/19,1.0.128.0/17,1.1.0.0/18,1.1.128.0/17,…
:
省略
:
ip filter 2350 reject-nolog 223.223.128.0/19,223.223.168.0/21,223.223.176.0/20,223.223.192.0/20,223.223.216.0/21,223.224.0.0/12,223.240.0.0/13,223.248.0.0/14,223.252.0.0/18,223.252.96.0/20,223.252.128.0/17,223.253.0.0/16,223.254.0.0/15,224.0.0.0/3 * * * *
ip filter 3010 pass * 192.168.1.4 * * 465,pop3,995,imap2,993,submission,4190,22
ip filter 4010 reject * * * * *
ip filter 9010 pass * * * * *

RTX830のconfigは上記のようになりました。

ip filter 1010~1050は制限なく許可する定義です。icmp,udp,接続済みのtcp通信はすべて許可、サーバに対するdns,mail,wwwなどは許可しています。

ip filter 2000~2450は日本以外のIPアドレスからの通信を遮断しています。ip pp secure filterに存在しない番号が書かれていても問題ないそうです。

ip filter 3010はサーバに対するpop3,imap4,submission,sshなど認証が必要な通信を許可しています。ここを世界中に開放するとパスワードをクラックしようとする通信が格段に増えます。

ip filter 4010でそのほかの通信を遮断してます。

ゆるいフィルタですが、そもそもIPv4はnatによって通信が制限されているので、十分だと思っています。

鎖国フィルタの更新の自動化

鎖国フィルタは国別IPアドレス情報の変更に伴い毎週月曜日に更新されているそうです。

IPv4が枯渇している現在、そんなに変更はないような気がしますが、以下のページを参考に毎月1回フィルタの最新化を行うことにしました。

ますが以下のようなluaスクリプト(ファイル名 sakoku_filter.lua )を作成します。

http_filter = {
	url = "https://api.wakwak-koba.jp/filter/yamaha/in/reject-nolog.txt?country=!JP&start=2000&increment=10&max=2450&save=1",
	method = "GET",
	save_file = "/scripts/sakoku_filter.txt"
}

rtn, str = rt.command("save sd1:config_" .. os.date("%Y%m%d_%H%M%S") .. ".txt")

rt.syslog("info", "[SAKOKU] " .. http_filter.url .. " " .. http_filter.save_file)
rsp_t = rt.httprequest(http_filter)
if (rsp_t.rtn1) and (rsp_t.rtn2) then
	if (rsp_t.code <= 202) then
		f = io.open(http_filter.save_file)
		for line in f:lines() do
			if (string.sub(line, 1, 1) ~= "#") and #line > 0 then
				rtn, str = rt.command(line)
			end
		end
		f:close()
	end
	
	mes ="[SAKOKU] HttpStatusCode:" .. rsp_t.code
	if (rsp_t.code == 200) then
		rt.syslog("info", mes)
	else
		rt.syslog("notice", mes)
		print(mes)
	end
end

参考ページとの変更点は

  • ログを出さないようにフィルタをreject-nologにする。
  • フィルタ番号は2000から始まって10ずつ増やし最大値は2450にする。
  • 作業ファイルは /scripts/sakoku_filter.txt という名前にする。
  • メールを送信して通知する処理を削除。
  • SDカードにconfigを名前に日付を付けて保存。(毎月の処理で5年でも60個程度なので削除しなくても容量は問題ないかな)

です。

sftpでルータにファイルをアップロード

以下のページを参考にYAMAHAルータ RTX830にsftpの設定を入れました。

ここで問題が発生しました。

WinSCP 6.1.2ではファイルのアップロード、一覧の表示、ファイルの削除は問題ないのですが、ファイルのダウンロードだけができないようです。

WinSCP 4.2.5やRHEL付属sftp,Windows10付属sftpでは問題ないので、最新のWinSCPのバグっぽいです。

とりあえずscriptsというディレクトリを掘ってluaスクリプトをアップロードしました。

RTX830のコンソールで

lua /scripts/sakoku_filter.lua

と実行し問題なく動いたら、毎月1度動くようスケジュールに登録しました!

お勧めのKindle本です!

コメント