9月 21 2010

プログラムから開く

再インストール際など他のプログラムから開くなどで上手くソフトがしない場合、前のデータが残ってるので削除する。

「ファイル名を指定して実行」→「regedit」と入力してOKを押す。
HKEY_CURRENT_USER\Softeare\Classes\Applicationsと開く
そこにあるもの右クリックで「削除」する。

9月 09 2010

portの閉じ方

nmapで空きポートを確認

# nmap localhost

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2010-09-09 13:18 JST
Interesting ports on example.com (127.0.0.1):
Not shown: 1670 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql

isofでプロセスを表示
ポート80を確認してみる

# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 1214 root 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1251 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1252 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1253 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1254 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1255 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1256 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1257 apache 4u IPv4 3315 TCP *:http (LISTEN)
httpd 1258 apache 4u IPv4 3315 TCP *:http (LISTEN)

killで該当プロセス「214」をとめる

# kill 1214
You have new mail in /var/spool/mail/root

nmapで確認

# nmap localhost

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2010-09-09 13:18 JST
Interesting ports on example.com (127.0.0.1):
Not shown: 1670 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
110/tcp open pop3
143/tcp open imap
443/tcp open https
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql

ポート80が表示されなければOK

しかし自動起動の設定をしているとrebootなので再起動したときにきどうしてまう・・・

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

chkconfigをoffする

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

そして停止する

# /etc/init.d/httpd stop
httpd を停止中: [ OK ]

《参考サイト》
Linuxのカーネルアップデートのメリット、デメリット

9月 09 2010

iptablesログ

デフォルトだとiptablesのログがmessagesに記録される。
かなりの量になり見辛いので独立させたい!!
/etc/syslog.confを設定

# vi /etc/syslog.conf

以下と追記  iptables.logへ保存する

*.info;mail.none;authpriv.none;cron.none;kern.none    /var/log/messages;kern.noneを追加
kern.debug /var/log/iptables.log追記

/var/log/にiptables.logを作成してパーミッションを600に

# touch /var/log/iptables.log
# chmod 600 /var/log/iptables.log

syslogを再起動

# /etc/init.d/syslog restart

《参考サイト》
iptablesのログlogLOG
iptablesのロギング

9月 08 2010

シェルスクリプトによるiptablesの設定

/etc/sysctl.confの設定

# vi /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

# SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
net.ipv4.tcp_syncookies=1

# ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
net.ipv4.icmp_echo_ignore_broadcasts = 1

# IPアドレスのなしすまし対策
net.ipv4.conf.default.rp_filter = 1

#偽のエラーレスポンス無視
net.ipv4.icmp_ignore_bogus_error_responses = 1

シェルスクリプトにてiptablesを設定

# vi /root/iptables.sh

iptables.sh

#!/bin/bash

# ファイアウォール停止(すべてのルールをクリア)
/etc/init.d/iptables stop

# インタフェース名定義
LAN=eth0

