├── LICENSE ├── README.md ├── check_domain_expiration.sh ├── commands ├── icinga2.conf └── nagios.cfg └── icingaexchange.yml /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Emil Wypych 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ICINGA2 Check Domain Expiration plugin 2 | ====================================== 3 | 4 | This plugin has been created especially for Icinga2, but it is compatible with Nagios 4 too. Plugin checks expiration date of domain and informs how many days are left until domain expires. In the "command" directory you find examples of command definitions for both Nagios and Icinga2. 5 | 6 | Example of use 7 | -------------- 8 | 9 | ```sh 10 | ./check_domain_expiration.sh -d google.com -w 60 -c 30 11 | or 12 | ./check_domain_expiration.sh -d youdomain.com.au -s crazydomains.com 13 | ``` 14 | 15 | Requirements 16 | ------------ 17 | 18 | Plugin requires the following packages installed on your Icinga/Nagios node: 19 | 20 | * WHOIS 21 | * AWK 22 | 23 | Supported Top-level Domains 24 | ---------------------------- 25 | 26 | * com 27 | * pl 28 | * org 29 | * info 30 | * net 31 | * center 32 | * pro 33 | * me 34 | * su 35 | * studio 36 | * nu 37 | * ru 38 | * xn--p1ai (рф) 39 | * moscow 40 | * se 41 | * asia 42 | * art 43 | * cz 44 | * fr 45 | * re 46 | * yt 47 | * tf 48 | * pm 49 | * shop 50 | * tv 51 | * ua 52 | * im 53 | * uk 54 | * co.uk 55 | * tech 56 | * co 57 | * digital 58 | * br 59 | * it 60 | * club 61 | * ie 62 | * id 63 | * dev 64 | * io 65 | * rocks 66 | * space 67 | * us 68 | * in 69 | * fm 70 | * xyz 71 | 72 | Supported Whois Servers 73 | 74 | * whois.crazydomains.com 75 | * whois.cloudflare.com 76 | * whois.drs.ua, whois.pp.ua, whois.biz.ua 77 | 78 | License 79 | ------- 80 | 81 | [MIT](https://tldrlegal.com/license/mit-license) 82 | 83 | Author 84 | ------ 85 | 86 | [Emil Wypych](https://emilwypych.com) [@gmail](mailto:wypychemil@gmail.com) 87 | [Github Repo](https://github.com/ewypych/icinga-domain-expiration-plugin) 88 | -------------------------------------------------------------------------------- /check_domain_expiration.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################# 4 | # 5 | # This plugin checks domain expiration date 6 | # 7 | # Author: Emil Wypych 8 | # 9 | # Contact: wypychemil at gmail.com 10 | # 11 | # GitHub: https://github.com/ewypych/icinga-domain-expiration-plugin 12 | # 13 | ############################################# 14 | 15 | # default days for warning (can change with -w cmd) 16 | WARNING=30 17 | 18 | # default days for critical (can change with -c cmd) 19 | ALARM=10 20 | 21 | # binaries path 22 | WHOIS="/usr/bin/whois" 23 | AWK="/usr/bin/awk" 24 | 25 | # Main check function 26 | check_domain() 27 | { 28 | # Set domain 29 | DOMAIN=$1 30 | 31 | # check root domain 32 | DTYPE=$( echo $DOMAIN | awk -F "." '{print $NF}' ) 33 | 34 | if [ "$DTYPE" == "com" ] 35 | then 36 | # "=${1}" because of many possibilities - check out google.com with "whois google.com" 37 | EXDATE_TMP=$(${WHOIS} -h whois.internic.com "=${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 38 | if [ -z "$EXDATE_TMP" ] 39 | then 40 | EXP_DAYS=NULL 41 | else 42 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 43 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 44 | fi 45 | elif [ "$DTYPE" == "ie" ] 46 | then 47 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 48 | if [ -z "$EXDATE_TMP" ] 49 | then 50 | EXP_DAYS=NULL 51 | else 52 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 53 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 54 | fi 55 | elif [ "$DTYPE" == "studio" ] 56 | then 57 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 58 | if [ -z "$EXDATE_TMP" ] 59 | then 60 | EXP_DAYS=NULL 61 | else 62 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 63 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 64 | fi 65 | elif [ "$DTYPE" == "se" ] || [ "$DTYPE" == "nu" ] 66 | then 67 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/expires:/ { print $2 }') 68 | if [ -z "$EXDATE_TMP" ] 69 | then 70 | EXP_DAYS=NULL 71 | else 72 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 73 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 74 | fi 75 | elif [ "$DTYPE" == "ua" ] 76 | then 77 | EXDATE_TMP=$(${WHOIS} -h whois.ua "${1}" | ${AWK} '/expires:/ { print $2 }') 78 | if [ -z "$EXDATE_TMP" ] 79 | then 80 | EXP_DAYS=NULL 81 | else 82 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 83 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 84 | fi 85 | elif [ "$DTYPE" == "asia" ] 86 | then 87 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 88 | if [ -z "$EXDATE_TMP" ] 89 | then 90 | EXP_DAYS=NULL 91 | else 92 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 93 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 94 | fi 95 | elif [ "$DTYPE" == "org" ] 96 | then 97 | EXDATE_TMP=$(${WHOIS} -h whois.pir.org "${1}" | ${AWK} '/Expiry Date:/ { print $4 }' | cut -c 1-16) 98 | if [ -z "$EXDATE_TMP" ] 99 | then 100 | EXP_DAYS=NULL 101 | else 102 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 103 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 104 | fi 105 | elif [ "$DTYPE" == "info" ] 106 | then 107 | EXDATE_TMP=$(${WHOIS} -h whois.afilias.info "${1}" | ${AWK} '/Expiry Date:/ { print $4 }' | cut -c 1-16) 108 | if [ -z "$EXDATE_TMP" ] 109 | then 110 | EXP_DAYS=NULL 111 | else 112 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 113 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 114 | fi 115 | elif [ "$DTYPE" == "net" ] 116 | then 117 | EXDATE_TMP=$(${WHOIS} -h whois.verisign-grs.com "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 118 | if [ -z "$EXDATE_TMP" ] 119 | then 120 | EXP_DAYS=NULL 121 | else 122 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 123 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 124 | fi 125 | elif [ "$DTYPE" == "dev" ] 126 | then 127 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 128 | if [ -z "$EXDATE_TMP" ] 129 | then 130 | EXP_DAYS=NULL 131 | else 132 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 133 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 134 | fi 135 | elif [ "$DTYPE" == "center" ] 136 | then 137 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 138 | if [ -z "$EXDATE_TMP" ] 139 | then 140 | EXP_DAYS=NULL 141 | else 142 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 143 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 144 | fi 145 | elif [ "$DTYPE" == "pro" ] 146 | then 147 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 148 | if [ -z "$EXDATE_TMP" ] 149 | then 150 | EXP_DAYS=NULL 151 | else 152 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 153 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 154 | fi 155 | elif [ "$DTYPE" == "me" ] 156 | then 157 | EXDATE_TMP=$(${WHOIS} -h whois.nic.me "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 158 | if [ -z "$EXDATE_TMP" ] 159 | then 160 | EXP_DAYS=NULL 161 | else 162 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 163 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 164 | fi 165 | elif [ "$DTYPE" == "su" ] 166 | then 167 | EXDATE=$(${WHOIS} "${1}" | ${AWK} '/paid-till:/ { print $2 }' | cut -d 'T' -f1) 168 | if [ -z "$EXDATE" ] 169 | then 170 | EXP_DAYS=NULL 171 | else 172 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 173 | fi 174 | elif [ "$DTYPE" == "xn--p1ai" ] 175 | then 176 | EXDATE=$(${WHOIS} "${1}" | ${AWK} '/paid-till:/ { print $2 }' | cut -d 'T' -f1) 177 | if [ -z "$EXDATE" ] 178 | then 179 | EXP_DAYS=NULL 180 | else 181 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 182 | fi 183 | elif [ "$DTYPE" == "ru" ] 184 | then 185 | EXDATE=$(${WHOIS} "${1}" | ${AWK} '/paid-till:/ { print $2 }' | cut -d 'T' -f1) 186 | if [ -z "$EXDATE" ] 187 | then 188 | EXP_DAYS=NULL 189 | else 190 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 191 | fi 192 | elif [ "$DTYPE" == "moscow" ] 193 | then 194 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 195 | if [ -z "$EXDATE_TMP" ] 196 | then 197 | EXP_DAYS=NULL 198 | else 199 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 200 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 201 | fi 202 | elif [ "$DTYPE" == "art" ] 203 | then 204 | EXDATE=$(${WHOIS} -h whois.nic.art "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 205 | if [ -z "$EXDATE" ] 206 | then 207 | EXP_DAYS=NULL 208 | else 209 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 210 | fi 211 | elif [ "$DTYPE" == "pl" ] 212 | then 213 | EXDATE=$(${WHOIS} "${1}" | ${AWK} '/renewal date:/ { gsub("[:.]","-"); print $3 }') 214 | if [ -z "$EXDATE" ] 215 | then 216 | EXDATE=$(${WHOIS} -h whois.dns.pl "${1}" | ${AWK} '/expiration date:/ { gsub("[:.]","-"); print $3 }') 217 | if [ -z "$EXDATE" ] 218 | then 219 | EXP_DAYS=NULL 220 | else 221 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 222 | fi 223 | else 224 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 225 | fi 226 | elif [ "$DTYPE" == "cz" ] 227 | then 228 | EXDATE=$(${WHOIS} -h whois.nic.cz "${1}" | ${AWK} '/expire:/ { print $2 }' | ${AWK} '{ split($0, d, "."); print d[3]"-"d[2]"-"d[1] }') 229 | if [ -z "$EXDATE" ] 230 | then 231 | EXP_DAYS=NULL 232 | else 233 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 234 | fi 235 | elif [ "$DTYPE" == "sk" ] 236 | then 237 | EXDATE=$(${WHOIS} -h whois.sk-nic.sk "${1}" | ${AWK} '/Valid Until:/ { print $3 }') 238 | if [ -z "$EXDATE" ] 239 | then 240 | EXP_DAYS=NULL 241 | else 242 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 243 | fi 244 | elif [ "$DTYPE" == "biz" ] 245 | then 246 | EXDATE=$(${WHOIS} -h whois.biz "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -d 'T' -f1) 247 | if [ -z "$EXDATE" ] 248 | then 249 | EXP_DAYS=NULL 250 | else 251 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 252 | fi 253 | elif [ "$DTYPE" == "fr" -o "$DTYPE" == "re" -o "$DTYPE" == "yt" -o "$DTYPE" == "tf" -o "$DTYPE" == "wf" -o "$DTYPE" == "pm" ] 254 | then 255 | EXDATE=$(${WHOIS} -h whois.afnic.fr "${1}" | ${AWK} '/Expiry Date:/ { gsub("[:.]","-"); print $3 }' | cut -d 'T' -f1) 256 | if [ -z "$EXDATE" ] 257 | then 258 | EXP_DAYS=NULL 259 | else 260 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 261 | fi 262 | elif [ "$DTYPE" == "shop" ] 263 | then 264 | EXDATE=$(${WHOIS} -h whois.nic.shop "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 265 | if [ -z "$EXDATE" ] 266 | then 267 | EXP_DAYS=NULL 268 | else 269 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 270 | fi 271 | 272 | 273 | elif [ "$DTYPE" == "tv" ] 274 | then 275 | EXDATE=$(${WHOIS} -h tvwhois.verisign-grs.com "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 276 | if [ -z "$EXDATE" ] 277 | then 278 | EXP_DAYS=NULL 279 | else 280 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 281 | fi 282 | 283 | 284 | elif [ "$DTYPE" == "im" ] 285 | then 286 | EXDATE_TMP=$(${WHOIS} -h whois.nic.im "${1}" | ${AWK} '/Expiry Date:/ { gsub("[:.]","-"); print $3 }' | cut -d 'T' -f1 | awk -F[/] '{print $2"/"$1"/"$3}') 287 | if [ -z "$EXDATE_TMP" ] 288 | then 289 | EXP_DAYS=NULL 290 | else 291 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 292 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 293 | fi 294 | 295 | elif [ "$DTYPE" == "uk" ] 296 | then 297 | EXDATE_TMP=$(${WHOIS} -h whois.nic.uk "${1}" | grep 'Expiry date' | ${AWK} '{ print $3 }' ) 298 | if [ -z "$EXDATE_TMP" ] 299 | then 300 | EXP_DAYS=NULL 301 | else 302 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 303 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 304 | fi 305 | 306 | 307 | elif [ "$DTYPE" == "tech" ] 308 | then 309 | EXDATE_TMP=$(${WHOIS} -h whois.nic.tech "${1}" | grep -i 'Expiry Date' | ${AWK} '{ print $4 }' ) 310 | if [ -z "$EXDATE_TMP" ] 311 | then 312 | EXP_DAYS=NULL 313 | else 314 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 315 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 316 | fi 317 | 318 | 319 | elif [ "$DTYPE" == "co" ] 320 | then 321 | EXDATE_TMP=$(${WHOIS} -h whois.nic.co "${1}" | grep -i 'Expiry Date' | ${AWK} '{ print $4 }' ) 322 | if [ -z "$EXDATE_TMP" ] 323 | then 324 | EXP_DAYS=NULL 325 | else 326 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 327 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 328 | fi 329 | 330 | 331 | elif [ "$DTYPE" == "digital" ] 332 | then 333 | EXDATE_TMP=$(${WHOIS} -h whois.nic.digital "${1}" | grep -i 'Expiry Date' | ${AWK} '{ print $4 }' ) 334 | if [ -z "$EXDATE_TMP" ] 335 | then 336 | EXP_DAYS=NULL 337 | else 338 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 339 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 340 | fi 341 | 342 | 343 | elif [ "$DTYPE" == "br" ] 344 | then 345 | EXDATE_TMP=$(${WHOIS} -h whois.registro.br "${1}" | grep -i 'expires' | ${AWK} '{ print $2 }' ) 346 | if [ -z "$EXDATE_TMP" ] 347 | then 348 | EXP_DAYS=NULL 349 | else 350 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 351 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 352 | fi 353 | 354 | elif [ "$DTYPE" == "do" ] 355 | then 356 | EXDATE_TMP=$(${WHOIS} -h whois.nic.do "${1}" | ${AWK} '/Registrar Registration Expiration Date:/ { print $5 }') 357 | if [ -z "$EXDATE_TMP" ] 358 | then 359 | EXP_DAYS=NULL 360 | else 361 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 362 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 363 | fi 364 | elif [ "$DTYPE" == "id" ] 365 | then 366 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Expiration Date:/ { print $3 }') 367 | if [ -z "$EXDATE_TMP" ] 368 | then 369 | EXP_DAYS=NULL 370 | else 371 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 372 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 373 | fi 374 | elif [ "$DTYPE" == "it" ] 375 | then 376 | EXDATE_TMP=$(${WHOIS} -h whois.nic.it "${1}" | grep -i "Expire Date" | ${AWK} '{ print $3 }') 377 | if [ -z "$EXDATE_TMP" ] 378 | then 379 | EXP_DAYS=NULL 380 | else 381 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 382 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 383 | fi 384 | elif [ "$DTYPE" == "club" ] 385 | then 386 | EXDATE=$(${WHOIS} -h whois.nic.club "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 387 | if [ -z "$EXDATE" ] 388 | then 389 | EXP_DAYS=NULL 390 | else 391 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 392 | fi 393 | elif [ "$DTYPE" == "io" ] 394 | then 395 | EXDATE=$(${WHOIS} -h whois.nic.io "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 396 | if [ -z "$EXDATE" ] 397 | then 398 | EXP_DAYS=NULL 399 | else 400 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 401 | fi 402 | elif [ "$DTYPE" == "space" ] 403 | then 404 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 405 | if [ -z "$EXDATE_TMP" ] 406 | then 407 | EXP_DAYS=NULL 408 | else 409 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 410 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 411 | fi 412 | elif [ "$DTYPE" == "rocks" ] 413 | then 414 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 415 | if [ -z "$EXDATE_TMP" ] 416 | then 417 | EXP_DAYS=NULL 418 | else 419 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 420 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 421 | fi 422 | elif [ "$DTYPE" == "us" ] 423 | then 424 | EXDATE=$(${WHOIS} -h www.whois.us "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 425 | if [ -z "$EXDATE" ] 426 | then 427 | EXP_DAYS=NULL 428 | else 429 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 430 | fi 431 | elif [ "$DTYPE" == "in" ] 432 | then 433 | EXDATE=$(${WHOIS} -h whois.registry.in "${1}" | ${AWK} '/Registry Expiry Date:/ { gsub("[:.]","-"); print $4 }' | cut -d 'T' -f1) 434 | if [ -z "$EXDATE" ] 435 | then 436 | EXP_DAYS=NULL 437 | else 438 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 439 | fi 440 | elif [ "$DTYPE" == "mx" ] 441 | then 442 | EXDATE_TMP=$(${WHOIS} "${1}" | ${AWK} '/Expiration Date:/ { print $3 }') 443 | if [ -z "$EXDATE_TMP" ] 444 | then 445 | EXP_DAYS=NULL 446 | else 447 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 448 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 449 | fi 450 | elif [ "$DTYPE" == "fm" ] 451 | then 452 | EXDATE_TMP=$(${WHOIS} -h whois.nic.fm "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 453 | if [ -z "$EXDATE_TMP" ] 454 | then 455 | EXP_DAYS=NULL 456 | else 457 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 458 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 459 | fi 460 | elif [ "$DTYPE" == "xyz" ] 461 | then 462 | EXDATE_TMP=$(${WHOIS} -h whois.nic.xyz "${1}" | ${AWK} '/Registry Expiry Date:/ { print $4 }' | cut -c 1-16) 463 | if [ -z "$EXDATE_TMP" ] 464 | then 465 | EXP_DAYS=NULL 466 | else 467 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 468 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 469 | fi 470 | elif [ "$DTYPE" = "is" ] 471 | then 472 | EXDATE_TMP=$(${WHOIS} -h whois.isnic.is "${1}" | ${AWK} 'BEGIN { FS=":"} ; /expires:/ { print $2 }' | cut -c 7-) 473 | if [ -z "$EXDATE_TMP" ] 474 | then 475 | EXP_DAYS=NULL 476 | else 477 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 478 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 479 | fi 480 | else 481 | echo "UNKNOWN - "$DTYPE" unsupported" 482 | exit 3 483 | fi 484 | } 485 | 486 | # Check function for a specific whois 487 | check_domain_by_whois() 488 | { 489 | # Set domain 490 | DOMAIN=$1 491 | SERVER=$2 492 | 493 | if [ "$SERVER" == "whois.crazydomains.com" ] 494 | then 495 | EXDATE_TMP=$(${WHOIS} -h ${SERVER} "${DOMAIN}" | grep -i 'Expiration Date' | ${AWK} '{ print $5 }' ) 496 | if [ -z "$EXDATE_TMP" ] 497 | then 498 | EXP_DAYS=NULL 499 | else 500 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 501 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 502 | fi 503 | 504 | 505 | elif [ "$SERVER" == "whois.cloudflare.com" ] 506 | then 507 | EXDATE_TMP=$(${WHOIS} -h ${SERVER} "${DOMAIN}" | grep -i 'Expiration Date' | ${AWK} '{ print $5 }' ) 508 | if [ -z "$EXDATE_TMP" ] 509 | then 510 | EXP_DAYS=NULL 511 | else 512 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 513 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 514 | fi 515 | 516 | elif [ "$SERVER" == "whois.drs.ua" -o "$SERVER" == "whois.pp.ua" -o "$SERVER" == "whois.biz.ua" ] 517 | then 518 | EXDATE_TMP=$(${WHOIS} -h ${SERVER} "${DOMAIN}" | awk '/Expiration Date:/ { gsub("[:.]"," "); print $3 }' ) 519 | if [ -z "$EXDATE_TMP" ] 520 | then 521 | EXP_DAYS=NULL 522 | else 523 | EXDATE=`date -d"$EXDATE_TMP" +%Y-%m-%d` 524 | EXP_DAYS=$(( ( $(date -ud ${EXDATE} +'%s') - $(date -ud `date +%Y-%m-%d` +'%s') )/60/60/24 )) 525 | fi 526 | 527 | else 528 | echo "UNKNOWN - "$SERVER" unsupported" 529 | exit 3 530 | fi 531 | } 532 | 533 | # Help function 534 | help() 535 | { 536 | echo "Usage: $0 [ -d domain_name ] [ -s whois_server ] [ -w ex_days ] [ -c ex_days ] [ -h ]" 537 | echo 538 | echo " -d domain : Domain to check" 539 | echo " -s whois server : Whois server to query by" 540 | echo " -h : Show help" 541 | echo " -w days : Domain expiration days (warning)" 542 | echo " -c days : Domain expiration days (critical)" 543 | echo 544 | } 545 | 546 | while getopts :hd:s:w:c: option 547 | do 548 | case "${option}" 549 | in 550 | d) DOMAIN=$( echo ${OPTARG} );; 551 | s) SERVER=$OPTARG;; 552 | w) WARNING=$OPTARG;; 553 | c) ALARM=$OPTARG;; 554 | h | *) help 555 | exit 3;; 556 | esac 557 | done 558 | 559 | # check whether ALARM is greater or equal WARNING 560 | if [ $ALARM -ge $WARNING ] 561 | then 562 | echo "UNKNOWN - CRITICAL threshold cannot be bigger than WARNING" 563 | exit 3 564 | fi 565 | 566 | if [ "${SERVER:=auto}" == auto ] 567 | then 568 | check_domain "${DOMAIN}" 569 | else 570 | check_domain_by_whois "${DOMAIN}" "${SERVER}" 571 | fi 572 | 573 | # exit codes based on the check_domain result 574 | 575 | if ! [[ "$EXP_DAYS" =~ ^-?[0-9]+$ ]] 576 | then 577 | echo "UNKNOWN - ${DOMAIN}: expiration date has not been provided by WHOIS server" 578 | exit 3 579 | else 580 | if [ $EXP_DAYS -gt $WARNING ] 581 | then 582 | echo "OK - ${DOMAIN}: $EXP_DAYS days until domain expires" 583 | exit 0 584 | elif [ $EXP_DAYS -le $WARNING -a $EXP_DAYS -gt $ALARM ] 585 | then 586 | echo "WARNING - ${DOMAIN}: $EXP_DAYS days until domain expires" 587 | exit 1 588 | elif [ $EXP_DAYS -le $ALARM -a $EXP_DAYS -gt 0 ] 589 | then 590 | echo "CRITICAL - ${DOMAIN}: $EXP_DAYS days until domain expires" 591 | exit 2 592 | elif [ $EXP_DAYS -lt 0 ] 593 | then 594 | echo "CRITICAL - ${DOMAIN}: domain has expired!" 595 | exit 2 596 | else 597 | echo "UNKNOWN - ${DOMAIN}: $EXP_DAYS" 598 | exit 3 599 | fi 600 | fi 601 | -------------------------------------------------------------------------------- /commands/icinga2.conf: -------------------------------------------------------------------------------- 1 | # Here is the example of the command configuration. 2 | # You can create your own or use the following example. 3 | 4 | object CheckCommand "check_domain_expiration" { 5 | import "plugin-check-command" 6 | 7 | command = [ CustomPluginDir + "/check_domain_expiration.sh" ] 8 | 9 | arguments = { 10 | "-d" = { value = "$domain_check$" } 11 | "-s" = { value = "$domain_server$" } 12 | "-w" = { value = "$domain_warning$" } 13 | "-c" = { value = "$domain_critical$" } 14 | } 15 | 16 | vars.domain_server = "auto" 17 | vars.domain_warning = 30 18 | vars.domain_critical = 7 19 | } 20 | 21 | -------------------------------------------------------------------------------- /commands/nagios.cfg: -------------------------------------------------------------------------------- 1 | # example of command definition for Nagios 2 | 3 | define command{ 4 | command_name check_domain_expiration 5 | command_line /usr/local/nagios/libexec/check_domain_expiration -d $HOSTNAME$ -s WHOIS_SERVER -w $ARG1$ -c $ARG2$ 6 | } 7 | -------------------------------------------------------------------------------- /icingaexchange.yml: -------------------------------------------------------------------------------- 1 | name: check_domain_expiration 2 | description: "file:///README.md" 3 | url: "https://github.com/ewypych/icinga-domain-expiration-plugin" 4 | tags: Domain, Expiration, Network, Monitoring, Whois 5 | vendor: Linux, Centos, Debian 6 | target: Network, Website 7 | type: Plugin 8 | license: MIT 9 | releases: 10 | - 11 | name: 1.0.0 12 | description: "1.0.0 Release" 13 | files: 14 | - 15 | name: check_domain_expiration.sh 16 | url: "file:///check_domain_expiration.sh" 17 | description: "First release" 18 | checksum: 4ecc143ed6733b44379af44853cd2886 19 | - 20 | name: icinga2.conf 21 | url: "file:///commands/icinga2.conf" 22 | description: "Example of config for Icinga2" 23 | checksum: 8afa3191089d3d6c7d90aecf043f26d3 24 | - 25 | name: nagios.cfg 26 | url: "file:///commands/nagios.cfg" 27 | description: "Example of config for Nagios" 28 | checksum: 5908b41e04a00dc30463dae71746eb9f 29 | --------------------------------------------------------------------------------