セキュリティ対策 - ポート遮断 portsentry - ソースから

クラウディア 
1. 概要
2. ダウンロード
3. 編集
4. 構成ファイルの編集
5. 起動
6. 試験
7. メンテナンス

1. 概要

 「portsentry」が、「ports」からなくなったので、別のものを試してみようと「snort」を使ってみましたが。  警告が出るのみで、遮断できるわけでもなく。  やたらログが多く、うまかログをローテーションさせきれなくて、ディスク容量を圧迫するようなことになってしまいました。  で、また、「portsentry」に戻ってみるのです。  「ports」からは、なくなりましたが、元々のソースは、残っているので、うまく、「make」できれば使えるのではないかと・・・。

2. ダウンロード

 「github」のサイトは
GitHub - Perdjesk/portsentry: Portsentry (part of Sentry Tools)
 なのですが、そこのダウンロードをたどると
Sentry Tools download | SourceForge.net
 になります。  ここから

portsentry-1.2.tar.gz
 をダウンロードします。

3. 編集

 以下、「root」ユーザ権限で。  ダウンロードしたファイルは

/tmp
 に配置します。  解凍。

cd /tmp
tar -xvzf portsentry-1.2.tar.gz
cd portsentry_beta
 いくつかファイルを編集します。

vi portsentry_config.h

#define CONFIG_FILE "/usr/local/psionic/portsentry/portsentry.conf"
 を下記へ変更します。

#define CONFIG_FILE "/usr/local/etc/portsentry/portsentry.conf"

vi portsentry.conf

# Hosts to ignore
IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore"
# Hosts that have been denied (running history)
HISTORY_FILE="/usr/local/psionic/portsentry/portsentry.history"
# Hosts that have been denied this session only (temporary until next restart)
BLOCKED_FILE="/usr/local/psionic/portsentry/portsentry.blocked"
 を下記へ。

# Hosts to ignore
IGNORE_FILE="/usr/local/etc/portsentry/portsentry.ignore"
# Hosts that have been denied (running history)
HISTORY_FILE="/usr/local/etc/portsentry/portsentry.history"
# Hosts that have been denied this session only (temporary until next restart)
BLOCKED_FILE="/usr/local/etc/portsentry/portsentry.blocked"

