linux centos 加固服务器的方法

avatar
作者
猴君
阅读量:0

在CentOS系统中,进行上述安全实践时,可能会涉及到多个配置文件和目录。以下是一些具体的文件和目录,以及如何在CentOS中操作它们:

1. 限制连续密码错误的登录次数

相关文件/etc/pam.d/system-auth 和 /etc/pam.d/password-auth

操作:编辑这些文件,添加或修改pam_pwqualitypam_faildelay模块的参数,以限制连续密码错误次数。

/etc/pam.d/ 目录下的文件用于配置Pluggable Authentication Modules (PAM)。为了限制连续密码错误的登录次数,你通常需要修改 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth 这两个文件(或者修改 /etc/pam.d/common-auth,这取决于你的发行版如何组织PAM配置)。

在这些文件中,你需要查找 pam_faildelay.so 和 pam_tally2.so 模块的相关行。pam_faildelay.so 模块用于在连续失败登录尝试之间添加延迟,而 pam_tally2.so 模块用于跟踪并记录失败的登录尝试次数。

下面是一个基本的配置示例,展示了如何限制连续密码错误的登录次数:

auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=600   auth required pam_unix.so nullok try_first_pass   auth [default=die] pam_deny.so      # 可选:添加失败登录尝试之间的延迟   auth optional pam_faildelay.so delay=300000

在这个例子中:

  • pam_tally2.so deny=5 表示在连续5次密码错误后,账户将被锁定。
  • unlock_time=600 表示账户在10分钟后(600秒)自动解锁。
  • even_deny_root 表示这个限制也适用于root用户。
  • root_unlock_time=600 表示root用户在密码错误锁定后也将在10分钟后自动解锁。
  • pam_faildelay.so delay=300000 是可选的,它会在每次失败的登录尝试后添加5分钟(300000毫秒)的延迟。

请注意,根据你的Linux发行版和PAM配置的具体细节,可能需要不同的配置或不同的模块。在修改这些文件之前,请务必备份原始文件,以便在出现问题时可以恢复。

修改完这些文件后,你需要确保PAM服务重新加载配置。这通常可以通过重新登录或重启服务来完成,但具体取决于你的系统和配置。在某些系统上,你可能需要运行 pam-auth-update 命令来更新PAM配置。

最后,请确保你的系统上安装了相应的PAM模块。如果没有安装,你需要使用包管理器(如apt、yum或dnf)来安装它们。

2. 拆分系统管理员的权限,取消超级管理员

相关文件/etc/sudoers

操作:使用visudo命令编辑/etc/sudoers文件,为特定用户或用户组分配特定的命令或操作权限,而不是给予root权限。

使用visudo命令来编辑/etc/sudoers文件是非常推荐的做法,因为visudo会检查语法错误,从而避免因为配置错误导致的问题。以下是使用visudo进行权限拆分的一般步骤:

1.使用visudo命令编辑/etc/sudoers文件
sudo visudo  # 这将打开一个文本编辑器(通常是你默认使用的编辑器,如vi、nano等)来编辑/etc/sudoers文件。

2.查找并注释掉root用户的无限制sudo权限(如果存在的话)。通常你会看到类似于以下行的内容:
root    ALL=(ALL:ALL) ALL

#你可以通过在这行前面加上#来注释掉它,使其不生效: # root    ALL=(ALL:ALL) ALL   #这样做之后,root用户将不再拥有无限制的sudo权限。

4.为特定用户或用户组分配权限。在文件的末尾或适当的位置,你可以添加新的行来定义权限。例如:
# 为特定用户分配特定命令的权限: username    ALL=(ALL) /path/to/command # 这将允许username用户在任何主机上以任何用户身份执行/path/to/command命令。
# 为用户组分配权限: %groupname    ALL=(ALL) /path/to/command  #这将允许groupname用户组中的所有用户执行/path/to/command命令。
# 为用户分配多个命令的权限:  username    ALL=(ALL) /path/to/command1, /path/to/command2  # 使用逗号分隔可以列出多个命令。
# 允许用户以特定用户身份执行命令:  username    ALL=(specificuser) /path/to/command  # 这将限制username用户只能以specificuser用户的身份执行命令。
5.保存文件
6.测试配置是否生效

3. 删除不需要的各种账户

相关命令userdel

操作:使用userdel命令删除不再需要的用户账户。

