1. 程式人生 > >Linux 系統安全配置 Debian => 禁止root SSH登陸+配置SSH Key+配置iptables

Linux 系統安全配置 Debian => 禁止root SSH登陸+配置SSH Key+配置iptables

ssh-key fir 應用 ble exc 當前 root密碼 exchange ports

Linux 系統安全配置 Debian => 禁止root SSH登陸+配置SSH Key+配置iptables

當我們安裝完Linux系統作為服務器後,總有一系列的安全配置需要進行。特別是當你的服務器Ip是對外網開放的話。全世界有很多不懷好意的人,不斷試圖窮舉你的root密碼,嘗試登陸。那麽為Linux服務器增加一些安全措施,是很有必要的。本文基於Debian 9.5。

本文讀者需要有一定的linux基礎,有一定的網絡與英語基礎。知道如何使用nano/vim編輯器。不過總體而言,本文是為初級用戶編寫。

系統更新

在配置前更新一下系統

apt update
apt upgrade -y

配置sudo

新增一個用戶,用於替代root進行登陸

apt install sudo -y
useradd -m -s /bin/bash youruser
passwd youruser

為新增的用戶增加sudo權限

visudo

youruser  ALL=(ALL:ALL) NOPASSWD:ALL

配置ssh配置,禁止root登陸,禁止空密碼登陸,然後重啟ssh服務

nano /etc/ssh/sshd_config

PermitRootLogin no
PermitEmptyPasswords no

service sshd restart

配置好後,你可以通過新增的用戶ssh登陸服務器,可以通過sudo命令執行需要高權限的命令。如果希望完全切換到root賬戶,可以使用

sudo -i

配置ssh key

配置ssh key後,可以通過公鑰私鑰的驗證方法驗證模式,驗證用戶身份。這樣的驗證方式更加安全,便捷。配置成功後,ssh登陸服務器無需再繁瑣地輸入密碼。

註意:下述部分配置會禁止ssh密碼登陸,請在重啟服務前將key放到正確的位置。如果你不清楚自己在做什麽,建議在你能夠使用非ssh手段登陸服務器的情況下進行嘗試。

下述配置用於禁止密碼登陸,開啟公鑰驗證登陸。

nano /etc/ssh/sshd_config

PasswordAuthentication no
PubkeyAuthentication yes

windows客戶機產生密鑰可通過git for windows生成,產生的key存放於C:\Users\..\.ssh目錄。生成命令為:

ssh-keygen

將客戶端的公鑰,拷貝到服務器的對應用戶的.ssh目錄

scp ./id_rsa.pub  youruser@ip:~/.ssh/authorized_keys

如果有多個客戶機,可以使用cat命令添加多個公鑰

cat id_rsa.pub > ~/.ssh/authorized_keys

最後重啟ssh服務,使配置生效

service sshd restart

iptables與ip6tables配置

更多關於iptables配置信息,可參考:

https://wiki.debian.org/iptables
https://wiki.debian.org/DebianFirewall#Using_ip6tables_for_IPv6_traffic

nano /etc/iptables.rules
*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn‘t use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
#-A INPUT -p tcp -s yourip --dport yourport -j ACCEPT
#-A INPUT -p tcp --dport yourport -j ACCEPT
#-A INPUT -p udp --dport yourport -j ACCEPT

# Allows SSH connections 
# The --dport number is the same as in /etc/ssh/sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Now you should read up on iptables rules and consider whether ssh access 
# for everyone is really desired. Most likely you will only allow access from certain IPs.

# Allow ping
#  note that blocking other types of icmp packets is considered a bad idea by some
#  remove -m icmp --icmp-type 8 from this line to allow all kinds of icmp:
#  https://security.stackexchange.com/questions/22711
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log iptables denied calls (access via ‘dmesg‘ command)
#-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT
nano /etc/ip6tables.rules
*filter

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT

-A INPUT -i lo -j ACCEPT
-m state --state ESTABLISHED,RELATED -A INPUT -j ACCEPT
-A INPUT -p icmpv6 -j ACCEPT

COMMIT

使配置生效可使用命令

iptables-restore < /etc/iptables.rules
ip6tables-restore < /etc/ip6tables.rules

開機啟動時,導入iptables規則

nano /etc/network/if-pre-up.d/iptables

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.rules
/sbin/ip6tables-restore < /etc/ip6tables.rules

chmod +x /etc/network/if-pre-up.d/iptables

保存當前的iptables rules可使用命令

iptables-save > /etc/iptables.rules

查看防火墻規則

iptables -L -n -v
ip6tables -L -n -v

至此,安全配置已完成,你可以在上述配置中添加自己的防火墻規則,例如哪些Ip能夠訪問服務器,哪些端口能夠開放。然後使用iptables-restore命令刷新這些防火墻規則。

Linux 系統安全配置 Debian => 禁止root SSH登陸+配置SSH Key+配置iptables