|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
Gentoo Linux以其高度可定制性和优化的性能而闻名,是许多系统管理员和安全专家的首选发行版。与其他Linux发行版相比,Gentoo的源码-based特性允许用户精确控制系统中的每个组件,从而提供了无与伦比的安全定制能力。本文将全面解析Gentoo Linux系统的安全性设置,从基础配置到高级防护,帮助您打造一个安全可靠的计算环境。
一、基础安全配置
1. 安装过程中的安全考虑
Gentoo Linux的安装过程本身就是提升系统安全性的第一步。在安装阶段,有几个关键的安全考虑因素:
遵循最小化安装原则,只安装必要的软件包,减少潜在的攻击面。在Gentoo中,可以通过精心选择USE标志来实现这一点:
- # 在/etc/portage/make.conf中设置严格的USE标志
- USE="-X -gtk -qt5 -kde -gnome -alsa -pulseaudio minimal"
复制代码
采用合理的分区方案可以增强系统安全性:
- # 示例分区方案
- /boot 512M ext4 noexec,nodev,nosuid
- / 20G ext4 defaults
- /home 10G ext4 nodev,nosuid
- /var 10G ext4 nodev,nosuid
- /tmp 2G ext4 nodev,nosuid,noexec
- /var/tmp 2G ext4 nodev,nosuid,noexec
复制代码
在安装过程中,确保下载的源代码和软件包是经过验证的:
- # 验证stage3 tarball的完整性
- wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-*.tar.xz
- wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-*.tar.xz.DIGESTS
- sha512sum -c stage3-amd64-*.tar.xz.DIGESTS
复制代码
2. 用户和权限管理
设置强密码策略是保护系统安全的基础。编辑/etc/login.defs文件:
- # /etc/login.defs
- PASS_MAX_DAYS 90
- PASS_MIN_DAYS 7
- PASS_WARN_AGE 14
- PASS_MIN_LEN 12
复制代码
限制只有wheel组的用户才能使用su命令:
- # 安装pam包并配置
- emerge app-admin/pam
- echo "auth required pam_wheel.so" >> /etc/pam.d/su
复制代码
遵循最小权限原则,为用户分配必要的最小权限:
- # 创建新用户并添加到必要的组
- useradd -m -G users,wheel,audio,video -s /bin/bash username
- passwd username
复制代码
配置sudo以替代直接使用root账户:
- # 安装sudo
- emerge app-admin/sudo
- # 编辑sudoers文件
- visudo
- # 添加用户到sudoers
- username ALL=(ALL) ALL
复制代码
3. 基本防火墙设置
Gentoo Linux提供了多种防火墙解决方案,其中最常用的是iptables和nftables。以下是使用iptables设置基本防火墙的步骤:
- emerge net-firewall/iptables
复制代码- # /etc/init.d/iptables save
- # /etc/init.d/iptables start
- # 创建防火墙规则脚本
- cat > /etc/firewall.sh << EOF
- #!/bin/sh
- # 清除现有规则
- iptables -F
- iptables -X
- iptables -t nat -F
- iptables -t nat -X
- iptables -t mangle -F
- iptables -t mangle -X
- # 设置默认策略
- iptables -P INPUT DROP
- iptables -P FORWARD DROP
- iptables -P OUTPUT ACCEPT
- # 允许本地回环
- iptables -A INPUT -i lo -j ACCEPT
- iptables -A OUTPUT -o lo -j ACCEPT
- # 允许已建立的连接
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 允许SSH
- iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
- # 允许HTTP/HTTPS
- iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
- # 记录并丢弃其他数据包
- iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables_INPUT_denied: "
- iptables -A INPUT -j DROP
- EOF
- # 使脚本可执行
- chmod +x /etc/firewall.sh
- # 添加到启动项
- echo "/etc/firewall.sh" >> /etc/conf.d/local.start
复制代码- rc-update add iptables default
- /etc/init.d/iptables start
复制代码
4. 服务安全配置
- # 查看运行中的服务
- rc-status
- # 禁用不必要的服务
- rc-update del service_name default
复制代码
SSH是远程管理系统的常用工具,但其配置不当会带来安全风险:
- # 编辑SSH配置文件
- nano /etc/ssh/sshd_config
- # 修改以下配置项
- Port 2222 # 更改默认端口
- PermitRootLogin no # 禁止root登录
- PasswordAuthentication no # 禁用密码认证,使用密钥认证
- PermitEmptyPasswords no # 禁止空密码
- MaxAuthTries 3 # 最大尝试次数
- AllowUsers username1 username2 # 只允许特定用户登录
- # 重启SSH服务
- /etc/init.d/sshd restart
复制代码- # 在客户端生成SSH密钥对
- ssh-keygen -t rsa -b 4096
- # 将公钥复制到服务器
- ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip -p 2222
复制代码
二、中级安全设置
1. SELinux或AppArmor配置
Gentoo Linux支持SELinux和AppArmor这两种强制访问控制(MAC)系统。这里我们以AppArmor为例进行配置:
- # 安装AppArmor
- echo "sys-apps/apparmor" >> /etc/portage/package.accept_keywords
- emerge sys-apps/apparmor
- # 启用AppArmor内核支持
- echo "apparmor" >> /etc/conf.d/modules
复制代码- # 启动AppArmor服务
- /etc/init.d/apparmor start
- rc-update add apparmor default
- # 检查AppArmor状态
- aa-status
复制代码- # 为特定程序创建AppArmor配置文件
- aa-genprof /path/to/program
- # 加载新的配置文件
- apparmor_parser -r /etc/apparmor.d/program.profile
复制代码
2. 系统加固
通过调整内核参数来增强系统安全性:
- # 编辑sysctl配置文件
- nano /etc/sysctl.conf
- # 添加以下配置
- # 防止IP欺骗
- net.ipv4.conf.all.rp_filter = 1
- net.ipv4.conf.default.rp_filter = 1
- # 忽略ICMP重定向
- net.ipv4.conf.all.accept_redirects = 0
- net.ipv4.conf.default.accept_redirects = 0
- net.ipv4.conf.all.secure_redirects = 0
- net.ipv4.conf.default.secure_redirects = 0
- # 忽略发送ICMP重定向
- net.ipv4.conf.all.send_redirects = 0
- net.ipv4.conf.default.send_redirects = 0
- # 不接受源路由包
- net.ipv4.conf.all.accept_source_route = 0
- net.ipv4.conf.default.accept_source_route = 0
- # 启用TCP SYN Cookie保护
- net.ipv4.tcp_syncookies = 1
- # 防止TCP时间戳攻击
- net.ipv4.tcp_timestamps = 0
- # 记录可疑数据包
- net.ipv4.conf.all.log_martians = 1
- net.ipv4.conf.default.log_martians = 1
- # 应用配置
- sysctl -p
复制代码
核心转储可能包含敏感信息,应该加以限制:
- # 限制核心转储大小
- echo "* hard core 0" >> /etc/security/limits.conf
- # 禁用setuid和setgid程序的核心转储
- echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf
- sysctl -p
复制代码- # 为GRUB设置密码
- grub-mkpasswd-pbkdf2
- # 输入密码并记录生成的hash
- # 编辑GRUB配置文件
- nano /etc/grub.d/40_custom
- # 添加以下内容
- set superusers="admin"
- password_pbkdf2 admin [生成的hash]
- # 更新GRUB配置
- grub-mkconfig -o /boot/grub/grub.cfg
复制代码
3. 安全更新和维护
- # 安装layman以管理overlay
- emerge app-portage/layman
- layman -L
- layman -a gentoo
- # 配置glsa-check进行安全更新
- emerge app-portage/gentoolkit
- # 创建安全更新脚本
- cat > /usr/local/bin/security-updates << EOF
- #!/bin/bash
- # 检查安全公告
- glsa-check -t all
- # 自动应用安全更新
- glsa-check -f $(glsa-check -t all 2>/dev/null | awk '{print $2}')
- EOF
- chmod +x /usr/local/bin/security-updates
- # 添加到cron
- echo "0 3 * * * /usr/local/bin/security-updates" >> /etc/crontab
复制代码- # 安装审计工具
- emerge app-admin/aide
- # 初始化AIDE数据库
- aide --init
- # 移动数据库到安全位置
- mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
- # 创建定期审计脚本
- cat > /usr/local/bin/aide-check << EOF
- #!/bin/bash
- aide --check
- EOF
- chmod +x /usr/local/bin/aide-check
- # 添加到cron
- echo "0 2 * * * /usr/local/bin/aide-check" >> /etc/crontab
复制代码
4. 日志和监控
- # 安装syslog-ng
- emerge app-admin/syslog-ng
- # 配置syslog-ng
- nano /etc/syslog-ng/syslog-ng.conf
- # 添加以下配置
- source s_local {
- internal();
- unix-dgram("/dev/log");
- file("/proc/kmsg" program_override("kernel"));
- };
- destination d_local {
- file("/var/log/messages");
- };
- log {
- source(s_local);
- destination(d_local);
- };
- # 启动syslog-ng
- /etc/init.d/syslog-ng start
- rc-update add syslog-ng default
复制代码- # 安装logwatch
- emerge app-admin/logwatch
- # 配置logwatch
- cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
- nano /etc/logwatch/conf/logwatch.conf
- # 修改配置
- Output = mail
- Format = html
- MailTo = admin@example.com
- # 添加到cron
- echo "0 1 * * * /usr/sbin/logwatch" >> /etc/crontab
复制代码- # 安装fail2ban
- emerge net-analyzer/fail2ban
- # 配置fail2ban
- cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- nano /etc/fail2ban/jail.local
- # 启用SSH保护
- [sshd]
- enabled = true
- port = 2222
- filter = sshd
- logpath = /var/log/messages
- maxretry = 3
- bantime = 3600
- # 启动fail2ban
- /etc/init.d/fail2ban start
- rc-update add fail2ban default
复制代码
三、高级防护措施
1. 入侵检测系统
- # 安装Snort
- emerge net-analyzer/snort
- # 创建Snort配置目录
- mkdir /etc/snort/rules
- mkdir /var/log/snort
- # 下载最新的规则集
- cd /tmp
- wget https://www.snort.org/downloads/snortrules/snortrules-snapshot-*.tar.gz
- tar -xvzf snortrules-snapshot-*.tar.gz
- cp -r rules/* /etc/snort/rules/
- # 配置Snort
- nano /etc/snort/snort.conf
- # 修改以下配置
- var HOME_NET [你的网络地址]
- var EXTERNAL_NET !$HOME_NET
- var RULE_PATH /etc/snort/rules
- # 创建Snort启动脚本
- cat > /etc/init.d/snort << EOF
- #!/sbin/openrc-run
- command="/usr/bin/snort"
- command_args="-D -c /etc/snort/snort.conf -i eth0 -l /var/log/snort"
- pidfile="/var/run/snort_eth0.pid"
- depend() {
- need net
- }
- EOF
- chmod +x /etc/init.d/snort
- # 启动Snort
- /etc/init.d/snort start
- rc-update add snort default
复制代码- # 下载OSSEC
- cd /tmp
- wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
- tar -xvzf 3.7.0.tar.gz
- cd ossec-hids-3.7.0
- # 安装依赖
- emerge dev-db/mysql dev-libs/openssl
- # 编译和安装OSSEC
- ./install.sh
- # 按照安装向导进行配置
- # 选择本地安装
- # 设置邮件通知
- # 启用主动响应
- # 启动OSSEC
- /var/ossec/bin/ossec-control start
复制代码
2. 安全审计
- # 安装Lynis
- emerge app-admin/lynis
- # 运行系统审计
- lynis audit system
- # 定期运行审计
- echo "0 4 * * 0 /usr/sbin/lynis audit system" >> /etc/crontab
复制代码- # 安装auditd
- emerge sys-process/audit
- # 配置审计规则
- nano /etc/audit/audit.rules
- # 添加以下规则
- # 监控文件访问
- -w /etc/passwd -p wa -k identity
- -w /etc/group -p wa -k identity
- -w /etc/shadow -p wa -k identity
- -w /etc/sudoers -p wa -k identity
- # 监控系统调用
- -a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F auid>=1000 -F auid!=-1 -k perm_mod
- -a always,exit -F arch=b64 -S chown,fchown,fchownat -F auid>=1000 -F auid!=-1 -k perm_mod
- # 启动auditd
- /etc/init.d/auditd start
- rc-update add auditd default
复制代码
3. 网络安全加固
- # 配置/etc/hosts.allow
- sshd: 192.168.1.0/24, 10.0.0.1
- vsftpd: 192.168.1.0/24
- # 配置/etc/hosts.deny
- ALL: ALL
复制代码- # 安装ClamAV
- emerge app-antivirus/clamav
- # 配置ClamAV
- nano /etc/clamav/freshclam.conf
- # 修改以下配置
- DatabaseOwner clamav
- UpdateLogFile /var/log/clamav/freshclam.log
- LogVerbose true
- DatabaseMirror database.clamav.net
- # 更新病毒库
- freshclam
- # 配置定时扫描
- cat > /etc/cron.daily/clamav-scan << EOF
- #!/bin/bash
- clamscan -r --infected --exclude-dir=/sys / > /var/log/clamav/scan.log
- EOF
- chmod +x /etc/cron.daily/clamav-scan
复制代码- # 安装OpenVPN
- emerge net-vpn/openvpn
- # 生成证书和密钥
- cd /etc/openvpn/easy-rsa
- . ./vars
- ./clean-all
- ./build-ca
- ./build-key-server server
- ./build-key client1
- ./build-dh
- # 创建服务器配置文件
- cat > /etc/openvpn/server.conf << EOF
- port 1194
- proto udp
- dev tun
- ca ca.crt
- cert server.crt
- key server.key
- dh dh2048.pem
- server 10.8.0.0 255.255.255.0
- ifconfig-pool-persist ipp.txt
- keepalive 10 120
- comp-lzo
- persist-key
- persist-tun
- status openvpn-status.log
- verb 3
- EOF
- # 启动OpenVPN
- /etc/init.d/openvpn start
- rc-update add openvpn default
复制代码
4. 加密和隐私保护
- # 安装LUKS工具
- emerge sys-fs/cryptsetup
- # 创建加密分区
- cryptsetup luksFormat /dev/sda2
- cryptsetup luksOpen /dev/sda2 cryptroot
- # 创建文件系统
- mkfs.ext4 /dev/mapper/cryptroot
- # 挂载加密分区
- mount /dev/mapper/cryptroot /mnt
- # 配置/etc/crypttab
- echo "cryptroot /dev/sda2 none luks" >> /etc/crypttab
- # 更新/etc/fstab
- echo "/dev/mapper/cryptroot / ext4 defaults 0 1" >> /etc/fstab
复制代码- # 安装Tor
- emerge net-vpn/tor
- # 配置Tor
- nano /etc/tor/torrc
- # 添加以下配置
- SocksPort 9050
- Log notice file /var/log/tor/notices.log
- RunAsDaemon 1
- DataDirectory /var/lib/tor
- # 启动Tor
- /etc/init.d/tor start
- rc-update add tor default
复制代码- # 安装GnuPG
- emerge app-crypt/gnupg
- # 生成GPG密钥
- gpg --full-gen-key
- # 配置邮件客户端使用GPG
- # 以mutt为例
- emerge mail-client/mutt
- nano ~/.muttrc
- # 添加以下配置
- set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
- set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
- set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
- set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --detach-sign --textmode %?a?-u %a? %f"
- set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --clearsign --textmode %?a?-u %a? %f"
- set pgp_import_command="gpg --no-verbose --import -v %f"
- set pgp_export_command="gpg --no-verbose --export --armor %r"
- set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
- set pgp_list_pubkey_command="gpg --no-verbose --batch --with-colons --list-keys %r"
- set pgp_list_seckey_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
复制代码
四、安全最佳实践和常见问题解决
1. 安全最佳实践
- # 安装rsnapshot
- emerge app-backup/rsnapshot
- # 配置rsnapshot
- nano /etc/rsnapshot.conf
- # 设置备份保留策略
- retain hourly 24
- retain daily 7
- retain weekly 4
- retain monthly 12
- # 配置备份目录
- backup /home/ localhost/
- backup /etc/ localhost/
- backup /usr/local/ localhost/
- # 创建备份脚本
- cat > /usr/local/bin/backup.sh << EOF
- #!/bin/bash
- rsnapshot hourly
- rsnapshot daily
- rsnapshot weekly
- rsnapshot monthly
- EOF
- chmod +x /usr/local/bin/backup.sh
- # 添加到cron
- echo "0 */4 * * * /usr/local/bin/backup.sh" >> /etc/crontab
复制代码- # 安装并配置两因素认证
- emerge app-admin/google-authenticator
- # 为用户配置两因素认证
- google-authenticator
- # 配置SSH使用两因素认证
- nano /etc/pam.d/sshd
- # 添加以下行
- auth required pam_google_authenticator.so
- # 修改SSH配置
- nano /etc/ssh/sshd_config
- # 确保以下配置
- ChallengeResponseAuthentication yes
- UsePAM yes
- # 重启SSH服务
- /etc/init.d/sshd restart
复制代码- # 安装并配置SFTP
- nano /etc/ssh/sshd_config
- # 添加以下配置
- Subsystem sftp internal-sftp
- Match Group sftpusers
- ChrootDirectory /home/%u
- ForceCommand internal-sftp
- AllowTcpForwarding no
- X11Forwarding no
- # 创建SFTP用户组
- groupadd sftpusers
- # 添加用户到SFTP组
- useradd -m -G sftpusers -s /sbin/nologin sftpuser
- passwd sftpuser
- # 重启SSH服务
- /etc/init.d/sshd restart
复制代码
2. 常见安全问题解决
- # 隔离系统
- ifconfig eth0 down
- # 创建系统快照用于取证
- dd if=/dev/sda of=/mnt/external/disk_image.dd bs=4k conv=noerror,sync
- # 检查系统完整性
- aide --check
- # 检查异常进程
- ps auxf
- netstat -tulnp
- # 检查异常用户和登录
- last
- lastb
- cat /var/log/secure | grep Failed
- # 检查计划任务
- crontab -l
- ls -la /etc/cron.*
- # 检查系统服务
- chkconfig --list
- systemctl list-units --type=service
- # 检查异常文件
- find / -name ".*" -type f -mtime -7
- find / -type f -mtime -7 -size +10000k
复制代码- # 从干净备份恢复系统
- rsync -avz /mnt/backup/ /mnt/recovery/
- # 更新所有软件包
- emerge --sync
- emerge -auvDN @world
- # 更改所有密码
- passwd root
- passwd [用户名]
- # 检查并修复配置文件
- # 重新生成SSH密钥
- rm /etc/ssh/*key*
- /etc/init.d/sshd restart
- # 安装安全更新
- glsa-check -f $(glsa-check -t all 2>/dev/null | awk '{print $2}')
复制代码- # 安装并配置fail2ban
- emerge net-analyzer/fail2ban
- # 创建DDoS保护过滤器
- cat > /etc/fail2ban/filter.d/ddos.conf << EOF
- [Definition]
- failregex = ^.*-.*-.*-.*.*"GET .*
- ignoreregex =
- EOF
- # 创建DDoS保护jail
- cat > /etc/fail2ban/jail.local << EOF
- [ddos]
- enabled = true
- port = http,https
- filter = ddos
- logpath = /var/log/nginx/access.log
- maxretry = 100
- findtime = 60
- bantime = 3600
- EOF
- # 重启fail2ban
- /etc/init.d/fail2ban restart
复制代码- # 安装ModSecurity
- emerge www-apache/mod_security
- # 配置ModSecurity
- nano /etc/apache2/modules.d/79_modsecurity.conf
- # 启用ModSecurity
- <IfModule security2_module>
- SecDataDir /var/tmp/modsecurity
- Include /etc/modsecurity/modsecurity.conf
- Include /etc/modsecurity/activated_rules/*.conf
- </IfModule>
- # 下载OWASP核心规则集
- cd /tmp
- wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip
- unzip master.zip
- cp -r owasp-modsecurity-crs-master/rules /etc/modsecurity/activated_rules/
- # 配置OWASP规则
- cd /etc/modsecurity/activated_rules
- mv crs-setup.conf.example crs-setup.conf
- # 重启Apache
- /etc/init.d/apache2 restart
复制代码
结论
Gentoo Linux系统提供了强大的安全定制能力,通过本文介绍的基础配置、中级设置和高级防护措施,您可以打造一个高度安全的计算环境。从安装阶段的安全考虑到用户权限管理,从防火墙配置到入侵检测系统,每一步都至关重要。
安全是一个持续的过程,而非一次性的任务。定期更新系统、监控日志、审计安全设置、应对新出现的威胁,这些都是维护Gentoo Linux系统安全的重要环节。通过遵循本文提供的最佳实践和解决方案,您可以显著提高系统的安全性,保护您的数据和隐私不受威胁。
最后,请记住,没有任何系统是绝对安全的。安全性和便利性之间需要找到平衡点。根据您的具体需求和使用场景,灵活调整安全策略,才能在保障安全的同时,充分发挥Gentoo Linux的强大功能。 |
|