海外IPからのサーバーに向けた攻撃を遮断 ipset+iptables

ipset iptables 海外IP ブロック 不正アクセス SSH FTP

99.9%の攻撃は海外IPから・・・

ハッキングが海外IPからというのは当たり前!当たり前体操٩(๑❛ᴗ❛๑)۶

また、日本人ハッカーも海外プロキシ経由などで足を残さないように、アタックするのは常識です。つまり、海外からのシステムへのアクセスを遮断すれば快適な運営が可能になります。実のところ、海外からのアクセスで汚されていたログが本当にすっきりしちゃうわけです。

 

サイバー攻撃の実際を覗いてみよう Norse – IPViking

サイバー攻撃可視化 サイバーセキュリティ

サイバーセキュリティ ハッキング対策すさまじいですね。どこぞの銀英伝みたいな・・・。
サーバーをインターネットに繋げるという事は、世界中のサイバー攻撃の対象体の1つになるという事です、3日以内に必ず何かしらの攻撃を受けます。

 

@see Norse IPViking(クリックで見れます。)

 

 鎖国しよう

その心は、原則的にサーバーシステムの運営に関わるサービスへのアクセスは許さないけど、長崎のApache港(80port)くらいは解放し、外交の窓口を残しといてやるぜ!ってこと٩(๑❛ᴗ❛๑)۶

 

 

※当記事の内容はホスティング業者の管理パネルからのVNCによるログイン、オンプレミスなどSSH以外でのログインが別に確保出来る状態のサーバーに対してのみ行ってください、補償はしかねます。

海外からのアクセスを弾く 神器ipset

 

ipsetのインストール、yumで楽々です。

# yum install ipset

 

 

インストール:
ipset.x86_64 0:6.11-3.el6

 

依存性関連をインストールしました:
libmnl.x86_64 0:1.0.2-3.el6

 

週1回実行するようにスクリプトを作成

 

スクリプトの概要

  • 週1回実行される
  • 日本のIPを取得しホワイトリストフィルターを作る
  • ダウンロードに失敗しているなら指定したアドレスにメール

# cd /etc/cron.weekly

 

# vi jp_ipwhitelist.sh

 

[bash]
#!/bin/bash

# 国別コードリストをダウンロード
if [ -s cidr.txt ]; then
mv cidr.txt cidr.txt.old
fi

wget http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz

#差分チェック
ipdiff=$(diff cidr.txt.old cidr.txt | grep -c “^<“)

# 上記が存在していて、差分の数が200行以上の場合
# (通常考えられない量の変更=ファイルが正常に取得できていないと判断
if [ $ipdiff -gt 200 ]; then
# メールでIPリストが正常に取得できなかった事を管理者にメールする。
mail -s “iplist_check ERROR from hostname” root@hostname
#正常に取得できなかったリストを削除
rm -f cidr.txt
else
# ホワイトリストセットを作成
ipset create -exist WHITELIST hash:net
# ホワイトリストセットに日本のIPアドレスを登録 ※while read ADDRESSで変数【ADDRESS】に代入
sed -n ‘s/^JP\t//p’ cidr.txt | while read ADDRESS; do
ipset add WHITELIST $ADDRESS
done
fi
[/bash]

 

 

実行権限を付与します。

# chmod +x ./jp_ipwhitelist.sh

 

 

1度実行してみます。

# ./jp_ipwhitelist.sh

 

 

ホワイトリスト確認

# ipset list WHITELIST | less

 

[bash]
Name: WHITELIST
Type: hash:net
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 48272
References: 0
Members:
157.1.0.0/16
118.67.64.0/19
192.41.192.0/22
198.73.220.0/24
202.94.176.0/20
202.94.192.0/19
202.131.8.0/21
222.231.128.0/17
103.246.60.0/22
103.26.152.0/22
180.94.40.0/21
203.196.16.0/21
103.47.100.0/22
202.21.145.0/24

(略)

[/bash]

 

きちんと登録されてますねっ!

 

 

先程のホワイトリストを保存
# /etc/init.d/ipset save
ipset: Saving IP sets to /etc/sysconfig/ipset:     [  OK  ]

 

 

/etc/sysconfig/ipsetに保存されています。
見てみましょう。

# cat /etc/sysconfig/ipset

 

[bash]
create WHITELIST hash:net family inet hashsize 1024 maxelem 65536
add WHITELIST 157.1.0.0/16
add WHITELIST 118.67.64.0/19
add WHITELIST 192.41.192.0/22
add WHITELIST 198.73.220.0/24
add WHITELIST 202.94.176.0/20
add WHITELIST 202.94.192.0/19
add WHITELIST 202.131.8.0/21
add WHITELIST 222.231.128.0/17
add WHITELIST 103.246.60.0/22
add WHITELIST 103.26.152.0/22
add WHITELIST 180.94.40.0/21
add WHITELIST 203.196.16.0/2

(略)
[/bash]

 

いい感じ。

 

 

ipset自動起動設定

 

# chkconfig ipset on

 

 

# chkconfig –list ipset
ipset  0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

 

