wok annotate knock/stuff/usr/sbin/knockd-helper @ rev 6336
Up: seamonkey to 2.0.8.
author | Christopher Rogers <slaxemulator@gmail.com> |
---|---|
date | Sun Sep 19 02:07:12 2010 +0000 (2010-09-19) |
parents | 23fde46c8679 |
children | 216fe5c85b71 |
rev | line source |
---|---|
pascal@4736 | 1 #!/bin/sh |
pascal@4736 | 2 |
pascal@4736 | 3 IP=$2 |
pascal@4736 | 4 PROT=$3 |
pascal@4736 | 5 PORT=$4 |
pascal@4736 | 6 |
pascal@4736 | 7 [ -d /var/lib/knockd ] || mkdir -p /var/lib/knockd |
pascal@4736 | 8 |
pascal@4736 | 9 disable() |
pascal@4736 | 10 { |
pascal@4736 | 11 while read IP PROT PORT MSG; do |
pascal@4736 | 12 iptables -t nat -D PREROUTING -s $IP -p $PROT --dport $PORT -j RETURN |
pascal@4736 | 13 iptables -D INPUT -s $IP -p $PROT --dport $PORT -j ACCEPT |
pascal@4736 | 14 logger "Disable $PROT:$PORT for $IP $MSG" |
pascal@4736 | 15 done < $1 |
pascal@4736 | 16 rm -rf $1 |
pascal@4736 | 17 } |
pascal@4736 | 18 |
pascal@4736 | 19 case "$1" in |
pascal@4736 | 20 on) |
pascal@4736 | 21 shift |
pascal@4736 | 22 echo "$@" >> /var/lib/knockd/$IP |
pascal@4736 | 23 iptables -t nat -I PREROUTING -s $IP -p $PROT --dport $PORT -j RETURN |
pascal@4736 | 24 iptables -I INPUT -s $IP -p $PROT --dport $PORT -j ACCEPT |
pascal@4736 | 25 shift 3 |
pascal@4737 | 26 logger "Enable $PROT:$PORT for $IP $@" |
pascal@4736 | 27 ;; |
pascal@4736 | 28 off) |
pascal@4736 | 29 [ -f /var/lib/knockd/$IP ] && disable /var/lib/knockd/$IP |
pascal@4736 | 30 ;; |
pascal@4736 | 31 check) |
pascal@4736 | 32 TIMEOUT=$(( 6 * 60 )) |
pascal@4736 | 33 for i in /var/lib/knockd/*.*.*.*; do |
pascal@4736 | 34 [ -f "$i" ] || continue |
pascal@4736 | 35 while read ip prot port msg; do |
pascal@4736 | 36 if grep -qe "^$prot.* src=$ip .* dport=$port" /proc/net/ip_conntrack ; then |
pascal@4736 | 37 touch $i |
pascal@4736 | 38 break |
pascal@4736 | 39 fi |
pascal@4736 | 40 done < $i |
pascal@4736 | 41 [ $(date "+%s") -gt $(( $(date -r $i "+%s") + $TIMEOUT )) ] && |
pascal@4736 | 42 disable $i |
pascal@4736 | 43 done |
pascal@4736 | 44 ;; |
pascal@4736 | 45 purge) |
pascal@4736 | 46 for i in /var/lib/knockd/*.*.*.*; do |
pascal@4736 | 47 [ -f "$i" ] && disable $i |
pascal@4736 | 48 done |
pascal@4736 | 49 ;; |
pascal@4736 | 50 cron) |
pascal@4736 | 51 crontab -l 2> /dev/null | grep -q $0 || { |
pascal@4736 | 52 crontab - <<EOT |
pascal@4736 | 53 $(crontab -l) |
pascal@4736 | 54 |
pascal@4736 | 55 # Close old connections opened by knockd |
pascal@4736 | 56 */5 * * * * $0 check > /dev/null 2>&1 |
pascal@4736 | 57 EOT |
pascal@4736 | 58 /etc/init.d/crond stop |
pascal@4736 | 59 /etc/init.d/crond start |
pascal@4736 | 60 } |
pascal@4736 | 61 ;; |
pascal@4737 | 62 *) |
pascal@4737 | 63 PROG=$(basename $0) |
pascal@4737 | 64 cat <<EOT |
pascal@4737 | 65 Usage: $PROG [on|off|check|purge|cron] [args...] |
pascal@4737 | 66 |
pascal@4737 | 67 $PROG on ip_address protocol port enable access |
pascal@4737 | 68 $PROG off ip_address disable access |
pascal@4737 | 69 $PROG check verify timeouts |
pascal@4737 | 70 $PROG purge disable all accesses |
pascal@4737 | 71 $PROG cron install auto disable access |
pascal@4737 | 72 |
pascal@4737 | 73 Example for /etc/knockd.conf file : |
pascal@4737 | 74 |
pascal@4737 | 75 [options] |
pascal@4737 | 76 PidFile = /var/run/knockd.pid |
pascal@4737 | 77 logfile = /var/log/knockd.log |
pascal@4737 | 78 |
pascal@4737 | 79 [openSSH] |
pascal@4737 | 80 sequence = 7000,8000,9000 |
pascal@4737 | 81 seq_timeout = 5 |
pascal@4737 | 82 command = /usr/sbin/knockd-helper on %IP% tcp 22 |
pascal@4737 | 83 tcpflags = syn |
pascal@4737 | 84 EOT |
pascal@4737 | 85 exit 1 |
pascal@4737 | 86 ;; |
pascal@4736 | 87 esac |