thechip911.hardening

ハードニング - Ansible ロール

AlmaLinux、Debian、またはUbuntuサーバーを少しだけセキュアにするためのAnsibleロールです。
systemdエディションです。

Ansibleのバージョンは2.12以上が必要です。

Ansible Galaxyで入手できます。

AlmaLinux 8Debian 11、Ubuntuの20.04 LTS (Focal Fossa) および22.04 LTS (Jammy Jellyfish)がサポートされています。

注意

このロールを実運用環境で使用する前に、必ず非運用環境でテストしてください。

注意

検証用のSLSAアーティファクトが、slsaアクションワークフローにあり、確認できます。

依存関係

なし。

プレイブック

---
- hosts: localhost
  any_errors_fatal: true
  tasks:
    - name: ハードニングロールを含める
      ansible.builtin.include_role:
        name: thechip911.hardening
      vars:
        block_blacklisted: true
        sshd_admin_net:
          - 10.0.0.0/16
        suid_sgid_permissions: false
...

git checkoutを使ったansible-pull

---
- hosts: localhost
  any_errors_fatal: true
  tasks:
    - name: gitをインストール
      become: true
      ansible.builtin.package:
        name: git
        state: present

    - name: thechip911.hardeningをチェックアウト
      become: true
      ansible.builtin.git:
        repo: 'https://github.com/thechip911/ansible-role-hardening'
        dest: /etc/ansible/roles/thechip911.hardening
        version: master

    - name: ハードニングロールを含める
      ansible.builtin.include_role:
        name: thechip911.hardening
      vars:
        block_blacklisted: true
        sshd_admin_net:
          - 10.0.2.0/16
        suid_sgid_permissions: false
...

UFWファイアウォールルールに関する注意

ufwを毎回リセットするのではなく、ネットワークトラフィックの中断を防ぐために、comment: ansible managed タスクパラメータと値を持たないすべてのufwルールを削除します。

このロールはまた、デフォルトの拒否ポリシーを設定します。これは、sshd_portおよびufw_outgoing_traffic変数に指定されたポートを除いて、他のポート用のファイアウォールルールを作成する必要があることを意味します。

タスクの実行と構成

ロールの構成ツリーについては、STRUCTURE.mdを参照してください。

ロールテスト

テスト方法については、TESTING.mdを参照してください。

デフォルト付きロール変数

./defaults/main/auditd.yml

auditd_apply_audit_rules: true
auditd_action_mail_acct: root
auditd_admin_space_left_action: suspend
auditd_disk_error_action: suspend
auditd_disk_full_action: suspend
auditd_max_log_file: 8
auditd_max_log_file_action: keep_logs
auditd_mode: 1
auditd_num_logs: 5
auditd_space_left: 75
auditd_space_left_action: email
grub_audit_backlog_cmdline: audit_backlog_limit=8192
grub_audit_cmdline: audit=1

Grubを使用してブート時にauditdを有効にします。

auditd_apply_audit_rules: 'yes'の場合、ロールは含まれているテンプレートファイルからauditdルールを適用します。

auditd_action_mail_acctは有効なメールアドレスまたはエイリアスである必要があります。

auditd_admin_space_left_actionは、システムがディスクスペースが不足していることを検出したときに取るべきアクションを定義します。suspendは、auditデーモンがディスクへのレコード書き込みを停止する原因となります。

auditd_max_log_file_actionは、システムが最大ファイルサイズ制限に達したことを検出したときに取るべきアクションを設定します。例えば、rotateオプションは、auditデーモンにログを回転させます。keep_logsオプションはrotateに似ていますが、num_logs設定を使用しません。これにより、auditログが上書きされるのを防ぎます。

auditd_space_left_actionは、システムがディスクスペースが不足していることを検出したときに取るべきアクションをシステムに指示します。emailは、action_mail_acctに指定されたメールアカウントに警告を送信し、syslogにもメッセージを送信することを意味します。

auditd_modeauditdの失敗モードを設定します。0=サイレント、1=printk、2=パニック。

auditd.conf(5)

./defaults/main/compilers.yml

compilers:
  - as
  - cargo
  - cc
  - cc-[0-9]*
  - clang-[0-9]*
  - gcc
  - gcc-[0-9]*
  - go
  - make
  - rustc

ルートユーザーに制限されるコンパイラのリスト。

./defaults/main/disablewireless.yml

disable_wireless: false

trueの場合、すべてのワイヤレスインターフェースをオフにします。

./defaults/main/dns.yml

dns: 127.0.0.1 1.1.1.1
fallback_dns: 9.9.9.9 1.0.0.1
dnssec: allow-downgrade
dns_over_tls: opportunistic

