Bối cảnh sử dụng
Khi sử dụng các Server VPS Linux chúng ta thường sử dụng SSH remote thao tác với Server.
Mặc dù SSH là một giao thức đã được bảo mật hoạt động ở lớp trên trong mô hình TCP/IP (thường) sử dụng port 22 nhưng cũng tồn tại những rủi ro nhất định cho trong quá trình vận hành lý do là vì ssh phơi ra phía ngoài internet. Việc bị dò mật khẩu là một trong những cách tấn công phổ biến nhất.

Chuẩn bị
1 Server Linux cài đặt Fail2ban
- OS: CentOS7
- RAM: >= 1 GB
- Disk: >= 10 GB
- CPU: >= 1 Core
- Update và cài đặt openssh-server
- IP: 10.10.10.244/24
1 máy là có cài đặt SSH Client để tiến hành dò ssh server phía trên
- Có cài đặt SSH Client
- IP: 10.10.10.217/24

Theo dõi ssh login failed trên Server
Trên máy Client.217 thực hiện ssh nhiều lần sai password
Trên máy Server.214 thực hiện kiểm tra
cat /var/log/secure | grep 'Failed password' | sort | uniq -c
Kết quả trả về
[root@server ~]# cat /var/log/secure | grep 'Failed password' | sort | uniq -c
1 Feb 14 14:39:49 centos7 sshd[4714]: Failed password for root from 10.10.10.217 port 43460 ssh2
1 Feb 14 14:39:54 centos7 sshd[4714]: Failed password for root from 10.10.10.217 port 43460 ssh2
1 Feb 14 14:40:12 centos7 sshd[4714]: Failed password for root from 10.10.10.217 port 43460 ssh2
[root@server ~]#
Trong quá trình này Client cứ ssh liên tục cho đến khi đoán được password đúng và BÙM!! server của bạn đã nằm trong tay người khác
Cài đặt và cấu hình
Cài đặt
yum install epel-release -y
yum install fail2ban -y
Cấu hình fail2ban
> /etc/fail2ban/jail.conf
cat << EOF >> /etc/fail2ban/jail.conf
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 600
findtime = 600
maxretry = 3
EOF
Trong đó
- ignoreip: không block những địa chỉ này
- bantime: khoảng thời gian block mặc định (giây)
- findtime: khoảng thời gian (giây) một IP phải login thành công
- maxretry: số lần login false tối đa
Cấu hình fail2ban cho ssh
cat << EOF >> /etc/fail2ban/jail.local
enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/secure maxretry = 5 bantime = 3600 EOF
Trong đó
- enabled: kích hoạt bảo vệ
- filter: giữ mặc định để sử dụng file cấu hình /etc/fail2ban/filter.d/sshd.conf
- action: fail2ban sẽ ban địa chỉ IP nếu match filter /etc/fail2ban/action.d/iptables.conf
- logpath: đường dẫn file log fail2ban
- maxretry: số lần login false tối đa
- bantime: thời gian ban IP 3600 giây = 1 giờ
Start fail2ban
systemctl enable fail2ban
systemctl start fail2ban
Kiểm tra rulues của fail2ban trên iptables
iptables -L
Kết quả trả về
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-SSH tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain f2b-SSH (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Thực hiện kiểm tra sau khi cài đặt fail2ban
Trên máy Client thực hiện ssh nhiều lần sai password lại
Kết quả: Sau 5 lần ssh thất bại do sai password máy Client sẽ bị block trong 1 tiếng
root@client:~# ssh [email protected]
ssh: connect to host 10.10.10.244 port 22: Connection refused
root@client:~#
Kiểm tra trên Server
cat /var/log/secure | grep 'Failed password' | sort | uniq -c
Để kiểm tra các IP đã bị fail2ban cấm ssh chúng ta thực hiện
fail2ban-client status sshd
Kết quả trả về
[root@server ~]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 6
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 10.10.10.217
[root@server ~]#
Để xóa IP đã bị cấm ra khỏi danh sách
fail2ban-client set sshd unbanip 10.10.10.217
Lúc này đứng trên Client có thể thực hiện ssh lại bình thường
root@client:~# ssh [email protected]
[email protected]'s password:
Kết luận
Fail2ban mà chúng tôi giới thiệu phía trên chỉ là một trong những giải pháp hiệu quả trong việc ngăn chặn bute-force. Việc phối hợp nhiều biện pháp khác nhau nhằm bảo vệ SSH là vô cùng cần thiết.
Các biện pháp Secure SSH thường được sử dụng nhằm tránh, hạn chế bị tấn công Brute force (Dò và thử đến khi đăng nhập được)
Username và Mật khẩu mạnh
Cấu hình timeout cho 1 session SSH, cấu hình /etc/ssh/sshd_config
ClientAliveInterval 360
ClientAliveCountMax 0
Không cho phép password trống, cấu hình /etc/ssh/sshd_config
PermitEmptyPasswords no
Giới hạn các user được phép SSH, cấu hình /etc/ssh/sshd_config
AllowUsers user1 user2
Thường để bảo mật chúng ta để các user được phép SSH là user thường sau khi login vào được server chúng ta mới thực hiện chuyển sang user khác để thao tác
Không cho phép root login, cấu hình /etc/ssh/sshd_config
PermitRootLogin no
Sử dụng mặc đinh Protocol2 cho SSH, cấu hình /etc/ssh/sshd_config
Protocol 2
Sử dụng port khác port 22, cấu hình /etc/ssh/sshd_config
Port 2345
Cho phép ssh từ một số IP, nhất đinh, cấu hình iptables
iptables -A INPUT -p tcp -s YourIP --dport 2345 -j ACCEPT
iptables -A INPUT -p tcp --dport 2345 -m state --state NEW -m recent --set --name ssh --rsource
iptables -A INPUT -p tcp --dport 2345 -m state --state NEW -m recent ! --rcheck --seconds 90 --hitcount 3 --name ssh --rsource -j ACCEPT
Bật sử dụng xác thực 2 lớp link
Sử dụng key để ssh thay cho password
Thao tác trên máy client
ssh-keygen -t rsa
Copy key qua Server
ssh-copy-id username@server
Và một vài secure khác khi được kết hợp trong hệ thống như VPN, Fail2ban
Tài liệu tham khảo
http://www.fail2ban.org/wiki/index.php/Main_Page










Add Comment