Imported Upstream version 2.7
[ossec-hids.git] / contrib / util.sh
1 #!/bin/sh
2 # Simple utilities
3 # Add a new file
4 # Add a new remote host to be monitored via lynx
5 # Add a new remote host to be monitored (DNS)
6 # Add a new command to be monitored
7 # by Daniel B. Cid - dcid ( at ) ossec.net
8
9 ACTION=$1
10 FILE=$2
11 FORMAT=$3
12
13 if [ "X$FILE" = "X" ]; then
14     echo "$0: addfile <filename> [<format>]"
15     echo "$0: addsite <domain>"
16     echo "$0: adddns  <domain>"
17     #echo "$0: addcommand <command>"
18     echo ""
19     #echo "Example: $0 addcommand 'netstat -tan |grep LISTEN| grep -v 127.0.0.1'"
20     echo "Example: $0 adddns ossec.net"
21     echo "Example: $0 addsite dcid.me"
22     exit 1;
23 fi
24
25 if [ "X$FORMAT" = "X" ]; then
26     FORMAT="syslog"
27 fi
28
29 # Adding a new file
30 if [ $ACTION = "addfile" ]; then
31     # Checking if file is already configured
32     grep "$FILE" /var/ossec/etc/ossec.conf > /dev/null 2>&1
33     if [ $? = 0 ]; then
34         echo "$0: File $FILE already configured at ossec."
35         exit 1;
36     fi
37
38     # Checking if file exist
39     ls -la $FILE > /dev/null 2>&1
40     if [ ! $? = 0 ]; then
41         echo "$0: File $FILE does not exist."
42         exit 1;
43     fi     
44     
45     echo "
46     <ossec_config>
47       <localfile>
48       <log_format>$FORMAT</log_format>
49       <location>$FILE</location>
50      </localfile>
51    </ossec_config>  
52    " >> /var/ossec/etc/ossec.conf
53
54    echo "$0: File $FILE added.";
55    exit 0;            
56 fi
57
58
59 # Adding a new DNS check
60 if [ $ACTION = "adddns" ]; then
61    COMMAND="host -W 5 -t NS $FILE; host -W 5 -t A $FILE | sort"
62    echo $FILE | grep -E '^[a-z0-9A-Z.-]+$' >/dev/null 2>&1
63    if [ $? = 1 ]; then
64       echo "$0: Invalid domain: $FILE"
65       exit 1;
66    fi
67
68    grep "host -W 5 -t NS $FILE" /var/ossec/etc/ossec.conf >/dev/null 2>&1
69    if [ $? = 0 ]; then
70        echo "$0: Already configured for $FILE"
71        exit 1;
72    fi
73
74    MYERR=0
75    echo "
76    <ossec_config>
77    <localfile>
78      <log_format>full_command</log_format>
79      <command>$COMMAND</command>
80    </localfile>
81    </ossec_config>
82    " >> /var/ossec/etc/ossec.conf || MYERR=1;
83
84    if [ $MYERR = 1 ]; then
85        echo "$0: Unable to modify the configuration file."; 
86        exit 1;
87    fi
88
89    FIRSTRULE="150010"
90    while [ 1 ]; do
91        grep "\"$FIRSTRULE\"" /var/ossec/rules/local_rules.xml > /dev/null 2>&1
92        if [ $? = 0 ]; then
93            FIRSTRULE=`expr $FIRSTRULE + 1`
94        else
95            break;
96        fi
97    done
98
99
100    echo "
101    <group name=\"local,dnschanges,\">
102    <rule id=\"$FIRSTRULE\" level=\"0\">
103      <if_sid>530</if_sid>
104      <check_diff />
105      <match>^ossec: output: 'host -W 5 -t NS $FILE</match>
106      <description>DNS Changed for $FILE</description>
107    </rule>
108    </group>
109    " >> /var/ossec/rules/local_rules.xml || MYERR=1;
110
111    if [ $MYERR = 1 ]; then
112        echo "$0: Unable to modify the local rules file.";
113        exit 1;
114    fi
115
116    echo "Domain $FILE added to be monitored."
117    exit 0;
118 fi
119
120
121 # Adding a new lynx check
122 if [ $ACTION = "addsite" ]; then
123    COMMAND="lynx --connect_timeout 10 --dump $FILE | head -n 10"
124    echo $FILE | grep -E '^[a-z0-9A-Z.-]+$' >/dev/null 2>&1
125    if [ $? = 1 ]; then
126       echo "$0: Invalid domain: $FILE"
127       exit 1;
128    fi
129
130    grep "lynx --connect_timeout 10 --dump $FILE" /var/ossec/etc/ossec.conf >/dev/null 2>&1
131    if [ $? = 0 ]; then
132        echo "$0: Already configured for $FILE"
133        exit 1;
134    fi
135
136    MYERR=0
137    echo "
138    <ossec_config>
139    <localfile>
140      <log_format>full_command</log_format>
141      <command>$COMMAND</command>
142    </localfile>
143    </ossec_config>
144    " >> /var/ossec/etc/ossec.conf || MYERR=1;
145
146    if [ $MYERR = 1 ]; then
147        echo "$0: Unable to modify the configuration file."; 
148        exit 1;
149    fi
150
151    FIRSTRULE="150010"
152    while [ 1 ]; do
153        grep "\"$FIRSTRULE\"" /var/ossec/rules/local_rules.xml > /dev/null 2>&1
154        if [ $? = 0 ]; then
155            FIRSTRULE=`expr $FIRSTRULE + 1`
156        else
157            break;
158        fi
159    done
160
161
162    echo "
163    <group name=\"local,sitechange,\">
164    <rule id=\"$FIRSTRULE\" level=\"0\">
165      <if_sid>530</if_sid>
166      <check_diff />
167      <match>^ossec: output: 'lynx --connect_timeout 10 --dump $FILE</match>
168      <description>DNS Changed for $FILE</description>
169    </rule>
170    </group>
171    " >> /var/ossec/rules/local_rules.xml || MYERR=1;
172
173    if [ $MYERR = 1 ]; then
174        echo "$0: Unable to modify the local rules file.";
175        exit 1;
176    fi
177
178    echo "Domain $FILE added to be monitored."
179    exit 0;
180 fi
181
182