システムとフォールバックのDNSサーバーとして使用するIPv4およびIPv6のアドレス。 dnssecが「allow-downgrade」に設定されている場合、DNSSEC検証は試行されますが、サーバーがDNSSECを適切にサポートしていない場合、DNSSECモードは自動的に無効になります。

dns_over_tlsがtrueの場合、DNSサーバーがDNS-over-TLSをサポートしており、有効な証明書を持っていれば、サーバーへのすべての接続が暗号化されます。

systemdオプション。

./defaults/main/ipv6.yml

disable_ipv6: false
ipv6_disable_sysctl_settings:
  net.ipv6.conf.all.disable_ipv6: 1
  net.ipv6.conf.default.disable_ipv6: 1

disable_ipv6: trueの場合、IPv6が無効になります。

./defaults/main/limits.yml

limit_nofile_hard: 1024
limit_nofile_soft: 512
limit_nproc_hard: 1024
limit_nproc_soft: 512

プロセスとオープンファイルの最大数。

./defaults/main/misc.yml

install_aide: true
reboot_ubuntu: false
redhat_signing_keys:
  - 567E347AD0044ADE55BA8A5F199E2F91FD431D51
  - 47DB287789B21722B6D95DDE5326810137017186
epel7_signing_keys:
  - 91E97D7C4A5E96F17F3E888F6A2FAEA2352C64E5
epel8_signing_keys:
  - 94E279EB8D8F25B21810ADF121EA45AB2F86D6A1
epel9_signing_keys:
  - FF8AD1344597106ECE813B918A3872BF3228467C

install_aide: trueの場合、AIDEがインストールされ、構成されます。

reboot_ubuntu: trueの場合、必要に応じてUbuntuノードが再起動されます。

redhat_signing_keysRedHat製品の署名鍵です。

epel7_signing_keysepel8_signing_keys、およびepel9_signing_keysはリリース特有のFedora EPEL署名鍵です。

./defaults/main/module_blocklists.yml

block_blacklisted: false
fs_modules_blocklist:
  - cramfs
  - freevxfs
  - hfs
  - hfsplus
  - jffs2
  - squashfs
  - udf
misc_modules_blocklist:
  - bluetooth
  - bnep
  - btusb
  - can
  - cpia2
  - firewire-core
  - floppy
  - n_hdlc
  - net-pf-31
  - pcspkr
  - soundcore
  - thunderbolt
  - usb-midi
  - usb-storage
  - uvcvideo
  - v4l2_common
net_modules_blocklist:
  - atm
  - dccp
  - sctp
  - rds
  - tipc

ブロックされたカーネルモジュール。

block_blacklisted: trueを設定すると、自動的にblacklistedカーネルモジュールがロードされるのを防ぎます。ブラックリストに登録されているモジュールでも、modprobe module_nameを使って手動でロードできます。install module_name /bin/trueを使うことで、これを防ぐことができます。

./defaults/main/mount.yml

hide_pid: 2
process_group: root

hide_pid/proc/<pid>/アクセスモードを設定します。

process_group設定は、hidepid=で禁止されているプロセス情報を学ぶことができるグループを構成します。

/procマウントオプション

./defaults/main/ntp.yml

fallback_ntp: 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org
ntp: 0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org

NTPサーバーのホスト名またはIPアドレス。systemdオプション。

./defaults/main/packages.yml

system_upgrade: true
packages_blocklist:
  - apport*
  - autofs
  - avahi*
  - avahi-*
  - beep
  - git
  - pastebinit
  - popularity-contest
  - prelink
  - rpcbind
  - rsh*
  - rsync
  - talk*
  - telnet*
  - tftp*
  - whoopsie
  - xinetd
  - yp-tools
  - ypbind
packages_debian:
  - acct
  - apparmor-profiles
  - apparmor-utils
  - apt-show-versions
  - audispd-plugins
  - auditd
  - cracklib-runtime
  - debsums
  - gnupg2
  - haveged
  - libpam-apparmor
  - libpam-cap
  - libpam-modules
  - libpam-pwquality
  - libpam-tmpdir
  - lsb-release
  - needrestart
  - openssh-server
  - postfix
  - rkhunter
  - rsyslog
  - sysstat
  - tcpd
  - vlock
  - wamerican
packages_redhat:
  - audispd-plugins
  - audit
  - cracklib
  - gnupg2
  - haveged
  - libpwquality
  - openssh-server
  - needrestart
  - postfix
  - psacct
  - rkhunter
  - rsyslog
  - rsyslog-gnutls
  - vlock
  - words
packages_ubuntu:
  - fwupd
  - secureboot-db