1.使用具有root权限的用户(或使用sudo)执行userdel命令,并带上-r选项和要删除的用户名。例如,要删除名为exampleuser的用户,可以执行:
sudo userdel -r exampleuser
2.这将删除exampleuser用户账号、家目录(通常位于/home/exampleuser)以及邮件池(如果存在的话,通常位于/var/mail/exampleuser)。

请注意,userdel命令不允许删除正在线上的用户账号。如果需要删除正在登录的用户,首先需要终止该用户在系统上执行的所有程序。

另外,虽然-r选项会删除用户的家目录和邮件池,但并不会断开用户已有的SSH链接。即使用户账号已经被删除,如果该用户之前已经登录并建立了SSH连接,那么这个连接仍然是活跃的。然而,一旦用户登出,他们将无法再使用该账号登录,因为账号已经被删除了。

4. 关闭不需要的服务端口

相关工具firewalld;iptables;systemctl;kill

使用firewalld

firewalld是一个动态防火墙守护程序,用于管理网络流量。

# 查看当前开放的端口: sudo firewall-cmd --list-ports    # 临时关闭端口(直到下次重启):  # 关闭TCP端口: sudo firewall-cmd --zone=public --remove-port=<port_number>/tcp --permanent  # 关闭UDP端口: sudo firewall-cmd --zone=public --remove-port=<port_number>/udp --permanent  #将<port_number>替换为要关闭的端口号。--permanent选项确保规则在重启后依然生效。    # 重新加载防火墙配置:  sudo firewall-cmd --reload  # 这个命令将应用所有更改,包括你刚刚添加的端口关闭规则。
使用iptables

iptables是一个用于配置Linux内核防火墙的工具。

# 查看当前规则:  sudo iptables -L    # 添加规则来关闭端口:  # 关闭TCP端口:  sudo iptables -A INPUT -p tcp --dport <port_number> -j DROP  # 关闭UDP端口:  sudo iptables -A INPUT -p udp --dport <port_number> -j DROP  # 将<port_number>替换为要关闭的端口号。    # 保存iptables规则:  # 如果你使用的是基于Debian的系统(如Ubuntu),可以使用iptables-persistent包来保存规则:  sudo apt-get install iptables-persistent   sudo netfilter-persistent save  # 对于基于Red Hat的系统(如CentOS),规则通常保存在/etc/sysconfig/iptables文件中,你可以直接编辑这个文件或使用service iptables save命令来保存规则。    # 重新加载或重启iptables服务:  # 这取决于你的Linux发行版和服务管理方式,但通常可以通过以下命令之一完成:  sudo service iptables restart # 或 sudo systemctl restart iptables
使用systemctl关闭服务

如果你知道某个服务正在监听某个端口,并且你想要关闭这个服务,可以使用systemctl

sudo systemctl stop <service_name>   sudo systemctl disable <service_name>  # 将<service_name>替换为服务的名称。stop命令会停止服务,disable命令会确保服务在系统启动时不会被自动启动。
使用kill命令

如果你知道某个进程正在监听某个端口,并且想要直接杀死这个进程,可以使用kill命令结合lsofnetstat来找到进程的PID:

lsof -i :<port_number>  # 或者  netstat -tuln | grep <port_number>  # 这将显示监听该端口的进程的PID。然后,你可以使用kill命令来结束该进程:  sudo kill -9 <PID>  # 将<PID>替换为你要杀死的进程的PID。

注意:在关闭任何端口或服务之前,请确保你了解这些端口或服务的用途,并且确认关闭它们不会对你的系统或应用程序产生负面影响。同时,请务必备份相关配置,以防需要恢复这些更改。

5. 限制远程登录者的权限

相关文件/etc/ssh/sshd_config

操作:编辑/etc/ssh/sshd_config文件,限制可登录的用户、使用密钥认证、禁用root登录等。修改后,需要重启SSH服务使配置生效。

其他相关文件和目录
  • 主机名文件/etc/sysconfig/network
  • 网络IP配置文件/etc/sysconfig/network-scripts/ifcfg-eth0(注意,eth0可能是不同的网络接口名称)
  • SELinux配置/etc/sysconfig/selinux 和 /etc/selinux/config
限制可登录的用户

/etc/ssh/sshd_config中,可以使用AllowUsers指令来限制只有特定的用户可以远程登录。例如,只允许user1user2登录:

AllowUsers user1 user2
使用密钥认证

禁用密码认证,只使用公钥认证可以大大提高安全性。将以下行设置为no来禁用密码认证:

PasswordAuthentication no

