系统安全
SSH密钥登陆
debian需要打开/etc/ssh/sshd_config 文件,修改其中的port后面的数字
nano /etc/ssh/sshd_config
修改其中的port后面的数字,为你要ssh登陆的端口,cltrl + x保存,回车退出
ssh-key登陆
生成密钥对,使用ssh-keygen,为了安全性更高shi'y
ssh-keygen -t ed25519
要求输入密钥的保存路径+名称.默认是/.ssh/id_rsa,之后在 ./ssh/文件夹下就生成了一对密钥.需要将 .pub上传到服务器: 手动上传,写入 authorized_keys 文件.上传公钥到服务器,scp上传 id_rsa.pub 到root用户的.ssh文件夹(没有需要创建) 将公钥内容写入 authorized_keys .生成的公钥写入了authorized_keys. 修改权限,允许ssh密钥登陆
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
允许ssh密钥登陆
nano /etc/ssh/sshd_config
确保,以下字段内容
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
注: RSAAuthentication 为 ssh 1代,在新的 linux 系统版本中可能不存在,保证另外两个开启即可. 重启ssh服务,或者直接 reboot 现在应该可以使用ssh-key登陆了
禁止ssh密码登陆
警告 ,除非确认ssh-key可以正常登陆,否则关闭密码登陆后,只能重装系统或者网页 vnc 再开启. 编辑 /etc/ssh/sshd_config 文件.PasswordAuthentication yes 改为PasswordAuthentication no. 重启 ssh 服务,或者 reboot.
安装fail2ban
//Debian / ubuntu
apt-get install fail2ban
相关命令 重启
service fail2ban restart
验证状态
fail2ban-client ping
返回,验证完成后,debian会加入开机启动
Server replied: pong
详细设置Fail2Ban 的配置文件在 /etc/fail2ban/ 下,主配置文件是 jail.conf ,但每次配置文件更新都会重新覆盖jail.conf,初次配置需要拷贝 jail.conf 为 jail.local ,再更改.这样每次Fail2Ban都会先从 jail.local 读取配置再更新到jail.conf. 命令,备份
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
配置:启用 SSH 配置,内置规则,只要添加enabled = true字段即可.字段也非常容易明白
#
# SSH servers
#
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
重启服务 service fail2ban restart
使用 UFW 来设置防火墙
安装 UFW
输入下面的命令,安装ufw软件包:
sudo apt install ufw
安装过程不会自动激活防火墙,以避免服务器被锁住。你可以检查 UFW 的状态,输入:
sudo ufw status verbose
UFW 默认策略
默认情况下,UFW 阻塞了所有进来的连接,并且允许所有出去的连接。这意味着任何人无法访问你的服务器,除非你打开端口。运行在服务器上的应用和服务可以访问外面的世界。
默认的策略定义在/etc/default/ufw文件中,并且可以通过使用sudo ufw default
sudo ufw app list
允许服务,例如sudo ufw allow OpenSSH 如果 SSh 服务器没有监听默认端口 22,你还需要打开那个端口。 例如,你的 SSH 服务器 监听端口 233,你将会执行:
sudo ufw allow 233/tcp
删除 UFW 规则 有两种不同的方式可以删除 UFW 规则。通过规则序号和通过指定的规则。 通过规则序号来删除 UFW 规则很简单,特别是你刚接触 UFW。 想要通过规则序号来删除,你需要找到你想删除的规则序号。想要这么做,运行下面的命令:
sudo ufw status numbered
输出:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere
想要删除规则,序号为3,这个规则允许对端口8080的连接,你可以使用下面的命令:
sudo ufw delete 3
删除规则的第二种方法就是指定实际的规则。例如,如果你添加过一个打开端口8069的规则,你可以通过下面的命令删除它:
sudo ufw delete allow 8069
禁用 UFW 如果因为任何原因,你需要停止 UFW,并且使得所有规则失效,你可以运行:
sudo ufw disable
稍后,如果你想重新启用 UFW,并且激活所有规则,输入:
sudo ufw enable
sudo ufw default deny
运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。
网络优化
开启 TCP BBR
修改系统变量:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
保存并执行 sysctl -p 生效。执行,
sysctl net.ipv4.tcp_available_congestion_control
如果结果是这样
root@debian:~# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
就开启了。
lsmod | grep bbr
TCP优化
增加TCP连接数量
nano /etc/security/limits.conf
添加两行:
* soft nofile 51200
* hard nofile 51200
设置ulimit:
ulimit -n 51200
修改 sysctl.conf
nano /etc/sysctl.conf
复制代码:
# 系统所有进程一共可以打开的文件数量, 每个套接字也占用一个文件描述字
fs.file-max = 1491124
# 提高整个系统的文件限制
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# 增大内核 backlog 参数,使得系统能够保持更多的尚未完成 TCP 三次握手的套接字。
net.ipv4.tcp_max_syn_backlog = 1048576
net.core.netdev_max_backlog = 1048576
net.core.somaxconn = 1048576
# 表示用于向外连接的端口范围
net.ipv4.ip_local_port_range = 4096 65000
# 预留端口
net.ipv4.ip_local_reserved_ports = 3000,3306,6379,27017,27018
# 系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 131072
# 启用 TIME_WAIT 复用,使得结束 TIEM_WAIT 状态的套接字的端口可以立刻被其他套接字使用
net.ipv4.tcp_tw_reuse = 1
# 表示系统同时保持TIME_WAIT的最大数量
net.ipv4.tcp_max_tw_buckets = 55000
# 优化 nf_conntrack 参数,防止服务器出现大量短链接的时候出现丢包
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300
# 缩短套接字处于 TIME_WAIT 的时间, 60s -> 15s
net.ipv4.tcp_fin_timeout = 15
# 减小 tcp keepalive 探测次数,可以即时释放长链接
net.ipv4.tcp_keepalive_probes = 3
# 缩短 tcp keepalive 探测间隔时间,同上
net.ipv4.tcp_keepalive_intvl = 15
# 修改 tcp keepalive 默认超时时间
net.ipv4.tcp_keepalive_time=1200
# 关闭慢启动重启(Slow-Start Restart), SSR 对于会出现突发空闲的长周期 TLS 连接有很大的负面影响
net.ipv4.tcp_slow_start_after_idle = 0
# 启用 MTU 探测,在链路上存在 ICMP 黑洞时候有用(大多数情况是这样)
net.ipv4.tcp_mtu_probing = 1
# 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
# 当某个节点可用内存不足时, 系统会倾向于从其他节点分配内存。对 Mongo/Redis 类 cache 服务器友好
vm.zone_reclaim_mode = 0
# 当内存使用率不足10%(默认值60%)时使用 swap,尽量避免使用 swap,减少唤醒软中断进程
vm.swappiness = 10
# 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务 Mongo/Redis 的性能。
vm.overcommit_memory = 1
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 为了对NAT设备更友好,建议设置为 0。
net.ipv4.tcp_tw_recycle = 0
# 启用 tcp fast open
net.ipv4.tcp_fastopen = 3
# 剩余内存 > 300m
net.core.rmem_default = 174760
net.core.rmem_max = 2097152
net.ipv4.tcp_rmem = 4096 174760 67108864
net.core.wmem_default = 131072
net.core.wmem_max = 2097152
net.ipv4.tcp_wmem = 4096 131072 67108864
net.ipv4.tcp_mem = 131072 262144 524288
# END OF LINE
保存应用
sysctl -p
设置DNS
apt install dnsutils -y
添加文件make_resolv_conf
cat > /etc/dhcp/dhclient-enter-hooks.d/make_resolv_conf<< EOF
#!/bin/sh
make_resolv_conf(){
:
}
EOF
添加文件resolved.conf
cat > /etc/systemd/resolved.conf<< EOF
[Resolve]
DNS=1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001
FallbackDNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Domains=~.
DNSSEC=yes
DNSOverTLS=yes
MulticastDNS=yes
LLMNR=yes
Cache=yes
DNSStubListener=yes
ReadEtcHosts=yes
ResolveUnicastSingleLabel=yes
EOF
重启服务
systemctl enable systemd-resolved.service
systemctl restart systemd-resolved.service
添加服务resolv.conf
cat > /etc/resolv.conf<< EOF
nameserver 127.0.0.53
EOF
删除多余内核
查看当前系统所有内核
dpkg -l|grep linux-image | awk '{print $2}'
删除多余内核
apt-get purge 其余内核名称
删除内核后llinux内核显示deinstal
sudo dpkg -P linux-imagxxxx
更新grub 系统引导文件并重启VPS
update-grub && reboot