system_upgrade: 'yes'を設定すると、必要に応じてapt upgradeまたはdnf updateが実行されます。

インストールするパッケージはディストリビューションに依存し、削除するパッケージはpackages_blocklistで管理されます。

./defaults/main/password.yml

crypto_policy: FIPS
pwquality_config:
  dcredit: -1
  dictcheck: 1
  difok: 8
  enforcing: 1
  lcredit: -1
  maxclassrepeat: 4
  maxrepeat: 3
  minclass: 4
  minlen: 15
  ocredit: -1
  ucredit: -1

暗号化ポリシーを設定します。

/etc/crypto-policies/configが存在する場合に有効です。

libpwqualityライブラリを構成します。

./defaults/main/sshd.yml

sshd_accept_env: LANG LC_*
sshd_admin_net:
  - 192.168.0.0/24
  - 192.168.1.0/24
sshd_allow_agent_forwarding: 'no'
sshd_allow_groups: sudo
sshd_allow_tcp_forwarding: 'no'
sshd_authentication_methods: any
sshd_banner: /etc/issue.net
sshd_challenge_response_authentication: 'no'
sshd_ciphers: [email protected],[email protected],aes256-ctr
sshd_client_alive_count_max: 1
sshd_client_alive_interval: 200
sshd_compression: 'no'
sshd_gssapi_authentication: 'no'
sshd_hostbased_authentication: 'no'
sshd_host_key_algorithms: [email protected],[email protected],ssh-ed25519,ssh-rsa,[email protected],[email protected],[email protected],ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256
sshd_ignore_user_known_hosts: 'yes'
sshd_kerberos_authentication: 'no'
sshd_kex_algorithms: [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
sshd_login_grace_time: 20
sshd_log_level: VERBOSE
sshd_macs: [email protected],[email protected],hmac-sha2-512,hmac-sha2-256
sshd_max_auth_tries: 3
sshd_max_sessions: 3
sshd_max_startups: 10:30:60
sshd_password_authentication: 'no'
sshd_permit_empty_passwords: 'no'
sshd_permit_root_login: 'no'
sshd_permit_user_environment: 'no'
sshd_port: 22
sshd_print_last_log: 'yes'
sshd_print_motd: 'no'
sshd_rekey_limit: 512M 1h
sshd_required_rsa_size: 2048
sshd_strict_modes: 'yes'
sshd_subsystem: sftp internal-sftp
sshd_tcp_keep_alive: 'no'
sshd_use_dns: 'no'
sshd_use_pam: 'yes'
sshd_x11_forwarding: 'no'

詳しいオプションについては、https://man.openbsd.org/sshd_configを参照してください。

sshd_admin_netで定義されたネットワークだけがsshd_portに接続できます。追加のサービスへのアクセスを許可するためには、さらにルールを設定する必要があります。

OpenSSHのログインは、ユーザーの主グループまたは補助グループのリストがsshd_allow_groupsのパターンの1つに一致するユーザーにのみ許可されます。

sshd_allow_agent_forwardingは、ssh-agent(1)の転送が許可されるかどうかを指定します。

sshd_allow_tcp_forwardingは、TCP転送が許可されるかどうかを指定します。利用可能なオプションはyes(すべてのTCP転送を許可)、no(すべてのTCP転送を防止)、local(ssh(1)からの視点でのローカル転送のみ許可)、remote(リモート転送のみ許可)です。

sshd_authentication_methodsは、ユーザーがアクセスを許可されるために成功裏に完了する必要のある認証方法を指定します。

sshd_log_levelは、ログメッセージの記録に使用される詳細レベルを指定します。

sshd_max_auth_triesおよびsshd_max_sessionsは、接続ごとに許可される最大SSH認証試行回数と、ネットワーク接続ごとに許可される最大オープンシェル、ログインまたはサブシステム(例:sftp)セッション数を指定します。

sshd_password_authenticationは、パスワード認証が許可されるかどうかを指定します。

sshd_portはsshd(8)がリッスンするポート番号を指定します。

sshd_required_rsa_sizeとRequiredRSASizeは、SSHバージョンが9.1を超えている場合のみ設定されます。

./defaults/main/suid_sgid_blocklist.yml

suid_sgid_permissions: true
suid_sgid_blocklist:
  - ansible-playbook
  - ar
  - as
  - at
  - awk
  - base32
  - base64
  - bash
  - busctl
  - busybox
  [...]

suid_sgid_permissions: trueの場合、suid_sgid_blocklistをループして、SUID/SGID権限を削除します。

完全なファイルリストはdefaults/main/suid_sgid_blocklist.ymlで確認できます。

./defaults/main/sysctl.yml

sysctl_dev_tty_ldisc_autoload: 0
sysctl_net_ipv6_conf_accept_ra_rtr_pref: 0

ipv4_sysctl_settings:
  net.ipv4.conf.all.accept_redirects: 0
  net.ipv4.conf.all.accept_source_route: 0
  net.ipv4.conf.all.log_martians: 1
  net.ipv4.conf.all.rp_filter: 1
  net.ipv4.conf.all.secure_redirects: 0
  net.ipv4.conf.all.send_redirects: 0
  net.ipv4.conf.all.shared_media: 0
  net.ipv4.conf.default.accept_redirects: 0
  net.ipv4.conf.default.accept_source_route: 0
  net.ipv4.conf.default.log_martians: 1
  net.ipv4.conf.default.rp_filter: 1
  net.ipv4.conf.default.secure_redirects: 0
  net.ipv4.conf.default.send_redirects: 0
  net.ipv4.conf.default.shared_media: 0
  net.ipv4.icmp_echo_ignore_broadcasts: 1
  net.ipv4.icmp_ignore_bogus_error_responses: 1
  net.ipv4.ip_forward: 0
  net.ipv4.tcp_challenge_ack_limit: 2147483647
  net.ipv4.tcp_invalid_ratelimit: 500
  net.ipv4.tcp_max_syn_backlog: 20480
  net.ipv4.tcp_rfc1337: 1
  net.ipv4.tcp_syn_retries: 5
  net.ipv4.tcp_synack_retries: 2
  net.ipv4.tcp_syncookies: 1

ipv6_sysctl_settings:
  net.ipv6.conf.all.accept_ra: 0
  net.ipv6.conf.all.accept_redirects: 0
  net.ipv6.conf.all.accept_source_route: 0
  net.ipv6.conf.all.forwarding: 0
  net.ipv6.conf.all.use_tempaddr: 2
  net.ipv6.conf.default.accept_ra: 0
  net.ipv6.conf.default.accept_ra_defrtr: 0
  net.ipv6.conf.default.accept_ra_pinfo: 0
  net.ipv6.conf.default.accept_ra_rtr_pref: 0
  net.ipv6.conf.default.accept_redirects: 0
  net.ipv6.conf.default.accept_source_route: 0
  net.ipv6.conf.default.autoconf: 0
  net.ipv6.conf.default.dad_transmits: 0
  net.ipv6.conf.default.max_addresses: 1
  net.ipv6.conf.default.router_solicitations: 0
  net.ipv6.conf.default.use_tempaddr: 2

generic_sysctl_settings:
  fs.protected_fifos: 2
  fs.protected_hardlinks: 1
  fs.protected_symlinks: 1
  fs.suid_dumpable: 0
  kernel.core_uses_pid: 1
  kernel.dmesg_restrict: 1
  kernel.kptr_restrict: 2
  kernel.panic: 60
  kernel.panic_on_oops: 60
  kernel.perf_event_paranoid: 3
  kernel.randomize_va_space: 2
  kernel.sysrq: 0
  kernel.unprivileged_bpf_disabled: 1
  kernel.yama.ptrace_scope: 2
  net.core.bpf_jit_harden: 2

conntrack_sysctl_settings:
  net.netfilter.nf_conntrack_max: 2000000
  net.netfilter.nf_conntrack_tcp_loose: 0

sysctl設定。

sysctl.conf

./defaults/main/ufw.yml

ufw_enable: true
ufw_outgoing_traffic:
  - 22
  - 53
  - 80
  - 123
  - 443
  - 853

ufw_enable: trueは、関連するルールでufwをインストールおよび構成します。手動でファイアウォールをインストールおよび構成するには、falseに設定します。ufw_outgoing_trafficは、特定のufwポートを開き、外向きのトラフィックを許可します。

./defaults/main/users.yml

delete_users:
  - games
  - gnats
  - irc
  - list
  - news
  - sync
  - uucp

削除すべきユーザー。

推奨リーディング

DISA STIGとCISベンチマークの比較

Center for Internet Security Linuxベンチマーク

Common Configuration Enumeration

DISAセキュリティ技術実装ガイド

SCAPセキュリティガイド

セキュリティに焦点を当てたsystemd構成

貢献

貢献したいですか?素晴らしい!貢献は常に歓迎されます。大小を問わず、何かおかしいと感じたら、問題を提出したり、プルリクエストを作成してコードを改善したり、このプロジェクトを支援したりしてください。

ライセンス

Apache License Version 2.0

著者情報

https://github.com/thechip911

プロジェクトについて

AlmaLinux, Debian and Ubuntu hardening. systemd edition.

インストール
ansible-galaxy install thechip911.hardening
ライセンス
apache-2.0
ダウンロード
109
所有者