事前に情報を得たので、やっぱりか〜、という印象しかありませんが、httpsd.confにて163data.com.cnをDenyさせても、その後もそこからのアクセスが続いています。
というわけで、やはりIPアドレス(サブネットマスク)によるフィルタリングで対応することにしました。
IPアドレスではじくことにしたので、それならばhttpsd.confではなくiptablesで該当IPアドレス(サブネットマスク)からのアクセスをDROPさせるようにしてみようと思います。
さて、直近のアクセスログから、さしあたって大量にアクセスを繰り返しているのは
118.170.174.59.broad.wh.hb.dynamic.163data.com.cn
4.35.48.58.broad.wh.hb.dynamic.163data.com.cn
の二つ(正確には、*.*.174.59と*.*.48.58)。
以前調べた情報から、この頭の数字(オクテット)を反対に並べることでこのノードの所属するIPアドレスとなることはわかっています。つまり上ならば「59.174.170.118」がIPアドレスであり、下ならば「58.48.35.4」がそのIPアドレスとなる、というわけですね。
問題は、通常IPアドレスは動的に割り当てられるでしょうから、このIPアドレスを固定でアクセス禁止にしてもあまり実効性がない(であろう)ということ。
このIPアドレスを割り振っているネットワークそのものからのアクセス(そのドメインが163data.com.cnなわけです)をはじくようにしなければなりません。
そこで(とりあえずは)この二つのノードが所属するネットワークアドレスを検索しましょう。
それぞれwhoisコマンドで確認すると、上のinetnumは
59.174.0.0 – 59.175.255.255
で、下のinetnumは
58.48.0.0 – 58.55.255.255
となりました。
これが確認できたら、今度はこのネットワークのアドレス(つまりこのプロバイダが持っているネットワークアドレスの範囲)を、IPアドレス/ネットマスクで書き直します。
59.174.0.0 – 59.175.255.255
ということは、ビット列で書けば
00111011.10101110.00000000.00000000
00111011.10101111.11111111.11111111
までの範囲ということ。そして頭のビットが揃っているところまでがネットワークアドレスであり、それ以降はサブネットマスクとなりますから、この場合は
00111011.1010111x.xxxxxxxx.xxxxxxxxの部分がネットワークアドレスになります。
こいつを10進数に直すと、
59.174.0.0/15
となるわけですね。
念のためコチラで確認してみても、同じ値を取り出すことができましたから、方法は間違っていないと思います(確認したサイトの大本はコチラです)。
同じ手順で下を書き換えると、その範囲はビット列表記で
00111010.00110000.00000000.00000000
00111010.00110111.11111111.11111111
なので、共通部分は00111010.00110xxx.xxxxxxxx.xxxxxxxxとなり、これを10進数表記に戻すと
58.48.0.0/13
となるわけですね(これも念のため確認してみました)。
さしあたってこの二つをアクセス禁止対象にして、iptablesにその設定をかき込みます。
ただ、よくよくiptables設定用のスクリプトを思い返せば、INPUTのPOLICYは基本全てDROPで、必要に応じて(たとえばWEBならtcpの80番ポートのみ全てのIPアドレスから)アクセスできるようにしているのでした。
従って、ここで取り出したネットワークアドレスに対しても、TCP80番ポートへのアクセスだけを禁止すればよいはず。
そこで、この条件に合致するようにiptables用のスクリプトにアクセス拒否リストのセクションを作り、記入します。
#####
# ACCESS DENY(web)
#####
iptables -A INPUT -p tcp -s 59.174.0.0/15 -d $myhost –dport 80 -j DROP
iptables -A INPUT -p tcp -s 58.48.0.0/13 -d $myhost –dport 80 -j DROP
なおここで$myhostは変数としてきちんと定義してあります。
見方は言わずもがなですが、-sで指定したアドレスからの、私のサーバへのTCP80番ポートへのアクセス(つまりWEBサーバへのアクセス)はそのパケットをDROP(破棄)する、という命令を追加する、ということですね。
記入したらスクリプトを実行し、iptablesを確認します。
# iptables -L
してみて、その中に、
DROP tcp — 0.0.174.59.broad.wh.hb.dynamic.163data.com.cn/15 boota.mydns.jp tcp dpt:https
DROP tcp — 0.0.48.58.broad.wh.hb.dynamic.163data.com.cn/13 boota.mydns.jp tcp dpt:https
があればOKのはず(ipアドレスはドメイン名に切り替わって表示されました)。
最後にiptablesを保存して(コレをしないとサーバ再起動時に失われてしまいます)終了。
引き続き様子を見ることにしましょう!
One thought to “163data.com.cn続き(やっぱりダメでした)”