#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