vi portsentry.c

  printf ("Copyright 1997-2003 Craig H. Rowland <craigrowland at users dot
sourceforget dot net>\n");
 を下記へ。

  printf ("Copyright 1997-2003 Craig H. Rowland <craigrowland at users dot sourceforget dot net>\n");

vi Makefile

INSTALLDIR = /usr/local/psionic
 を下記へ。

INSTALLDIR = /usr/local/etc
 「make」して、インストール。

make freebsd
make install
 実行モジュールがコピーされなかったので

cp portsentry /usr/local/bin/.

4. 構成ファイルの編集

 ここからは、前ページと同じになりますので、端的に。

vi /usr/local/etc/portsentry/portsentry.conf

#KILL_ROUTE="/bin/echo 'block in log on external_interface from $TARGET$/32 to any' | /sbin/ipf -f -"
 の先頭の「#」を削除して生かします。  これで、攻撃してきた「IP」を遮断します。

vi /usr/local/etc/portsentry/portsentry.ignore

127.0.0.1/32
0.0.0.0
 の下に、遮断しないアドレス(自分の「LAN」アドレス等)を記述します。

5. 起動

 起動スクリプトを作成します。

vi /usr/local/etc/rc.d/portsentry
 下記を記述します。

#!/bin/sh
#
# PROVIDE: portsentry
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown

portsentry_enable=${portsentry_enable:=NO}

. /etc/rc.subr

name=portsentry
rcvar=portsentry_enable

load_rc_config $name

start_cmd=portsentry_start
stop_cmd=portsentry_stop
pidfile=/var/run/portsentry.pid
procname=/usr/local/bin/portsentry
PORTSENTRY="/usr/local/bin/portsentry"

portsentry_start()
{
    ${PORTSENTRY} -tcp
    ${PORTSENTRY} -udp

    pgrep ${name} > $pidfile
}

portsentry_stop()
{
    killall `basename ${PORTSENTRY}`
}

run_rc_command "$1"
 本当は、もう少し、うまい書き方ができそうなのですが・・・。  起動スクリプトを実行可能にします。

chmod +x /usr/local/etc/rc.d/portsentry
sysrc portsentry_enable=YES
 起動。

service portsentry start

6. 試験

 「portsentry」を実行している状態で、ポートスキャンをかけると。  「/var/log/message」に

Aug 23 16:40:36 ns portsentry[3070]: attackalert: ERROR: cannot open ignore file. Blocking host anyway.
Aug 23 16:40:36 ns portsentry[3070]: attackalert: Connect from host: SHOW202003/192.168.100.100 to TCP port: 1
Aug 23 16:40:36 ns portsentry[3070]: attackalert: Host 192.168.100.100 has been blocked via wrappers with string: "ALL: 192.168.100.100"
Aug 23 16:40:36 ns portsentry[3070]: attackalert: Host 192.168.100.100 has been blocked via dropped route using command: "/bin/echo 'block in log on external_interface from 192.168.100.100/32 to any' | /sbin/ipf -f -"
Aug 23 16:40:38 ns portsentry[3070]: attackalert: ERROR: cannot open ignore file. Blocking host anyway.
Aug 23 16:40:38 ns portsentry[3070]: attackalert: Connect from host: SHOW202003/192.168.100.100 to TCP port: 11
Aug 23 16:40:38 ns portsentry[3070]: attackalert: Host: 192.168.100.100 is already blocked. Ignoring
Aug 23 16:40:39 ns portsentry[3070]: attackalert: ERROR: cannot open ignore file. Blocking host anyway.
Aug 23 16:40:39 ns portsentry[3070]: attackalert: Connect from host: SHOW202003/192.168.100.100 to TCP port: 15
Aug 23 16:40:39 ns portsentry[3070]: attackalert: Host: 192.168.100.100 is already blocked. Ignoring
Aug 23 16:40:41 ns sshd[3083]: error: Fssh_kex_exchange_identification: Connection closed by remote host
Aug 23 16:40:52 ns portsentry[3070]: attackalert: ERROR: cannot open ignore file. Blocking host anyway.
Aug 23 16:40:52 ns portsentry[3070]: attackalert: Connect from host: SHOW202003/192.168.100.100 to TCP port: 79
Aug 23 16:40:52 ns portsentry[3070]: attackalert: Host: 192.168.100.100 is already blocked. Ignoring
Aug 23 16:40:58 ns portsentry[3070]: attackalert: ERROR: cannot open ignore file. Blocking host anyway.
Aug 23 16:40:58 ns portsentry[3070]: attackalert: Connect from host: SHOW202003/192.168.100.100 to TCP port: 111
Aug 23 16:40:58 ns portsentry[3070]: attackalert: Host: 192.168.100.100 is already blocked. Ignoring
Aug 23 16:41:00 ns portsentry[3070]: attackalert: ERROR: cannot open ignore file. Blocking host anyway.
Aug 23 16:41:00 ns portsentry[3070]: attackalert: Connect from host: SHOW202003/192.168.100.100 to TCP port: 119
Aug 23 16:41:00 ns portsentry[3070]: attackalert: Host: 192.168.100.100 is already blocked. Ignoring
 てな感じでログが出力されます。

/usr/local/etc/portsentry/portsentry.ignore
 を編集して、ポートスキャンをかけているアドレスを遮断しないように設定して、「portsentry」を再起動します。  すると、ログが出てこなくなったのでうまく動作しているようです。

7. メンテナンス

 「portsentry」は、アタックを受けたとみなしたアドレスを

/etc/hosts.deny
 へ記録します。  解除する場合は、上記のファイルも編集します。  「/etc/hosts.allow」「/etc/hosts.deny」によってセキュリティ制限をかけている場合は、注意が必要です。  逆に、「FreeBSD」のデフォルトで

/etc/hosts.allow
 の有効行の先頭に

# Start by allowing everything (this prevents the rest of the file
# from working, so remove it when you need protection).
# The rules here work on a "First match wins" basis.
ALL : ALL : allow
 の記述があれば、「/etc/hosts.deny」に記録されてもなんの効力もありません。  「/etc/hosts.deny」によってやたら制限がかかったり、ちっともかからないとしても、中身のチェックはときどきおこないましょう。  やたら、行数が増えていたりしますし、同じアドレスが、複数回記録されていたりしますので、ソートしたり、重複行を削除したりすることが必要です。
ハイスピードプランツインバード・ストアPoint anytime健康サポート特集