#author("2023-04-15T19:43:40+09:00","","")
#author("2023-04-15T19:45:25+09:00","","")
#navi(../)
#Contents
------------------------
*サーバ管理 [#xecb3e70]
**RPM関連情報取得 [#c6f6d191]
***環境準備 [#p26f4866]
サーバ管理関連の関数として継続利用する為、以下のディレクトリを構成で関数を管理する。~
|格納先|用途|
|/root/tools/srv-info|ベースディレクトリ|h
|func|関数格納場所|
|log|最終加工ファイルを格納|
|etc|設定ファイルを格納|
|tmp|一時ファイルを格納|
***rpm-command-info [#p1352a41]
-この関数でできる事~
この関数は今現在サーバ上にインストールされているRPM情報を~
コメント名,RPMバージョン情報,対象Linuxバージョン,Bit~
上記の通り取得し、CSVファイルに出力する関数。
-構文~
 function rpmserch ()
 {
 # ------------------------------------------------------------------------------
 #
 #   RPM Command Version
 #
 # ------------------------------------------------------------------------------

 
 LO_SRV_NAME="`uname -n`"
 LO_SRV_LOG="/root/tools/srv-info/log/${LO_SRV_NAME}-rpm-comm-var-`date '+%Y%m%d%H%M%S'`.csv"

 
 # ------------------------------------------------------------------------------
 #   情報収集
 # ------------------------------------------------------------------------------

 
 rpm -qa --qf '%{name},%{version},%{release},%{arch}\n' > ${LO_SRV_LOG}
 }
-実行結果
 gnome-session,2.28.0,18.el6,x86_64
 m17n-db-assamese,1.5.5,1.1.el6,noarch
 mlocate,0.22.2,4.el6,x86_64

 
             :

 
 abrt,2.0.8,21.el6.centos,x86_64
 xorg-x11-server-Xorg,1.13.0,23.el6.centos,x86_64
 m17n-db-bengali,1.5.5,1.1.el6,noarch

***rpminstchk [#f3af6b25]
-この関数でできる事~
-プログラム~
 # ------------------------------------------------------------------------------
 #    任意の RPM パッケージがインストールされているか確認する関数
 # ------------------------------------------------------------------------------

 
 function rpmserch ()
 {

 
 TMPFILE=/root/tools/srv-info/tmp/rpmserch.tmp

 
 if [ $# -eq 0 ]; then
    echo "使用法: rpmserch [検索キーワード]"
    echo ""
 else
    rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}.rpm\n' | sort | grep ${1} > ${TMPFILE} 2>&1
    BIT32=`cat ${TMPFILE} | grep 'i[36]86' | sort`
    BIT64=`cat ${TMPFILE} | grep 'x86_64' | sort`
 more << EOF
 --------------------------------------------------
  RPM Serch
    Key Word : ${1}
    Hit Word : `cat ${TMPFILE} | wc -l`
 --------------------------------------------------
 32 bit
 -------
 ${BIT32:-none}

 
 64 bit
 -------
 ${BIT64:-none}
 --------------------------------------------------
 EOF
    rm -rf ${TMPFILE}
 fi
 }

***rpmuninstchk [#waf0d38d]
-この関数でできる事~
-プログラム~
 # ------------------------------------------------------------------------------
 #    任意の RPM パッケージがアンインストール可能か確認する関数
 # ------------------------------------------------------------------------------

 
 function rpmuninstchk () {

 
 if [ ! $# -eq 0 ]; then
    CMD=`echo ${1} | sed 's/\.\///g' | awk -F. '{print $1}'`
    echo "--- Erase Package ---"
    echo ""
    echo ${1}
    echo ""
    echo "--- RPM Before Erase Check ---"
    echo ""
    rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | grep ${CMD}
    echo ""
    echo "--- RPM Erase CHECK ---"
    echo ""
    rpm -ev --test ${1}
 fi

 
 }
**バックアップ [#g2c61d99]
***環境準備 [#z37ff207]
***backup.sh [#l8aebeba]
-このスクリプトでできる事
-構文
 #!/bin/sh
 # ------------------------------------------------------------------------------
 #
 #   Remoto Backup Script
 #
 # ------------------------------------------------------------------------------

 
 LO_BACKUP_SRV="192.168.0.67"
 LO_BACKUP_LOG="/root/tools/backup/log/rsync-`date '+%Y%m%d%H%M%S'`.log"
 LO_BACKUP_DIR="/backup/`uname -n`"

 
 # ------------------------------------------------------------------------------
 #   /root ディレクトリバックアップ
 # ------------------------------------------------------------------------------

 
 rsync -avz --delete -e ssh /root/tools      ${LO_BACKUP_SRV}:${LO_BACKUP_DIR}/root >> ${LO_BACKUP_LOG} 2>&1

 
 # ------------------------------------------------------------------------------
 #   /etc ディレクトリバックアップ
 # ------------------------------------------------------------------------------

 
 rsync -avz --delete -e ssh /etc/            ${LO_BACKUP_SRV}:${LO_BACKUP_DIR}/etc/ >> ${LO_BACKUP_LOG} 2>&1
 #rsync -avz --delete -e ssh /etc/httpd      ${LO_BACKUP_SRV}:${LO_BACKUP_DIR}/etc/ >> ${LO_BACKUP_LOG} 2>&1
 #rsync -avz --delete -e ssh /etc/zabbix     ${LO_BACKUP_SRV}:${LO_BACKUP_DIR}/etc/ >> ${LO_BACKUP_LOG} 2>&1
 #rsync -avz --delete -e ssh /etc/my.cnf.d   ${LO_BACKUP_SRV}:${LO_BACKUP_DIR}/etc/ >> ${LO_BACKUP_LOG} 2>&1

**IPTABLES設定スクリプト [#g045ac82]
***環境準備 [#ne3ca44f]
***iptables.sh [#nc2adbe6]
-このスクリプトでできる事
-構文
 #!/bin/bash
 # ------------------------------------------------------------------------------
 #
 #   ローカルファイアーウォール設定
 #
 # ------------------------------------------------------------------------------
 # 参考資料:
 # URL : http://www.rapidsite.jp/support/manual/rv_custom/e_4210.html
 # URL : http://www.virment.com/linux/iptables/183/
 # URL : http://www.aconus.com/~oyaji/security/iptables.htm
 # URL : https://qiita.com/Tocyuki/items/6d90a1ec4dd8e991a1ce
 # ------------------------------------------------------------------------------

 
 # ------------------------------------------------------------------------------
 #   全てのルールを初期化(全削除)する場合
 # ------------------------------------------------------------------------------
 # -F 何も指定されてない場合すべてのフィルタルールを削除する。
 # -X 何も指定されてない場合デフォルト以外のすべてのチェインを削除する。
 # ------------------------------------------------------------------------------
 iptables -F
 iptables -X

 
 # ------------------------------------------------------------------------------
 #   基本ポリシー設定
 # ------------------------------------------------------------------------------
 # チェイン
 # INPUT       入ってくるパケットに関して
 # OUTPUT      出てゆくパケットに関して
 # FORWARD     パケットの転送
 # PREROUTING  受信時にアドレスを変換
 # POSTROUTING 送信時にアドレスを変換
 # ------------------------------------------------------------------------------
 iptables -P INPUT   DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT  ACCEPT

 
 # ------------------------------------------------------------------------------
 #   個別ポリシー設定(ほかACCEPTやDROPなどユーザによる設定)
 # ------------------------------------------------------------------------------

 
 # こちらから求めたパケットは許可する。
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 
 # ローカルループバックの接続を許可する。
 iptables -A INPUT -i lo -j ACCEPT

 
 # ------------------------------------------------------------------------------
 #   個別サーバ登録
 # ------------------------------------------------------------------------------

 
 case $(hostname -s) in
    wp01 )
       iptables -A INPUT -i eth0 -m multiport -p tcp --dports 25,80,443 -j ACCEPT
       ;;
    samba01 )
       iptables -A INPUT -i eth0 -m multiport -p tcp --dports 80,139,445 -j ACCEPT
       iptables -A INPUT -i eth1 -m multiport -p tcp --dports 80,139,445 -j ACCEPT
       iptables -A INPUT -i eth0 -m multiport -p udp --dports 137,138 -j ACCEPT
       iptables -A INPUT -i eth1 -m multiport -p udp --dports 137,138 -j ACCEPT
       ;;
    repo01 )
       iptables -A INPUT -i eth0 -m multiport -p tcp --dports 80 -j ACCEPT
       ;;
    dns01 )
       iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53 -j ACCEPT
       iptables -A INPUT -i eth1 -m multiport -p tcp --dports 53 -j ACCEPT
       ;;
 esac

 
 iptables -A INPUT -i eth0 -s 192.168.0.25 -p tcp --dport 22 -j ACCEPT
 iptables -A INPUT -i eth1 -s 192.168.2.25 -p tcp --dport 22 -j ACCEPT
 iptables -A INPUT -m multiport -p tcp --dports 10050,10051,10055,10061 -j ACCEPT
 iptables -A INPUT -m multiport -p udp --dports 10050,10051,10055,10061 -j ACCEPT

 
 ### ------------------------------------------------------------------------------
 ###   特定の国からの接続を許可
 ### ------------------------------------------------------------------------------
 ###
 ###L_DW_PATH=http://nami.jp/ipv4bycc/cidr.txt.gz
 ###L_DW_FILE=/tmp/cidr.txt.gz
 ###L_DW_LOG=/tmp/download.log
 ###L_IP_LIST=/tmp/ip.lst
 ###
 ###wget -O ${L_DW_FILE} -o ${L_DW_LOG} ${L_DW_PATH} && zcat ${L_DW_FILE} > ${L_IP_LIST} && rm -f ${L_DW_FILE}
 ###
 ### 特定の国からのアクセスを許可する
 ###if [ -s ${L_IP_LIST} ]; then
 ###     iptables -N ACCEPT_JP_FILTER
 ###     sed -n 's/^JP\t//p' ${L_IP_LIST} | while read address;
 ###      do
 ###        iptables -A ACCEPT_JP_FILTER -s ${address} -m state --state NEW -m multiport -p tcp --dports 8887,443 -j ACCEPT
 ###     done
 ###fi
 ### ------------------------------------------------------------------------------

 
 # ------------------------------------------------------------------------------
 #   IP Spoofing攻撃対策
 # ------------------------------------------------------------------------------
 # 外部(WAN側)からプライベートIPアドレスに成りすました通信を破棄します。
 iptables -N IP_SPOOFING
 iptables -A IP_SPOOFING -i eth0 -s 127.0.0.1/8    -j DROP
 iptables -A IP_SPOOFING -i eth0 -s 10.0.0.0/8     -j DROP
 iptables -A IP_SPOOFING -i eth0 -s 172.16.0.0/12  -j DROP
 iptables -A IP_SPOOFING -i eth0 -s 192.168.0.0/16 -j DROP
 iptables -A IP_SPOOFING -i eth0 -s 192.168.0.0/24 -j DROP
 iptables -A IP_SPOOFING -i eth1 -s 127.0.0.1/8    -j DROP
 iptables -A IP_SPOOFING -i eth1 -s 10.0.0.0/8     -j DROP
 iptables -A IP_SPOOFING -i eth1 -s 172.16.0.0/12  -j DROP
 iptables -A IP_SPOOFING -i eth1 -s 192.168.0.0/16 -j DROP
 iptables -A IP_SPOOFING -i eth1 -s 192.168.0.0/24 -j DROP

 
 # ------------------------------------------------------------------------------
 #   Ping攻撃対策
 # ------------------------------------------------------------------------------
 iptables -N PING_ATTACK
 iptables -A PING_ATTACK -m length --length :85 -j ACCEPT
 iptables -A PING_ATTACK -j LOG --log-prefix "[IPTABLES PINGATTACK] : " --log-level=debug
 iptables -A PING_ATTACK -j DROP
 iptables -A INPUT -p icmp --icmp-type 8 -j PING_ATTACK

 
 # ------------------------------------------------------------------------------
 #   Ping攻撃対策 + Ping Flood攻撃対策
 # ------------------------------------------------------------------------------
 iptables -A PING_ATTACK -p icmp --icmp-type 8 -m length --length :85 -m limit --limit 1/s --limit-burst 4 -j ACCEPT

 
 # ------------------------------------------------------------------------------
 #   サーバー攻撃への対処
 #   syn信号とPING攻撃の無効化(1秒に1回だけ受信)
 # ------------------------------------------------------------------------------
 iptables -A INPUT -i ppp+ -p tcp --syn -m limit --limit 1/s -j ACCEPT
 iptables -A INPUT -i ppp+ -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

 
 # ------------------------------------------------------------------------------
 #   Smurf攻撃対策+不要ログ破棄
 # ------------------------------------------------------------------------------
 iptables -N SMURF
 iptables -A SMURF -d 255.255.255.255 -j DROP
 iptables -A SMURF -d 224.0.0.1 -j DROP
 iptables -A SMURF -d 192.168.0.255 -j DROP
 iptables -A SMURF -d 192.168.2.255 -j DROP

 
 # ------------------------------------------------------------------------------
 #   SYNflood攻撃と思われる接続を破棄する
 # ------------------------------------------------------------------------------
 iptables -I INPUT -p tcp ! --syn -m state --state NEW -j DROP

 
 # ------------------------------------------------------------------------------
 #   データを持たないパケットの接続を破棄する
 # ------------------------------------------------------------------------------
 iptables -I INPUT -p tcp --tcp-flags ALL NONE -j DROP

 
 # ------------------------------------------------------------------------------
 #   ステルススキャンと思われる接続を破棄する
 # ------------------------------------------------------------------------------
 iptables -I INPUT -p tcp --tcp-flags ALL ALL -j DROP

 
 # ------------------------------------------------------------------------------
 #   それ以外はログを残す。
 # ------------------------------------------------------------------------------
 iptables -A INPUT -j LOG --log-prefix "drop_packet:"

 
 # ------------------------------------------------------------------------------
 #   設定を登録及び再起動
 # ------------------------------------------------------------------------------

 
 /etc/init.d/iptables save
 /etc/init.d/iptables restart

 
 # ----------------------------------------------------------------------------------------
 #   設定内容を確認
 # ----------------------------------------------------------------------------------------

 
 iptables -L -n -v --line-number

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS