Commit Graph

774 Commits (6955c4e7ad290b379c366cf17449b59aedaa805c)

Author SHA1 Message Date
Dustin fd347fa600 roles/jenkins-slave: Prepare host for Jenkins
The *jenkins-slave* role prepares a host to have the Jenkins slave
agent deployed on it. Deploying the agent itself is done by the Jenkins
master, through the web UI.
2018-04-08 11:59:18 -05:00
Dustin 9a2dfa261c pyrocufflink: Configure sudo for server admins
Members of the *Server Admins* AD group need to be able to use `sudo`
for privilege elevation on all domain member servers.
2018-04-08 10:52:08 -05:00
Dustin 984628cbbc roles/samba-dc: Fix typo in host principal name
The service principal name added to `/etc/krb5.keytab` had a trailing
`}` character because of a typo in the Ansible task. This resulted in
GSSAPI authentication failing because server processes could not find
the host key in the key table.
2018-04-08 10:50:51 -05:00
Dustin fff486ca03 pyrocufflink: Ensure winbind is running
Since the first pass of `pyrocufflink.yml` always fails to start the
*winbind* service (since the machine is not yet a member of the domain),
a second pass is required to start it. It can't be started as part of
the *winbind* role, though, since it would fail. As such, it has to be
started at the very end of the play.
2018-04-08 10:13:19 -05:00
Dustin 712d298b38 hostname: Also write /etc/hosts
This commit introduces a new role, *hostname*, that is used by the
`hostname.yml` playbook to set the hostname. It also writes
`/etc/hosts` using a template.
2018-04-08 10:11:43 -05:00
Dustin 66339a827d ci: Add Jenkinsfile for domain controllers 2018-04-07 22:57:22 -05:00
Dustin ef52097095 ci: Update known_hosts 2018-04-07 22:57:15 -05:00
Dustin 6bc55cfb45 hosts: Remove hard-coded IP addresses
Now that DNS is up and running on the blue network, these hosts no
longer need their IP addresses in the inventory. These were wrong,
anyway.
2018-04-07 22:57:15 -05:00
Dustin 2272a9fedc ci: Begin continuous integration setup 2018-04-07 17:06:32 -05:00
Dustin 87b9b0c60d dch-gw: Allow outbound NTP 2018-04-07 09:40:50 -05:00
Dustin ef2b31880b dch-gw: Allow outbound DHCP
Connection Tracking does not work for DHCP messages, since many are
broadcast. As such, the firewall must explicitly allow datagrams
destined for the DHCP client port.
2018-04-07 09:39:22 -05:00
Dustin de5aa114d1 dch-network: Use dns0.pyrocufflink.blue everywhere
All internal networks (except Guest) now use *dns0.pyrocufflink.blue*
for DNS resolution.
2018-04-06 20:40:22 -05:00
Dustin 2d8bb54ba9 gw0: Use internal DNS 2018-04-06 20:38:11 -05:00
Dustin b5620631ff dch-gw: Add IPv6 ULA prefix to pyrocufflink.blue
For internal services, particularly DNS, it is easier to use a ULA
prefix than rely exclusively on routed addresses, since these can change
relatively frequently.
2018-04-06 20:36:30 -05:00
Dustin 2bc6bc69f3 dch-gw: Fix network address for pyrocufflink.red 2018-04-06 20:35:52 -05:00
Dustin 452a030b9d dch-gw: Remove Malfurion
Malfurion (second pyrocufflink.jazz Active Directory Domain Controller)
is currently offline.
2018-04-06 20:35:04 -05:00
Dustin 5c8a552eb2 fixup-dns 2018-04-06 20:31:18 -05:00
Dustin 3edf038e5e dch-gw: Change pyrocufflink.blue SLA ID
When specifying a SLA ID of "0", *dhcpcd* uses the whole delegated
subnet (i.e. /56 instead of /64).
2018-04-06 20:24:53 -05:00
Dustin 14440840e2 dch-gw: Clean up DNS/NTP address enumerations
Instead of listing the addresses for DNS and NTP servers again in the
DHCP server configuration, these are now taken from the canonical
definitions in the `dch_networks` variable.
2018-04-06 20:21:34 -05:00
Dustin e8ff331acc dch-gw: Update radvd_interfaces for multi-prefix
The *radvd* role now supports/requires specifying a list of prefixes for
each interface.
2018-04-06 20:19:09 -05:00
Dustin 2d5a614633 roles/radvd: Support multiple prefixes per network
It is occasionally necessary to advertise multiple prefixes on the same
interface, particularly when those prefixes are not on-link. The *radvd*
role thus now expects each item in `radvd_interfaces` list to have a
`prefixes` property, which itself is a list of prefixes to advertise.
Prefixes can specify properties such as `on_link`, `autonomous`,
`preferred_lifetime`, etc.
2018-04-06 20:16:02 -05:00
Dustin b83e832df9 roles/dch-gw: Explicitly accept forwarded ports
Marking packets matching port-forwarding rules, and then allowing
traffic carrying that mark did not seem to work well. Often, packets
seemed to get dropped for no apparent reason, and outside connections to
NAT'd services was sometimes slow as a result. Explicitly listing every
destination host/port in the `forward` table seems to resolve this
issue.
2018-04-06 20:13:03 -05:00
Dustin e9c9445a96 roles/named: Support global forwarders
The *named* role now supports configuring BIND to use forwarders for
recursive queries instead of or in addition to the root nameservers.
2018-04-06 20:11:08 -05:00
Dustin a0a4b91faf roles/dch-gw: Configure the filter table
The *filter* table is responsible for deciding which packets will be
accepted and which will be rejected. It has three chains, which classify
packets according to whether they are destined for the local machine
(input), passing through this machine (forward) or originating from the
local machine (output).

The *dch-gw* role now configures all three chains in this table. For
now, it defines basic rules, mostly based on TCP/UDP destination port:

* Traffic destined for a service hosted by the local machine (DNS, DHCP,
  SSH), is allowed if it does not come from the Internet
* Traffic passing through the machine is allowed if:
  * It is passing between internal networks
  * It is destined for a host on the FireMon network (VPN)
  * It was NATed to in internal host (marked 323)
  * It is destined for the Internet
* Only DHCP, HTTP, and DNS are allowed to originate from the local
machine

This configuration requires an `internet_iface` variable, which
indicates the name of the network interface connected to the Internet
directly.
2018-03-29 10:06:30 -05:00
Dustin da5da95894 hosts: add gw0 2018-03-29 07:52:20 -05:00
Dustin c5e3c861ab roles/dch-gw: Ensure dhcpcd starts after network
`dhcpcd` needs to start after the `network` service has started, as the
latter creates the interfaces to which the former needs to delegate IPv6
prefixes.
2018-03-29 07:52:20 -05:00
Dustin 51acc08d3c roles/rhel-network: Add static route support 2018-03-27 20:44:43 -05:00
Dustin a7ac6c586d dch-gw: Initial commit
The *dch-gw* role, and the corresponding `dch-gw.yml` playbook, apply
all of the necessary configuration to the edge router on my home
network.
2018-03-27 20:44:43 -05:00
Dustin 5d1b646d14 roles/nftables: Basic nftables configuration
The *nftables* role handles installation and basic configuration of the
userspace components for nftables.

Note that this role currently only works on Fedora, and requires
*nftables* 0.8 or later for wildcard includes.
2018-03-27 20:44:43 -05:00
Dustin 3169278429 roles/rhel-network: Enable/start service
The *networking* service, which is actually a legacy init script, is
provided by the *initscripts* package on RHEL and its derivatives. This
service needs to be running in order for the configuration generated by
the *rhel-network* role to be applied to the managed node.
2018-03-27 20:44:43 -05:00
Dustin 1973378e75 radvd: Install and configure radvd
The *radvd* role and `radvd.yml` playbook can be used to configure the
`radvd` IPv6 SLAAC router advertisement daemon on Linux.
2018-03-27 20:44:43 -05:00
Dustin 2a5b257943 network: Playbook to configure networking
The `network.yml` playbook is used to configure the network interfaces
on a managed node. Currently, it only supports the Red Hat configuration
style (i.e. `/etc/sysconfig/network-scripts/ifcfg-*` files).
2018-03-27 20:44:43 -05:00
Dustin 7de51f4bc5 dyngroups: Dynamic host classification
The `dyngroups.yml` playbook groups hosts dynamically based on gathered
facts. Currently, the `ansible_os_family` fact is used to group hosts by
Linux distribution.
2018-03-27 20:44:43 -05:00
Dustin 4811a726a1 dhcpd: Install and configure ISC DHCPD 2018-03-27 20:44:43 -05:00
Dustin 9e73b56ac7 dhcpcd: Install and configure dhcpcd
`dhcpcd` is a fully-featured network manager, without all the bloat of
`NetworkManager`.
2018-03-13 23:19:50 -05:00
Dustin 5181ddaa00 domain-controller: Configure local AD authentication
Samba AD DCs are now configured to use Active Directory for local
authentication as well, using the Winbind implementation in the Samba
daemon.
2018-03-11 18:16:17 -05:00
Dustin 5a91cb731a samba-dc: Configure samba4 winbind
The *samba-dc* role now configures `winbindd` on domain controllers to
support identity mapping on the local machine. This will allow domain
users to log into the domain controller itself, e.g. via SSH.

The Fedora packaging of *samba4* still has some warts. Specifically, it
does not have a proper SELinux policy, so some work-arounds need to be
put into place in order for confined processes to communicate with
winbind.
2018-03-11 18:16:17 -05:00
Dustin e99db22765 hosts: dns0.p.b: Add to AD 2018-03-11 18:16:17 -05:00
Dustin 4e6a8f5b27 pyrocufflink: Deploy domain members 2018-03-11 18:16:17 -05:00
Dustin 5570a94be3 roles/winbind: Configure Samba AD membership
The *winbind* role builds upon the *samba* role to configure the machine
as an Active Directory domain member.
2018-03-11 18:16:17 -05:00
Dustin 4546cffeba roles/samba: Basic Samba configuration
The *samba* role provides general configuration for Samba. Other roles
will provide configuration for specific features such as Active
Directory membership, file shares, etc.
2018-03-11 18:16:17 -05:00
Dustin f16b7557cd roles/sudo: Configure sudo and policy
The *sudo* role installs `sudo` and configures policy for it. By
default, users who are members of the *sudo* group can run any command
as root.
2018-03-11 18:16:17 -05:00
Dustin 0fa0c2f66e roles/system-auth: Configure PAM system authentication
The *system-auth* role deploys PAM configuration for system-wide user
authentication. It is specifically focused on Active Directory
authentication using Samba/Winbind.
2018-03-11 18:16:17 -05:00
Dustin 7217c1c8a0 roles/nsswitch: Configure glibc name service
The *nsswitch* role can be used to configure the name service switch on
glibc-based distributions, including Gentoo, Fedora, and CentOS. It is
specifically focused on Active Directory authentication via
Samba/Winbind.
2018-03-11 18:16:17 -05:00
Dustin 61b918242a hosts: Add dns0.p.b 2018-02-21 22:43:06 -06:00
Dustin 71f28dfee2 Add pyrocufflink-dns group
The *pyrocufflink-dns* group specifies the BIND configuration for the
primary DNS servers on the "new" Pyrocufflink network.
2018-02-21 22:42:18 -06:00
Dustin 5ed1b23321 roles/named: Set minimal responses
Including authority and additional responses in all responses is just a
waste of bandwidth.
2018-02-21 22:40:40 -06:00
Dustin 3473694eb0 roles/named: Improve support for other zone types
Only *master* zones need zone files pre-populated, as the other types of
zones are populated by data named receives from queries and transfers.
Other types of zones require other options, however, to be usable. This
commit introduces minimal support for specifying *slave*, *forward*, and
*stub* zones.
2018-02-21 22:33:52 -06:00
Dustin 83817ca340 roles/bind: Simplify zone allow-update settings
Items in the `allow_update` property can use the address match list
syntax to specify arbitrary restrictions, including TSIG key names.
There is really no need for a special case for key names.
2018-02-21 22:28:35 -06:00
Dustin eca967c8b3 roles/named: Support managing TSIG keys
To support signing of updates, TSIG keys can be defined using the
`named_keys` variable. This variable takes a list of objects with the
following properties:

* `name`: The name of the key
* `algorithm`: The signature algorithm (default: `hmac-md5`)
* `secret`: The base64-encoded key material
2018-02-20 16:12:23 -06:00