0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[RTX1220]Ubuntuでルーター用のフィルタールールを作る

Last updated at Posted at 2022-09-13

はじめに

 YAMAHA RTX1220(RTXシリーズならたぶん他も同じ)向けにコピペで実行できる絶縁フィルタをUbuntu上で作成する。IPアドレスが変更になったら更新が必要。国コードでフィルターする機能、つけて欲しいなぁ。

 大陸トリオ(CN、KR、KP)をブロックするだけでiptablesDENY_COUNTRYのログ肥大化が抑えられている(毎日数十万行あったものが数千~数万行になる)。ipアドレスで実際の攻撃元の国籍を判断することは難しいが、大陸トリオに設置されているサーバーは日本の攻撃元を占めている割合が多いのだろう。

 RUも同様に記載できれば良いのだが、RUは一国でルールが120を超えており同一のインターフェースに設定できない。市販されているルーターはフィルタルール設定数に上限があり、仕様等に上限数の明記は無いことが多い。困ったもんだ。

RTXルーターのIN, OUT

 LAN2にONUを接続、LAN3にサーバーを接続しているとする。
 インターネットからこちらのLAN3ポートに接続されたサーバーのウェブサイトを見るときの流れは以下。

 インターネット(相手のIPアドレス:80 or 443) → RTX1220 PP(LAN2) IN
                                                     ↓       
                こちらのサーバー  ←  RTX1220 LAN3 OUT

 こちらのサーバーに届かないように相手パケットを遮断したいときは、PP INにルールを記載するか、LAN3 OUTにルールを記載する。注意点はLAN2のINに記載しても機能しない。サーバーから見ればどちら(PP IN 又はLAN3 OUT)に記載されていても相手アドレスはブロックされる(サーバーには届かない)が、当該アドレスがルーターそのものにアクセスできるかどうかが違ってくる。

前提要件

 過去の記事で作成したCIDRの一覧を/root/COUNTRY_CODEにダウンロードしているものとする。

スクリプトを作成する

vi /root/COUNTRY_CODE/RTX_makefilter.sh
/root/COUNTRY_CODE/RTX_makefilter.sh
#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin

###########################################################################################
# cidr.txt のデータを元にRTX用のフィルタルールを作成します。
#   1行あたりの文字数制限があるっぽいのでCIDR 70コ でルール番号更新。
#   インターフェースあたり適応できるルール数に上限がある。100程度?
###########################################################################################

# フィルタ開始番号
FILTER_NUM=500

IP_LIST="/root/COUNTRY_CODE/cidr.txt"
MYFILTER="/root/COUNTRY_CODE/rtxfilter"
MyCNT=1
MYSECURE=()

rm -f $MYFILTER

REJECT_COUNTRY_MAKE(){
for addr in `cat $IP_LIST |grep ^$1|awk '{print $2}'`
do
    if [[ $MyCNT -eq 1 ]]; then
        echo -n "ip filter $FILTER_NUM reject-nolog $addr" >> $MYFILTER
        MYSECURE+=($FILTER_NUM)
    else
        echo -n ",$addr" >> $MYFILTER
    fi

    MyCNT=$((MyCNT+1))

    if [[ $MyCNT -gt 70 ]]; then
        echo " * * * *" >> $MYFILTER
        FILTER_NUM=$((FILTER_NUM+1))
        MyCNT=1
    fi
done

if [[ $MyCNT -eq 1 ]]; then
    echo " " >> $MYFILTER
else
    echo -e " * * * *\n" >> $MYFILTER
fi

FILTER_NUM=$((FILTER_NUM+1))
MyCNT=1
}

# 拒否する国コードをここに記載。
# せいぜい3つくらい。なので定番の大陸三国。
REJECT_COUNTRY_MAKE CN
REJECT_COUNTRY_MAKE KR
REJECT_COUNTRY_MAKE KP

echo "" >> $MYFILTER
echo "" >> $MYFILTER
echo "# Type command following to apply them." >> $MYFILTER
echo "" >> $MYFILTER
echo "pp select 1" >> $MYFILTER
echo "" >> $MYFILTER
echo ip pp secure filter in ${MYSECURE[@]} >> $MYFILTER

 Windows で読めるテキストファイルにするにはShift-jisに変換する:-s or --sjis

 変換後に/home/sambaなどに移動して取り出す。windows機のために拡張子をつけて出力する。

nkf -s --overwrite /root/COUNTRY_CODE/rtxfilter
mv /root/COUNTRY_CODE/rtxfilter /home/samba/rtxfilter.txt

 既存のフィルタルールをテキストに追記してからRTXのコンソールコマンドを実行する。

作成したフィルタルールを削除する

 更新するときにそのまま上書きしても良いが、古いルールが残って問題が起こる可能性があるので、一度一括で削除してから新しいルールを適応するようにしている。

 一つずつno ip filter xxxxと入力しても良いが、コピペでズバッとやりたいのでこれもスクリプトで。

vi /root/COUNTRY_CODE/RTX_delfilter.sh
/root/COUNTRY_CODE/RTX_delfilter.sh
#!/usr/bin/bash
LANG=C

# Number starts from...
START_NUM=500

# Number ends at...
END_NUM=593

# Export file
MYFILE="/root/COUNTRY_CODE/rtxdelfilter"

rm -f $MYFILE

## Cっぽいアレで書く場合。ENDの値「未満」に注意。
for ((i=$START_NUM; i < $END_NUM; i++)); do
    echo no ip filter $i >> $MYFILE
done

## 数値を直接指定する場合。こちらは記載した数値まで繰り返す。
# for i in {500..592} ; do
#     echo no ip filter ${i} >> $MYFILE
# done

(蛇足)ルーターセキュリティ

 リモートワークの需要等でVPN機能のあるルーターが人気らしい。インターネット側にVPNのポートを開けているとガンガン認証チャレンジしてくる。大陸三国拒否はこれに対しても効果あり。RTX実機には指定回数に達したら該当IPをしばらく規制するような機能は無いので、超長い事前共有キー、IDパスワードを組み合わせて対処する。

 可能ならUDPポートの50045001701及びESPのパケットにCIDRで制限をかけてPassする。

RTXコマンド
ip filter xxxxx pass {cidr} 192.168.1.1 udp * 500
ip filter xxxxx pass {cidr} 192.168.1.1 esp * *
ip filter xxxxx pass {cidr} 192.168.1.1 udp * 4500
ip filter xxxxx pass {cidr} 192.168.1.1 udp * 1701
ip filter 99999 reject-nolog * * * * *

 各ISPのIPアドレス範囲を調べて全て記載する。IPアドレスの範囲を公開してくれているISPもある。

 ルーターのコンソールにはネット側からtelnetやsshで直接接続できる設定にはせずローカルアドレスからのみのアクセス可として、一度vpnセッションを張ってから内部アクセスとして遠隔操作する。また、ルーター機能のDNSやWEB GUIはインターネット側に非公開とする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?