确保你已经为每个允许登录的用户设置了SSH密钥,并且这些密钥已经添加到~/.ssh/authorized_keys文件中。

禁用root登录

将以下行设置为no来禁止root用户直接通过SSH登录:

PermitRootLogin no
修改后重启SSH服务

修改完配置文件后,你需要重启SSH服务来使这些更改生效。使用以下命令(根据系统服务管理器而定):

# 对于使用systemd的系统(如最新的CentOS和Ubuntu):  sudo systemctl restart sshd    # 对于使用SysV init的系统:  sudo service sshd restart
其他相关文件和目录
  1. 主机名文件/etc/sysconfig/network
    这个文件通常包含系统主机名。你可以编辑这个文件来更改主机名。

  2. 网络IP配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
    这个文件包含网络接口的配置信息,如IP地址、子网掩码等。请注意,eth0可能是不同的网络接口名称,如ens33wlp3s0等,这取决于你的系统配置。

  3. SELinux配置/etc/sysconfig/selinux 和 /etc/selinux/config
    SELinux(Security-Enhanced Linux)是一个Linux内核模块,提供访问控制安全策略。/etc/selinux/config文件包含SELinux的默认状态(启用或禁用),而/etc/sysconfig/selinux在某些发行版中可能包含运行时配置。

要修改SELinux配置,编辑/etc/selinux/config文件,并将SELINUX设置为你想要的值:

  • enforcing:SELinux策略被启用并强制执行。
  • permissive:SELinux策略被启用但仅记录违规,不阻止。
  • disabled:SELinux被禁用。

修改后,需要重启系统来使SELinux配置更改生效。

6.限制攻击者ip访问

apache限制
httpd.conf文件下写入 <Directory />     Order deny,allow # 黑名单     Deny from all #白名单 只允许1.1.1.1ip的访问     Allow from 1.1.1.1 </Directory>   但是当需要阻止或允许的IP或者IP段数量变多时,就不能都写在httpd配置文件里了,可以通过创建.htaccess文件来控制访问权限。  第一修改httpd.conf文件中,加入AllowOverride选项: <Directory />     AllowOverride All </Directory> 第二在对应的目录下(此处为根目录/下)放置.htaccess文件,文件内容如下: Order allow,deny allow from 1.1.1.0/24 allow from 1.1.2.0/24 allow from 1.1.3.0/24 allow from 1.1.4.0/24 allow from 1.1.5.0/24 allow from 1.1.6.0/24 allow from 1.1.7.0/24 allow from 1.1.8.0/24 deny from all 
nginx限制

直接在location中写deny和allow

location / {     allow 192.168.1.0/24;     deny 192.168.1.100;     ... }
iptables限制
限制1.1.1.1的访问 iptables -I INPUT -s 1.1.1.1 -j DROP  限制1.1.1.0/24网段的访问 iptables -I INPUT -s 1.1.1.0/24 -j DROP  查看限制 iptables -L -n  取消限制,通过序号 iptables -D INPUT 1  映射8081为80 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081  端口映射 iptables -t nat -L -n  指定IP开放指定端口 针对IP1.1.1.1开放3306端口 iptables -I INPUT -s 1.1.1.1 -p tcp --dport 3306 -j ACCEPT 
firewalld限制
重新加载配置 firewall-cmd --reload  查看已经开放的端口 firewall-cmd --list-ports  关闭已开放的端口,以80端口为例 firewall-cmd --permanent --remove-port=80/tcp  批量开放70到100之间的所有端口 firewall-cmd --zone=public --add-port=70-100/tcp --permanent  批量关闭70到100之间的端口 firewall-cmd --permanent --remove-port=70-100/tcp --remove-port=80-90/tcp  批量限制ip,限制1.1.1.0/24的所有ip访问80端口 firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='1.1.1.0/24' port protocol='tcp' port='80' reject"  允许单个ip访问80端口 firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='1.1.1.1' port protocol='tcp' port='80' accept"  批量允许多ip访问80端口 firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='1.1.1.0/24' port protocol='tcp' port='80' accept"  查看rich-rule firewall-cmd --zone=public --list-rich-rules  单个IP firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='1.1.1.1' reject  IP段 firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='1.1.1.0/24' reject  单个IP允许访问某个端口 firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=1.1.1.2 port port=80  protocol=tcp  accept  reject 拒绝  accept 允许

谨慎操作,以免对系统造成不必要的损害。在修改配置文件之前,最好备份原始文件。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!