firewalldで海外からの不正アクセス・ログインを弾き、サーバーを守る方法

firewalldで海外不正アクセス対策

ある日、本番サーバーにたくさんの不正ログインを試みた形跡がみられました!その時の記事がこちら

あわせて読みたい
“There were 8025 failed login attempts~”への対処法 【"There were 1289 failed login attempts since the last successful login."】 本番サーバーにログインしようとしたら、普段見ない”failed login”というアラートが出...

怖い!どうしよう!IPを調べたところ、全て海外からのアクセスだったので、ひとまず海外からのログインリクエストは全て遮断する方法を探しました。たくさん調べた中で、こちらの記事がとても参考になりました。よし、firewalldを使って対策しよう!と決めました。実際にどのファイルをどう修正したのか、記録します。

あわせて読みたい
firewalldで国内IPのみ許可 centos7から標準になったfirewalldで国内IPのみを許可する(海外のIPを弾く)ための設定方法について解説します。
目次

firewalldでの海外不正アクセス対策の手順

全体像のイメージは以下の通り。国内からのリクエストの場合と、海外からのリクエストの場合で検証内容を変更し、接続可能・拒否判定を行います。

firewalld
firewalld

対策対象サーバーにログイン

まずはサーバーにログインしてください。普通にいつも通り。

現在の設定状況を確認する

以下コマンドでfirewalldをスタート。

# systemctl start firewalld

その後、現在の設定一覧を確認します。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

特に何も制限を設けていないことがわかりました。

許可する接続を設定

まずはhttp接続を許可する設定をします。

# firewall-cmd --permanent --zone=public --add-service=http
Warning: ALREADY_ENABLED: http
success

すでに許可されていたようですが、完了。

続いて、httpsも許可しましょう。

# firewall-cmd --permanent --zone=public --add-service=https
success

アクセスを拒否するIPの設定

では続いて、海外からのリクエストを拒否していきます。まずはフォルダ作成から。

# mkdir /root/iptables

続いて、上で作った階層にシェルを作り、中身を用意していきます。

# vi /root/iptables/jpip_setup.sh

シェルの中身はこんな感じ。APNICのソースを使って、日本国内のIPかどうかを判定できるようにします。そしてその中身はjpipファイルの中に。

#!/bin/bash
COUNTRYLIST='JP'
curl -s -o /root/iptables/delegated-apnic-latest http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
:> /root/iptables/jpip
for country in $COUNTRYLIST
do
        for ip in `cat delegated-apnic-latest | grep "apnic|$country|ipv4|"`
        do
                COUNTRY=`echo $ip | awk -F"|" '{ print $2 }'`
                IPADDR=`echo $ip | awk -F"|" '{ print $4 }'`
                TMPCIDR=`echo $ip | awk -F"|" '{ print $5 }'`

                FLTCIDR=32
                while [ $TMPCIDR -ne 1 ];
                do
                        TMPCIDR=$((TMPCIDR/2))
                        FLTCIDR=$((FLTCIDR-1))
                done
                echo "$IPADDR/$FLTCIDR" >> /root/iptables/jpip
        done
done

完了したら、ファイルへのアクセス権限を変更しましょう。

# chmod 700 /root/iptables/jpip_setup.sh

シェルを実行します。

# /root/iptables/jpip_setup.sh

firewalldの設定

続いて、firewalldに設定を入れていきます。デフォルトで「public」という設定があるのですが、今回は「domestic」という名前の日本国内ゾーン設定を新規で作成します。日本国内からのリクエストはfirewallに到達した時、「domestic」ゾーン設定の通って、許可・拒否判定をしますが、海外からのリクエストはfirewallに到達した時、「public」ゾーンの設定を通って許可・拒否判定が行われます。

日本国内用のdomesticゾーン設定を作成

コマンドはこんな感じ。新規のゾーン設定を作成し、先ほど作成したjpipファイルを許可IPとして設定します。

# firewall-cmd --permanent --new-zone=domestic
success
# firewall-cmd --permanent --new-ipset=domestic --type=hash:net
success
# firewall-cmd --permanent --ipset=domestic --add-entries-from-file=/root/iptables/jpip
success

では、今の段階で設定を見てみましょう。

# firewall-cmd --permanent --info-ipset=domestic
domestic
  type: hash:net
  options: 
  entries: 

「domestic」という名前のゾーン設定ができました!詳細を追加していきましょう。

# firewall-cmd --permanent --zone=domestic --add-source=ipset:domestic
success
# firewall-cmd --permanent --zone=domestic --add-service=http
success
# firewall-cmd --permanent --zone=domestic --add-service=https
success
# firewall-cmd --reload
success
#

ここまででdomesticゾーン設定が完成。日本国内からのリクエストはここを通ることになります。

public設定を変更

海外からのリクエストが通るpublic設定を変更します。接続拒否の設定をします。

# firewall-cmd --permanent --zone=public --remove-service=http
success
# firewall-cmd --permanent --zone=public --remove-service=https
success

これで完成です!海外からのhttpリクエスト、httpsリクエストを全て拒否する設定をしました。

firewalldをリロード

設定変更が完了したので、firewalldをリロードします。

# firewall-cmd --reload
success
#

これで、海外からのリクエスト拒否が完成しました!

プログラミング関連の記事はこちら

社会人マナブログ
プログラミング | 社会人マナブログ 未経験からエンジニア転職したアラサー女の筆者によるプログラミング関連の学びをまとめています。Java、MySQL、Wordpressが多いです。
firewalldで海外不正アクセス対策

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ピープル大学(UoPeople)でコンピューターサイエンスを学んでいます。趣味はプログラミング。

コメント

コメントする

目次