No. モジュール名 備 考 1 swatch Swatch本体 2 perl-Date-Calc Swatchが直接リンクしているモジュール。
SuSEでは3項はperlのベースモジュールでインストールされてるので、別途インストールは不要。3 perl-Time-HiRes 4 perl-TimeDate 5 perl-File-Tail 6 perl-Bit-Vector 2〜5項の関連モジュールである。7項は実際には使用されないが、RPMの関係でCentOSを含むRedHat系だけで要求されSuSEでは要求されない。8項は実行時に必要であり、RedHat系はデフォルトで入っているので問題ないが、CentOSやSuSEはインストールされておらずSwatchを動かした際にエラーが出るので要注意。 7 perl-Mail-Sendmail 8 perl-DateManip
# rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt |
[dag] |
[dag] |
# yum install swatch Gathering header information file(s) from server(s) Server: Fedora Core 2 - i386 - Base Server: Dag RPM Repository for Fedora Core Server: Fedora Core 2 - i386 - Released Updates Finding updated packages Downloading needed headers Resolving dependencies ..Dependencies resolved I will do the following: [install: swatch 3.1-1.1.fc2.dag.noarch] I will install/upgrade these to satisfy the dependencies: [deps: perl-Mail-Sendmail 0.79-1.1.fc2.dag.i386] [deps: perl-Bit-Vector 6.3-2.i386] [deps: perl-Time-HiRes 1.55-2.i386] [deps: perl-File-Tail 0.99.1-1.1.fc2.rf.noarch] [deps: perl-TimeDate 1:1.16-1.noarch] [deps: perl-Date-Calc 5.3-8.i386] Is this ok [y/N]: y[Enter] Downloading Packages Getting perl-Mail-Sendmail-0.79-1.1.fc2.dag.i386.rpm perl-Mail-Sendmail-0.79-1 100% |=========================| 24 kB 00:00 Getting perl-Bit-Vector-6.3-2.i386.rpm perl-Bit-Vector-6.3-2.i38 100% |=========================| 130 kB 00:00 Getting perl-Time-HiRes-1.55-2.i386.rpm perl-Time-HiRes-1.55-2.i3 100% |=========================| 22 kB 00:00 Getting perl-File-Tail-0.99.1-1.1.fc2.rf.noarch.rpm perl-File-Tail-0.99.1-1.1 100% |=========================| 21 kB 00:00 Getting swatch-3.1-1.1.fc2.dag.noarch.rpm swatch-3.1-1.1.fc2.dag.no 100% |=========================| 45 kB 00:00 Getting perl-TimeDate-1.16-1.noarch.rpm perl-TimeDate-1.16-1.noar 100% |=========================| 32 kB 00:00 Getting perl-Date-Calc-5.3-8.i386.rpm perl-Date-Calc-5.3-8.i386 100% |=========================| 210 kB 00:00 Running test transaction: Test transaction complete, Success! perl-Time-HiRes 100 % done 1/7 perl-File-Tail 100 % done 2/7 perl-TimeDate 100 % done 3/7 perl-Mail-Sendmail 100 % done 4/7 perl-Date-Calc 100 % done 5/7 perl-Bit-Vector 100 % done 6/7 swatch 100 % done 7/7 Installed: swatch 3.1-1.1.fc2.dag.noarch Dep Installed: perl-Mail-Sendmail 0.79-1.1.fc2.dag.i386 perl-Bit-Vector 6.3-2.i386 perl-Time-HiRes 1.55-2.i386 perl-File-Tail 0.99.1-1.1.fc2.rf.noarch perl-TimeDate 1:1.16-1.noarch perl-Date-Calc 5.3-8.i386 Transaction(s) Complete |
# cd /usr/src/redhat/SOURCES
# wget http://dag.wieers.com/packages/perl-File-Tail/perl-File-Tail-0.99.1-1.rf.src.rpm
# rpmbuild --rebuild perl-File-Tail-0.99.1-1.rf.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/perl-File-Tail-0.99.1-1.rf.noarch.rpm
# wget http://dag.wieers.com/packages/perl-Mail-Sendmail/perl-Mail-Sendmail-0.79-1.dag.src.rpm
# rpmbuild --rebuild perl-Mail-Sendmail-0.79-1.dag.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/perl-Mail-Sendmail-0.79-1.dag.noarch.rpm
# wget http://dag.wieers.com/packages/perl-TimeDate/perl-TimeDate-1.16-1.rf.src.rpm
# rpmbuild --rebuild perl-TimeDate-1.16-1.rf.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/perl-TimeDate-1.16-1.rf.noarch.rpm
# wget http://dag.wieers.com/packages/swatch/swatch-3.1-1.dag.src.rpm
# rpmbuild --rebuild swatch-3.1-1.dag.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/swatch-3.1-1.dag.noarch.rpm
[SeSE9.0の場合] SuSE9.2の場合は下記の緑字のところを9.2とすること。
# wget http://www.aconus.com/~oyaji/ftp/download_f.cgi?name=suse9.0/swatch/swatch-3.1.1-1.i586.rpm
# rpm -Uvh swatch-3.1.1-1.i586.rpm
watchfor /(パターンマッチさせる正規表現文字列)/
アクション1
アクション2
:
アクションx
アクション 概 要 echo [modes] メッセージを画面に表示する。modesでは、画面表示の色等が指定可。コンソール表示だけでなく、Swatch起動時に検出ログを吐き出すファイルを指定しておくと、echoが指定されているパターン検出時に検出したログを吐き出してくれるので、後でこれをみるだけでまとめてチェックができる。
[modes]
「表示系」
normal, bold, underscore, blink, inverse
「色指定」
black, red, green, yellow, blue, magenta, cyan, white, black_h, red_h, green_h, yellow_h, blue_h, magenta_h, cyan_h, white_hbell [N] beep音をN回鳴らす。デフォルトは1回。自宅サーバでは突然鳴るのと、アタックを受けると鳴り通しになるので、家人がビックリするだけなのでやめたほうが無難。 exec command コマンドを実行。$Nでコマンドにパターンマッチで指定した文字列のN番目の要素を引数として渡すことができる。$0または$*の場合はパターンマッチで指定した文字列の全ての要素が渡される。(perlスクリプトしか確認していないが、何故か一時スクリプトのパスが飛んできて$0/$*は使えなかった。) mail [addresses=address:address:...][,subject=your_text_here] アドレスで指定した宛先にメール通知する。「:」で区切れば複数宛先に通知可。デフォルトはSwatchが走行しているユーザ。subjectで件名を変更可。デフォルトは「Message from Swatch」。 continue Swatchはパターンマッチすると指定アクションをとって以降の検索を終了するが、continue指定されていると一致しても処理を継続する。
# /usr/bin/swatch -c /etc/swatch/swatchrc -t /var/log/messages
*** swatch version 3.1 (pid:4811) started at 2005年 5月 6日 金曜日 23:32:22 JST
May 6 23:32:37 server proftpd[4815]: server.aconus.com (192.168.1.xx[192.168.1.xx]) - PAM(oyaji): Authentication failure.
[Ctrl]+[c]
Caught a SIGINT -- sending a TERM signal to 4812
CHECK_LOG="/var/log/messages" SWATCH_CONF="/etc/swatch/swatchrc" |
# chmod 755 /etc/init.d/swatch # chkconfig swatch on # chkconfig --list swatch swatch 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
# mkdir /var/run/swatch # chmod 700 /var/run/swatch # touch /var/log/swatch # chmod 640 /var/log/swatch |
# /etc/init.d/swatch start # /etc/init.d/swatch stop |
/\[(\d+\.\d+\.\d+\.\d+)\].*Authentication failure/ |
watchfor /\{(\d+\.\d+\.\d+\.\d+)\].*Authentication failure/ echo mail=oyaji\@mail.aconus.com,subject="FTP Login failure" exec "/usr/local/bin/hack/hacker.cgi $1" |
パラメータ | 概 要 |
$dir = '/usr/local/bin/hack/' | スクリプトを置いたディレクトリ。この配下に不正アクセスIPアドレスのログ(IPアドレス.cnt)が置かれる。 |
$limit = 2; | 同一アドレスからのエラー許容回数。 |
$iptables="/usr/sbin/iptables" | iptablesのパス。デストリで異なる。 |
$chain="HACKER" | iptablesでダイナミックに制御するチェーンの名称。 |
#!/bin/sh ### IPアドレス、ネットワークアドレスの定義 ### # サーバ機のアドレス # MYHOST='192.168.1.100' # 家庭内のアドレス(192.168.0.0/24と1.0/24を合わせて指定)# HOME='192.168.0.0/23' # NTPサーバのアドレス # # NTP1: xxx.xxx.xxx.xxx -- プロバイダ # NTP2: 210.173.160.57 -- MFEED(ntp2.jst.mfeed.ad.jp) NTP1='xxx.xxx.xxx.xxx' NTP2='210.173.160.57' # ip_conntrack_ftpのロード # modprobe ip_conntrack_ftp ### iptablesのコマンドパスの定義 ### IPTABLES='/sbin/iptables' ### IPフォワードの停止 ### echo 0 > /proc/sys/net/ipv4/ip_forward ### iptablesのチェーンの初期化 ### $IPTABLES -F ### 暗黙のdeny(デフォルトで拒否)とするルールの設定 ### $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP ### 新規にHACKERというチェーンを追加 $IPTABLES -N HACKER ### ループバックアドレスに関するアクセスを全て許可 ### $IPTABLES -A INPUT -i lo -j ACCEPT $IPTABLES -A OUTPUT -o lo -j ACCEPT ### 入ってくるTCPパケットは全てに先立ちHACKERチェーンで評価 $IPTABLES -A INPUT -p tcp -j HACKER ### 家庭内からのDNS問い合わせを許可 ### $IPTABLES -A INPUT -p udp -s $HOME --dport 53 -j ACCEPT $IPTABLES -A OUTPUT -p udp -d $HOME --sport 53 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 53 -j ACCEPT ### DNSサーバからの外部DNS問い合わせを許可 ### $IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT $IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT ### 家庭内からのNTP問い合わせを許可 ### $IPTABLES -A INPUT -p udp -s $HOME --dport 123 -j ACCEPT $IPTABLES -A OUTPUT -p udp -o $HOME --sport 123 -j ACCEPT ### NTPサーバからの外部NTP問い合わせを許可 ### $IPTABLES -A OUTPUT -d $NTP1 -p udp --dport 123 -j ACCEPT $IPTABLES -A INPUT -s $NTP1 -p udp --sport 123 -j ACCEPT $IPTABLES -A OUTPUT -d $NTP2 -p udp --dport 123 --sport 123 -j ACCEPT $IPTABLES -A INPUT -s $NTP2 -p udp --dport 123 --sport 123 -j ACCEPT ### 家庭内でのファイル共有(NetBIOS)を許可 ### $IPTABLES -A INPUT -p udp -s $HOME --dport 137:138 -j ACCEPT $IPTABLES -A OUTPUT -p udp -d $HOME --sport 137:138 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 139 -j ACCEPT ### 家庭内からのSWAT(SWAT:901)アクセスを許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 901 -j ACCEPT ### 家庭内からのProxyアクセス(PROXY:8080)を許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 8080 -j ACCEPT ### 家庭内でのSSH(22)の使用を許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 22 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -m state --state NEW -d $HOME --dport 22 -j ACCEPT ### WWWサーバへのアクセス(HTTP:80,HTTPS:443)を許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT ### 外部WWWサーバへのアクセス(HTTP:80,HTTPS:443)を許可 ### $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT ### FTPサーバへのアクセス(Active/Passive)を許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 4000:4029 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -m state --state NEW --sport 20 -j ACCEPT ### 外部FTPサーバへのアクセス(Active/Passive)を許可 ### $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW --sport 20 -j ACCEPT ### メールサーバへのアクセス(SMTP:25/465)を許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 465 -j ACCEPT ### 外部メールサーバへのアクセス(SMTP:25,POP3:110)を許可 ### $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -m state --state NEW --dport 110 -j ACCEPT ### メールサーバへのアクセス(POP3:110/995,IMAP:143/993)を許可 ### ### 非SSL系は家庭内のみ許可 ### $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 110 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW -s $HOME --dport 143 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 993 -j ACCEPT $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 995 -j ACCEPT ### Ident(113)を拒否(DROPするとレスポンスが遅くなるのでReject) ### $IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset ### PINGに対する処理 ### $IPTABLES -A INPUT -p icmp --icmp-type 8 -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT $IPTABLES -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT $IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT ### セッション確立後のパケット疎通は許可 ### $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ### 設定内容の保存 ### /etc/rc.d/init.d/iptables save ### IPフォワードの開始 ### echo 1 > /proc/sys/net/ipv4/ip_forward |