# 内部ネットワークのネットマスク取得
LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`

# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT   DROP   # 受信はすべて破棄
iptables -P OUTPUT  ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP   # 通過はすべて破棄

# 自ホストからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 内部からのアクセスをすべて許可
iptables -A INPUT -s $LOCALNET -j ACCEPT

# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

# フラグメント化されたパケットはログを記録して破棄
iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A INPUT -f -j DROP

# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH

# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

# ACCEPT_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成
ACCEPT_COUNTRY_MAKE(){
    for addr in `cat cidr.txt|grep ^$1|awk '{print $2}'`
    do
        iptables -A ACCEPT_COUNTRY -s $addr -j ACCEPT
    done
}

# DROP_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成
DROP_COUNTRY_MAKE(){
    for addr in `cat cidr.txt|grep ^$1|awk '{print $2}'`
    do
        iptables -A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_COUNTRY] : '
        iptables -A DROP_COUNTRY -s $addr -j DROP
    done
}

# iptables設定スクリプト外部関数取り込み
. /root/iptables_functions

# IPアドレスリスト取得
IPLISTGET

# 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成
iptables -N ACCEPT_COUNTRY
ACCEPT_COUNTRY_MAKE JP
# 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する

# 中国・韓国・台湾からのアクセスを破棄するユーザ定義チェインDROP_COUNTRY作成
iptables -N DROP_COUNTRY
DROP_COUNTRY_MAKE CN
DROP_COUNTRY_MAKE KR
DROP_COUNTRY_MAKE TW
# 以降,中国・韓国・台湾からのアクセスを破棄したい場合はDROPのかわりにDROP_COUNTRYを指定する

# 中国・韓国・台湾※からのアクセスをログを記録して破棄
# ※全国警察施設への攻撃元上位3カ国(日本・アメリカを除く)
# http://www.cyberpolice.go.jp/detect/observation.htmlより
iptables -A INPUT -j DROP_COUNTRY

# IPアドレスリスト削除
rm -f cidr.txt

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
# ※SSHサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 外部からのTCP25番ポート(SMTP)へのアクセスを許可
# ※SMTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# 外部からのTCP465番ポート(SMTPS)へのアクセスを日本からのみ許可
# ※SMTPSサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY

# 外部からのTCP110番ポート(POP3)へのアクセスを日本からのみ許可
# ※POP3サーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY

# 外部からのTCP995番ポート(POP3S)へのアクセスを日本からのみ許可
# ※POP3Sサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY

# 外部からのTCP143番ポート(IMAP)へのアクセスを日本からのみ許可
# ※IMAPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで)               #
#----------------------------------------------------------#

# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
    iptables -N DENY_HOST
    for ip in `cat /root/deny_ip`
    do
        iptables -A DENY_HOST -s $ip -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_HOST] : '
        iptables -A DENY_HOST -s $ip -j DROP
        iptables -I INPUT -j DENY_HOST
    done
fi

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP 

# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save

# ファイアウォール再起動
/etc/rc.d/init.d/iptables restart

ファイアウォール設定スクリプトへ実行権限付加

# chmod 700 /root/iptables.sh

ファイアウォール設定スクリプト外部関数作成
http://nami.jp/ipv4bycc/ から、「世界の国別 IPv4 アドレス割り当てリスト」をダウンロードしてその中の「中国[CN]・韓国[KR]・台湾[TW]」に該当するIPアドレスからの接続を拒否するように設定

# vi /root/iptables_functions

# IPアドレスリスト取得関数定義
IPLISTGET(){
    # http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
    wget -q http://nami.jp/ipv4bycc/cidr.txt.gz
    gunzip cidr.txt.gz
    # 最新版IPアドレスリストが取得できなかった場合
    if [ ! -f cidr.txt ]; then
        if [ -f /tmp/cidr.txt ]; then
            # バックアップがある場合はその旨をroot宛にメール通知して処理を打ち切る
            echo cidr.txt was read from the backup! | mail -s $0 root
            exit 1
        else
            # バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
            echo cidr.txt not found!|mail -s $0 root
            exit 1
        fi
    fi
    # 最新版IPアドレスリストを /tmpへバックアップする
    /bin/cp cidr.txt /tmp/cidr.txt
}

IPアドレス情報は頻繁に更新されるので、自動的に最新のIPアドレス情報で特定国からのアクセス拒否ルールを更新するようにする
/etc/cron.dailyで毎日スクリプトを実行

# vi /etc/cron.daily/iplist_check.sh

iplist_check.shの設定内容

#!/bin/bash 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 新旧IPLIST差分チェック件数(0を指定するとチェックしない)
# ※新旧IPLIST差分がSABUN_CHKで指定した件数を越える場合はiptables設定スクリプトを実行しない
# ※新旧IPLIST差分チェック理由は
SABUN_CHK=100
[ $# -ne 0 ] && SABUN_CHK=${1}

# チェック国コード
COUNTRY_CODE='JP CN KR TW'

# iptables設定スクリプトパス
IPTABLES=/root/iptables.sh

# iptables設定スクリプト外部関数取り込み
. /root/iptables_functions

# IPアドレスリスト最新化
IPLISTGET
for country in $COUNTRY_CODE
do
    if [ -f cidr.txt ]; then
        grep ^$country cidr.txt >> IPLIST.new
    else
        grep ^$country /tmp/IPLIST >> IPLIST.new
    fi
done
rm -f cidr.txt

# IPアドレスリスト更新チェック
diff -q /tmp/IPLIST IPLIST.new > /dev/null 2>&1
if [ $? -ne 0 ]; then
    /bin/mv IPLIST.new /tmp/IPLIST
    $IPTABLES > /dev/null
else
    rm -f IPLIST.new
fi

IPアドレス情報チェックスクリプトに実行権限付加

chmod 700 /etc/cron.daily/iplist_check.sh

《参考サイト》
Iptableの設定
ファイアウォール構築(iptables)
CentOS 5.1 iptablesでファイアーウォール

9月 08 2010

送信ドメインのSPF認証結果

【SPF】

Authentication Results 認証 認証結果 意味
spf=pass 正しく認証された
spf=neutral 詐称されているかどうか判断出来ない
spf=softfail 詐称の可能性がある
spf=fail × 詐称されている
spf=temperror × なし 認証処理エラーのため認証出来ず
spf=permerror × なし 認証登録情報に誤りがある