Logging is designed as a service plug-in that captures events for relevant resources (for example, security groups or firewalls) when they occur.
As of the Queens release, the security_group
resource type is supported.
To enable the service, follow the steps below.
On Neutron server node:
Add the Logging service to the service_plugins
setting in
/etc/neutron/neutron.conf
. For example:
service_plugins = router,metering,log
Add the Logging extension to the extensions
setting in
/etc/neutron/plugins/ml2/ml2_conf.ini
. For example:
[agent]
extensions = log
On compute/network nodes:
In /etc/neutron/plugins/ml2/openvswitch_agent.ini
, add log
to the extensions
setting in the [agent]
section. For example:
[agent]
extensions = log
In /etc/neutron/plugins/ml2/openvswitch_agent.ini
, add configuration
options for logging feature in the [network_log]
section. For example:
[network_log]
rate_limit = 100
burst_limit = 25
#local_output_log_base = <None>
In which, rate_limit
is used to configure the maximum number of packets
to be logged per second (packets per second). When a high rate triggers
rate_limit
, logging queues packets to be logged. burst_limit
is used
to configure the maximum of queued packets. And logged data can be stored
anywhere by using local_output_log_base
.
Note
openvswitch
firewall driver only.rate_limit
and at least 25 for burst_limit
.rate_limit
is unset, logging will log unlimited.local_output_log_base
, logged data will be stored
in system journal like /var/log/syslog
.With the default /etc/neutron/policy.json
, administrators must
set up resource logging on behalf of the cloud projects.
If projects are trusted to administer their own resource logging in your cloud,
neutron’s file policy.json
can be modified to allow this.
Modify /etc/neutron/policy.json
policy entries as follows:
"get_loggable_resources": "rule:regular_user",
"create_log": "rule:regular_user",
"update_log": "rule:regular_user",
"delete_log": "rule:regular_user",
"get_logs": "rule:regular_user",
"get_log": "rule:regular_user",
Confirm logging resources are supported:
$ openstack network loggable resources list
+-----------------+
| Supported types |
+-----------------+
| security_group |
+-----------------+
Create a logging resource with an appropriate resource type:
$ openstack network log create --resource-type security_group \
--description "Collecting all security events in project demo" \
--enable --event ALL Log_Created
+-----------------+------------------------------------------------+
| Field | Value |
+-----------------+------------------------------------------------+
| Description | Collecting all security events in project demo |
| Enabled | True |
| Event | ALL |
| ID | 8085c3e6-0fa2-4954-b5ce-ff6207931b6d |
| Name | Log_Created |
| Project | 02568bd62b414221956f15dbe9527d16 |
| Resource | None |
| Target | None |
| Type | security_group |
| created_at | 2017-07-05T02:56:43Z |
| revision_number | 0 |
| tenant_id | 02568bd62b414221956f15dbe9527d16 |
| updated_at | 2017-07-05T02:56:43Z |
+-----------------+------------------------------------------------+
Note
The Enabled
field is set to True
by default. If enabled,
log information is written to the destination if configured in
local_output_log_base
or system journal like /var/log/syslog
.
We can enable or disable logging objects at runtime. It means that it will apply to all attached ports with the logging object immediately.
For example:
$ openstack network log set --disable Log_Created
$ openstack network log show Log_Created
+-----------------+------------------------------------------------+
| Field | Value |
+-----------------+------------------------------------------------+
| Description | Collecting all security events in project demo |
| Enabled | False |
| Event | ALL |
| ID | 8085c3e6-0fa2-4954-b5ce-ff6207931b6d |
| Name | Log_Created |
| Project | 02568bd62b414221956f15dbe9527d16 |
| Resource | None |
| Target | None |
| Type | security_group |
| created_at | 2017-07-05T02:56:43Z |
| revision_number | 1 |
| tenant_id | 02568bd62b414221956f15dbe9527d16 |
| updated_at | 2017-07-05T03:12:01Z |
+-----------------+------------------------------------------------+
Logging will collect ACCEPT
or DROP
or both events related to security group,
with the following general characteristics:
DROP
event: Every DROP
security event will be generated when
an incoming or outgoing session is dropped, that is the new session is not
allowed for the security group and because of that blocked.ACCEPT
event: An ACCEPT
security event will be generated for each
NEW incoming or outgoing session that is allowed by the ports security group.
More details for the events follow below:ACCEPT
: For a North/South session there would be a single ACCEPT
event irrespective of direction.ACCEPT
/ACCEPT
: In an intra-project East/West session where the
security group on the originating port allows the session and the security
group on the destination port allows the session, i.e. the traffic is allowed,
there would be two ACCEPT
security events generated, one from the perspective
of the originating port and one from the perspective of the destination port.ACCEPT
/DROP
: In an intra-project East/West session initiation
where the security group on the originating port allows the session and the
security group on the destination port does not allow the session there would
be ACCEPT
security events generated from the perspective of the originating
port and DROP
security events generated from the perspective of the
destination port.General data requirements: The security event should include:
ACCEPT
/DROP
.Note
No other extraneous events are generated within the security event logs, e.g. no debugging data, etc.
Security event record format:
ACCEPT
event would look like:May 5 09:05:07 action=ACCEPT project_id=736672c700cd43e1bd321aeaf940365c
log_resource_ids=['4522efdf-8d44-4e19-b237-64cafc49469b', '42332d89-df42-4588-a2bb-3ce50829ac51']
vm_port=e0259ade-86de-482e-a717-f58258f7173f
ethernet(dst='fa:16:3e:ec:36:32',ethertype=2048,src='fa:16:3e:50:aa:b5'),
ipv4(csum=62071,dst='10.0.0.4',flags=2,header_length=5,identification=36638,offset=0,
option=None,proto=6,src='172.24.4.10',tos=0,total_length=60,ttl=63,version=4),
tcp(ack=0,bits=2,csum=15097,dst_port=80,offset=10,option=[TCPOptionMaximumSegmentSize(kind=2,length=4,max_seg_size=1460),
TCPOptionSACKPermitted(kind=4,length=2), TCPOptionTimestamps(kind=8,length=10,ts_ecr=0,ts_val=196418896),
TCPOptionNoOperation(kind=1,length=1), TCPOptionWindowScale(kind=3,length=3,shift_cnt=3)],
seq=3284890090,src_port=47825,urgent=0,window_size=14600)
DROP
event:May 5 09:05:07 action=DROP project_id=736672c700cd43e1bd321aeaf940365c
log_resource_ids=['4522efdf-8d44-4e19-b237-64cafc49469b'] vm_port=e0259ade-86de-482e-a717-f58258f7173f
ethernet(dst='fa:16:3e:ec:36:32',ethertype=2048,src='fa:16:3e:50:aa:b5'),
ipv4(csum=62071,dst='10.0.0.4',flags=2,header_length=5,identification=36638,offset=0,
option=None,proto=6,src='172.24.4.10',tos=0,total_length=60,ttl=63,version=4),
tcp(ack=0,bits=2,csum=15097,dst_port=80,offset=10,option=[TCPOptionMaximumSegmentSize(kind=2,length=4,max_seg_size=1460),
TCPOptionSACKPermitted(kind=4,length=2), TCPOptionTimestamps(kind=8,length=10,ts_ecr=0,ts_val=196418896),
TCPOptionNoOperation(kind=1,length=1), TCPOptionWindowScale(kind=3,length=3,shift_cnt=3)],
seq=3284890090,src_port=47825,urgent=0,window_size=14600)
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.