⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portblock.in

📁 linux集群服务器软件代码包
💻 IN
字号:
#!/bin/sh##	portblock: iptables temporary portblocking control ##	  OCF parameters are as below:#		OCF_RESKEY_protocol#		OCF_RESKEY_portno#		OCF_RESKEY_action######################################################################## Initialization:. @hb_libdir@/ocf-shellfuncs#######################################################################VARLIB=@localstatedir@/lib/@HB_PKG@/rsctmpprefix=@prefix@exec_prefix=@exec_prefix@CMD=`basename $0`iptables=/usr/sbin/iptablesBlockOrUnblock=blockusage(){	cat <<-!USAGE >&2	usage: $CMD {start|stop|status|monitor|meta-data}	$CMD is used to temporarily block ports using iptables.	It can be used to turn off a port before bringing	up an IP address, and enable it after a service is started.	To do that for samba, the following resource line can be used:	$CMD::tcp::137,138::block		\\	    10.10.10.20				\\	    nmbd smbd 				\\	    $CMD::tcp::137,138::unblock	This will do the follwing things:	  - DROP all incoming packets for TCP ports 137 and 138	  - Bring up the IP alias 10.10.10.20	  - start the nmbd and smbd services	  - Re-enable TCP ports 137 and 138	        (enable normal firewall rules on those ports)	This prevents clients from getting ICMP port unreachable	if they try to reconnect to the service after the alias is	enabled but before nmbd and smbd are running.  These packets	will cause some clients to give up attempting to reconnect to	the server.	NOTE:  iptables is linux-specific...	!USAGE}meta_data() {	cat <<END<?xml version="1.0"?><!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"><resource-agent name="portblock" version="0.9"><version>1.0</version><longdesc lang="en">Resource script for portblock. It is used to temporarily block ports using iptables. </longdesc><shortdesc lang="en">portblock resource agent</shortdesc><parameters><parameter name="protocol" unique="0"><longdesc lang="en">The protocol used to be blocked/unblocked.</longdesc><shortdesc lang="en">protocol</shortdesc><content type="string" default="" /></parameter><parameter name="portno" unique="0"><longdesc lang="en">The port number used to be blocked/unblocked.</longdesc><shortdesc lang="en">portno</shortdesc><content type="integer" default="" /></parameter><parameter name="action" unique="0"><longdesc lang="en">The action (block/unblock) to be done on the protocol::portno.</longdesc><shortdesc lang="en">action</shortdesc><content type="string" default="" /></parameter></parameters><actions><action name="start" timeout="20" /><action name="stop" timeout="20" /><action name="status" depth="0" timeout="10" interval="10" start-delay="10" /><action name="monitor" depth="0" timeout="10" interval="10" start-delay="10" /><action name="meta-data" timeout="5" /></actions></resource-agent>END}##	Because this is the normal usage, we consider "block"#	resources to be pseudo-resources -- that is, their status can't#	be reliably determined through external means.#	This is because we expect an "unblock" resource to come along#	and disable us -- but we're still in some sense active...##	So, we track the state here using the pseudo_resource() function.##	The psuedo_resource function should be moved into the functions#	available to resources so other resource scripts could use it...### pseudo_resource filename operationpseudo_resource(){  file="$VARLIB/$1"  case $2 in    start|restart|reload)  touch "$file";;    stop) rm -f $file;;    status) test -f "$file";;    *)	exit 3;;  esac}#iptables_spec {udp|tcp} portno,portnoiptables_spec(){  echo -D INPUT -p $1 -m multiport --dports $2 -j DROP}#active_grep_pat {udp|tcp} portno,portnoactive_grep_pat(){  w="[ 	][ 	]*"  any="0\\.0\\.0\\.0/0"  echo "^DROP${w}${1}${w}--${w}${any}${w}${any}${w}multiport${w}dports${w}${2} "}#chain_isactive  {udp|tcp} portno,portnochain_isactive(){  PAT=`active_grep_pat "$1" "$2"`  $iptables -n -L INPUT | grep "$PAT" >/dev/null}SayActive(){  echo "$CMD DROP rule for INPUT chain [$*]  is running (OK)"  return 0}SayConsideredActive(){  echo "$CMD DROP rule for INPUT chain [$*] considered to be running (OK)"  return 0}SayInactive(){  echo "$CMD DROP rule for INPUT chain [$*] is inactive"  return 1}#IptablesStatus  {udp|tcp} portno,portno {block|unblock}IptablesStatus(){  activewords="$CMD $1 $2 is running (OK)"  if    chain_isactive "$1" "$2"  then    case $3 in	  block)	SayActive $*; return $?;;	  *) 		SayInactive $*; return $?;;    esac  else    case $3 in	  block)	        if		  pseudo_resource "$RSCNAME" status		then		  SayConsideredActive $*; return $?		else		  SayInactive $*; return $?		fi;;	  *)	SayActive $*; return $?;;    esac  fi      }#IptablesBLOCK  {udp|tcp} portno,portnoIptablesBLOCK(){  if    chain_isactive "$1" "$2"  then    : OK -- chain already active  else    $iptables -I INPUT -p "$1" -m multiport --dports "$2" -j DROP  fi  return $?}#IptablesUNBLOCK  {udp|tcp} portno,portnoIptablesUNBLOCK(){  if    chain_isactive "$1" "$2"  then    $iptables -D INPUT -p "$1" -m multiport --dports "$2" -j DROP  else    : Chain Not active  fi  return $?}#IptablesStart  {udp|tcp} portno,portno {block|unblock}IptablesStart(){  pseudo_resource "$RSCNAME" start  case $3 in    block)	IptablesBLOCK "$@";;    unblock)	IptablesUNBLOCK "$@";;    *)		usage; return 1;  esac  return $?}#IptablesStop  {udp|tcp} portno,portno {block|unblock}IptablesStop(){  pseudo_resource "$RSCNAME" stop  case $3 in    block)	IptablesUNBLOCK "$@";;    unblock)	IptablesBLOCK "$@";;    *)		usage; return 1;;  esac  return $?}if  ( [ $# -eq 0 ] || [ $# -gt 1 ] )then  usage  exit 1fiif   ( [ -z "$OCF_RESKEY_protocol" ] ||  [ -z "$OCF_RESKEY_portno" ] || [ -z "$OCF_RESKEY_action" ] )then  usage  exit 1fiprotocol=$OCF_RESKEY_protocolportno=$OCF_RESKEY_portnoaction=$OCF_RESKEY_actionRSCNAME=${CMD}_${protocol}_${portno}_${action}case $1 in  meta-data)		meta_data			exit $OCF_SUCCESS			;;  start)				IptablesStart $protocol $portno $action 			;;  stop)					IptablesStop $protocol $portno $action			;;  status|monitor)				IptablesStatus $protocol $portno $action			;;  usage)		usage			exit $OCF_SUCCESS			;;  *)			usage			exit $OCF_ERR_UNIMPLEMENTED			;;esacexit $?

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -