サーバ管理関連の関数として継続利用する為、以下のディレクトリを構成で関数を管理する。
/root/tools/srv-info | ベースディレクトリ |
格納先 | 用途 |
func | 関数格納場所 |
log | 最終加工ファイルを格納 |
etc | 設定ファイルを格納 |
tmp | 一時ファイルを格納 |
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
# ------------------------------------------------------------------------------ # 任意の 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 }
# ------------------------------------------------------------------------------ # 任意の 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
}
#!/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
#!/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