iptablesの設定

 

 

SSH+FTP+MySQLは海外からのアクセスを遮断

 

# vi /etc/sysconfig/iptables

 

[bash]

※一部抜粋 下記を参考に各環境で設定して下さい。

# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
#-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT

# New SSH(SSHport変更用)
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11122 -j ACCEPT

# New FTP(FTPport変更用)
#-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11121 -j ACCEPT
# FTP Passive
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50000:50030 -j ACCEPT

↓変更

# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 20 -m set –match-set WHITELIST src -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -m set –match-set WHITELIST src -j ACCEPT
#-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -m set –match-set WHITELIST src -j ACCEPT

# New SSH(SSHport変更用)
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11122 -m set –match-set WHITELIST src -j ACCEPT

# New FTP(FTPport変更用)
#-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11121 -j ACCEPT
# FTP Passive
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50000:50030 -m set –match-set WHITELIST src -j ACCEPT
[/bash]

 

再起動します。

# service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中filter       [  OK  ]
iptables: ファイアウォールルールを消去中:            [  OK  ]
iptables: モジュールを取り外し中:                       [  OK  ]
iptables: ファイアウォールルールを適用中:             [  OK  ]

 

これでSSH/FTP/MySQLの封鎖ができました。

 

[bash]
∩  ∩
| | | |
| |__| |
/ 一 ー \   人人人人人人人人人人人
/ (・) (・)|<IMAPとか他は鎖国しなくていいの?>
|    ○    | YYYYYYYYYYYYYYYY
\__  ─  __ノ

∩_∩
/ \ /\
| ^)=(^)|  人人人人人人人人人人
|  ●_●  |   < サーバー管理者なら自分で設計しろって事だよ >
/ //  ///ヽ  <言わせんな、恥ずかしい>
| 〃 —— ヾ|  YYYYYYYYYYYYYY
\__二__ノ
[/bash]

 

確認しよう

 

# iptables -L

 

 

[bash]
Chain RH-Firewall-1-INPUT (1 references)
target     prot opt source               destination
ACCEPT     icmp —  anywhere             anywhere            icmp any
ACCEPT     all  —  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpt:http
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpt:ftp-data match-set WHITELIST src
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpt:ftp match-set WHITELIST src
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpt:mysql match-set WHITELIST src
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpt:11122 match-set WHITELIST src
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpts:50000:50030 match-set WHITELIST src
ACCEPT     tcp  —  anywhere             anywhere            state NEW tcp dpt:ddi-tcp-1
[/bash]

 

ホワイトリストのフィルターが設定されていることがわかります。

 

cronが生きているか確認

cronが生きているか確認
# /etc/init.d/crond status
crond (pid  1399) を実行中…

 

 

# chkconfig crond –list
crond    0:off  1:off  2:on   3:on   4:on   5:on   6:off

 

 

筑波大学のVPN Gateを使い海外からアクセスしてみる。

vpngate

過去の記事:筑波大学学術研究プロジェクト VPN Gate

VPN Gate の概要

VPN Gate 学術実験プロジェクトは、日本に所在する筑波大学における学術的な研究を目的として実施されているオンラインサービスです。本研究は、グローバルな分散型公開 VPN 中継サーバーに関する知見を得ることを目的としています。

VPN Gate を使うと・・・
VPN Gate に VPN 接続すると、以下の 3 つの利点を得ることができます。
政府の検閲用ファイアウォールを回避し、海外の YouTube などの Web サイトを自由に閲覧できます。
IP アドレス が VPN サーバーのものに書き換わります。インターネットで安全に情報発信をしたり、Web コンテンツを閲覧したりできます。
暗号化により公衆無線 LAN を安全に利用できます。
VPN Gate は過去の共有型 VPN サービスと比べて、政府の検閲用ファイアウォールによって遮断されにくいという特徴があります。しかも、無償で利用可能です。ユーザー登録は不要です。
@see 筑波大学VPN Gate

 

 

今回はドイツのVPN中継サーバーを選択

ドイツから

ドイツのIPを選びます。

 

VPN Gate 海外IP 遮断

ドイツに繋がりました。

 

 

SSHにアクセス

 

SSH 海外からの攻撃を遮断

 

防御成功(ㆁᴗㆁ✿)ふふふふふ~

 

 

FTPにアクセス

 

FTP 不正アクセス防御

防御成功です☆

 

お疲れ様でしたー!

 

 

@see 稲葉サーバーデザイン
@see oxynotes.com

優 ( エンジニア )

この記事を書いた人:優 ( エンジニア )

システムガーディアン爆弾処理班。アクセス負荷対策やNginxへの移行案件が多いこの頃。IBM SoftLayerやAWSなどクラウド案件も多くなってきました。

この記事に関してのお問い合わせ
御連絡・ご返信は原則2営業日以内を予定しております。
お急ぎの場合は、お手数ですが下記電話でもご対応をしております。

システムガーディアン株式会社
受付時間:平日9:00~18:00
受付担当:坪郷(つぼごう)・加藤
電話:03-6758-9166