summaryrefslogtreecommitdiffstats
path: root/security/ossec-hids-local/files/ossec-hids.in
diff options
context:
space:
mode:
Diffstat (limited to 'security/ossec-hids-local/files/ossec-hids.in')
-rw-r--r--security/ossec-hids-local/files/ossec-hids.in156
1 files changed, 100 insertions, 56 deletions
diff --git a/security/ossec-hids-local/files/ossec-hids.in b/security/ossec-hids-local/files/ossec-hids.in
index 08efa1d..d49f01d 100644
--- a/security/ossec-hids-local/files/ossec-hids.in
+++ b/security/ossec-hids-local/files/ossec-hids.in
@@ -5,15 +5,18 @@
# BEFORE: LOGIN
# KEYWORD: shutdown
-# ossec_hids_enable (bool): Set it to YES to enable %%PORTNAME%%.
-# Default: NO
-# ossec_hids_clear_log (bool): Set it to YES to clear ossec.log before %%PORTNAME%% startup.
-# Default: NO
-# ossec_hids_clear_ar_log (bool): Set it to YES to clear active-responses.log before %%PORTNAME%% startup.
-# Default: NO
-# ossec_hids_fetch_time (int): Time in seconds to wait for the shared configuration to be downloaded from the server.
-# Used only by agent installation.
-# Default: 60
+# ossec_hids_enable (bool): Set it to YES to enable %%PORTNAME%%.
+# Default: NO
+# ossec_hids_clear_log (bool): Set it to YES to clear ossec.log before %%PORTNAME%% startup.
+# Default: NO
+# ossec_hids_clear_ar_log (bool): Set it to YES to clear active-responses.log before %%PORTNAME%% startup.
+# Default: NO
+# ossec_hids_fetch_connect_time (int): Time in seconds to wait for the download of the shared configuration to start.
+# Used only by agent installation.
+# Default: 20
+# ossec_hids_fetch_read_time (int): Time in seconds to wait for subsequent download chunks of the shared configuration.
+# Used only by agent installation.
+# Default: 5
. /etc/rc.subr
@@ -25,7 +28,8 @@ load_rc_config $name
: ${ossec_hids_enable="NO"}
: ${ossec_hids_clear_log="NO"}
: ${ossec_hids_clear_ar_log="NO"}
-: ${ossec_hids_fetch_time=60}
+: ${ossec_hids_fetch_connect_time=20}
+: ${ossec_hids_fetch_read_time=5}
ossec_type="%%OSSEC_TYPE%%"
ossec_home="%%OSSEC_HOME%%"
@@ -46,16 +50,13 @@ ossec_merged="${ossec_home}/etc/shared/merged.mg"
ossec_local_time="/etc/localtime"
-ossec_fts_queue="${ossec_home}/queue/fts/fts-queue"
-ossec_ig_queue="${ossec_home}/queue/fts/ig-queue"
-
extra_commands="reload ossec_conf"
case ${ossec_type} in
server)
- extra_commands="${extra_commands} agent_conf"
+ extra_commands="${extra_commands} agent_conf reset_counter"
;;
agent)
- extra_commands="${extra_commands} fetch_config"
+ extra_commands="${extra_commands} fetch_config reset_counter"
;;
esac
if [ -x "${ossec_conf_bin}" ]; then
@@ -67,14 +68,16 @@ stop_cmd="ossec_hids_command stop"
restart_cmd="ossec_hids_command restart"
status_cmd="ossec_hids_command status"
reload_cmd="ossec_hids_command reload"
+reset_counter_cmd="ossec_hids_command start"
fetch_config_cmd="ossec_hids_command restart"
-merge_config_cmd="ossec_hids_create_configs force"
+merge_config_cmd="ossec_hids_create_config force"
ossec_conf_cmd="ossec_hids_ossec_conf"
agent_conf_cmd="ossec_hids_agent_conf"
start_precmd="ossec_hids_prepare"
restart_precmd="ossec_hids_prepare"
reload_precmd="ossec_hids_prepare"
+reset_counter_precmd="ossec_hids_prepare"
fetch_config_precmd="ossec_hids_prepare"
ossec_hids_create_file() {
@@ -91,12 +94,14 @@ ossec_hids_check() {
case ${ossec_type} in
server)
if [ ! -s "${ossec_client_keys}" ]; then
- echo "WARNING: There are no client keys created - remote connections will be disabled"
+ echo "WARNING: There are no client keys created - remote connections will be disabled."
+ echo
fi
;;
agent)
if [ ! -s "${ossec_client_keys}" ]; then
- echo "WARNING: There are is no client key imported - connection to server not possible"
+ echo "WARNING: There are is no client key imported - connection to server not possible."
+ echo
fi
;;
esac
@@ -121,7 +126,7 @@ ossec_hids_config_is_outdated() {
return 1
}
-ossec_hids_create_configs() {
+ossec_hids_create_config() {
case ${ossec_type} in
server)
if [ -x "${agent_conf_bin}" ]; then
@@ -132,10 +137,6 @@ ossec_hids_create_configs() {
fi
fi
;;
- agent)
- # Touch agent.conf so the agent daemons won't complain if it doesn't exist
- ossec_hids_create_file "${agent_conf}" %%OSSEC_USER%%:%%OSSEC_GROUP%% 0644
- ;;
esac
if [ -x "${ossec_conf_bin}" ]; then
@@ -149,30 +150,15 @@ ossec_hids_create_configs() {
return 0
}
-ossec_hids_create_logs() {
- # Create required log files if they don't exist
- ossec_hids_create_file "${ossec_log}" %%OSSEC_USER%%:%%OSSEC_GROUP%% 0660
- ossec_hids_create_file "${ossec_ar_log}" %%OSSEC_USER%%:%%OSSEC_GROUP%% 0660
-
- return 0
-}
-
ossec_hids_create_env() {
# Copy required files from outside of home directory
if [ ! -e "${ossec_local_time}" ]; then
- echo "Missing \"${ossec_local_time}\". Run command \"tzsetup\"."
+ echo "ERROR: Missing \"${ossec_local_time}\". Run command \"tzsetup\"."
+ echo
return 1
fi
install -o %%USER%% -g %%OSSEC_GROUP%% -m 0440 "${ossec_local_time}" "${ossec_home}${ossec_local_time}"
- # Install missing files
- case ${ossec_type} in
- server)
- ossec_hids_create_file "${ossec_fts_queue}" %%OSSEC_USER%%:%%OSSEC_GROUP%% 0640
- ossec_hids_create_file "${ossec_ig_queue}" %%OSSEC_USER%%:%%OSSEC_GROUP%% 0640
- ;;
- esac
-
return 0
}
@@ -181,33 +167,86 @@ ossec_hids_clean() {
rm -f "${ossec_merged}"
fi
- if checkyesno ossec_hids_clear_log; then
+ if checkyesno ossec_hids_clear_log && [ -e "${ossec_log}" ]; then
echo -n > "${ossec_log}"
fi
- if checkyesno ossec_hids_clear_ar_log; then
+ if checkyesno ossec_hids_clear_ar_log && [ -e "${ossec_ar_log}" ]; then
echo -n > "${ossec_ar_log}"
fi
return 0
}
-ossec_hids_fetch_configs() {
+ossec_hids_reset_counter() {
+ case ${ossec_type} in
+ local)
+ echo "ERROR: Counters are only available for agent and server installations."
+ echo
+ return 1
+ ;;
+ *)
+ ossec_hids_command status > /dev/null && ossec_hids_command stop && sleep 2 && echo
+ agent_ids=`${ossec_home}/bin/manage_agents -l | sed -En -e 's|.*ID:[[:space:]]*([[:digit:]]+).*|\1|p'`
+ agent_counter=0
+ for agent_id in ${agent_ids}; do
+ rm -f "${ossec_home}/queue/rids/${agent_id}" && agent_counter=$((agent_counter + 1))
+ done
+ echo "Removed ${agent_counter} counter(s)."
+ echo
+ ;;
+ esac
+
+ return 0
+}
+
+ossec_hids_fetch_config() {
case ${ossec_type} in
agent)
+ ossec_hids_command status > /dev/null && ossec_hids_command stop && sleep 2 && echo
rm -f "${ossec_merged}"
- ossec_hids_command stop
- sleep 1
- ossec_hids_command start
- echo "Waiting ${ossec_hids_fetch_time} seconds for the shared configuration to be downloaded from the OSSEC server"
- sleep ${ossec_hids_fetch_time}
+ ossec_hids_command start || return 1
+ echo
+ echo "Waiting ${ossec_hids_fetch_connect_time} seconds for the shared configuration download to start."
+ sleep ${ossec_hids_fetch_connect_time}
if [ ! -s "${ossec_merged}" ]; then
- echo "Failed to download shared configuration from the OSSEC server"
+ echo "ERROR: Failed to download shared configuration from the OSSEC server."
+ echo
+ ossec_log_tail=$(tail "${ossec_log}")
+ echo "Portion of the \"${ossec_log}\":"
+ echo "${ossec_log_tail}"
+ echo
+ if echo "${ossec_log_tail}" | grep -q "ERROR: Unable to send message to"; then
+ echo "Check if your configuration contains the correct server address in \"server-ip\" option."
+ echo
+ fi
+ if echo "${ossec_log_tail}" | grep -q "ERROR: Incorrectly formatted message from"; then
+ echo "If you are certain the imported agent key is correct then execute command:"
+ echo "$(realpath $0) reset_counter"
+ echo "and fetch config again:"
+ echo "$(realpath $0) fetch_config"
+ echo
+ fi
return 1
+ else
+ # The download has started
+ while true; do
+ current_time=$(date +%s)
+ modification_time=$(stat -f %m "${ossec_merged}")
+ if [ $((current_time - modification_time)) -gt ${ossec_hids_fetch_read_time} ]; then
+ echo "Download finished."
+ echo
+ break;
+ else
+ echo "Download in progress..."
+ sleep 10
+ fi
+ done
fi
;;
*)
- echo "Shared configuration is only available for agent installations"
+ echo "ERROR: Shared configuration is only available for agent installations."
+ echo
return 1
;;
esac
@@ -218,23 +257,28 @@ ossec_hids_fetch_configs() {
ossec_hids_prepare() {
case ${rc_arg} in
start|restart)
- ossec_hids_create_logs && \
ossec_hids_create_env && \
- ossec_hids_create_configs && \
+ ossec_hids_create_config && \
+ ossec_hids_clean && \
+ ossec_hids_check || return 1
+ ;;
+ reset_counter)
+ ossec_hids_create_env && \
+ ossec_hids_create_config && \
ossec_hids_clean && \
+ ossec_hids_reset_counter && \
ossec_hids_check || return 1
;;
fetch_config)
- ossec_hids_create_logs && \
ossec_hids_create_env && \
- ossec_hids_create_configs && \
+ ossec_hids_create_config && \
ossec_hids_clean && \
- ossec_hids_fetch_configs && \
+ ossec_hids_fetch_config && \
ossec_hids_check || return 1
;;
reload)
ossec_hids_create_env && \
- ossec_hids_create_configs || return 1
+ ossec_hids_create_config || return 1
;;
esac