[Security] Các nguyên tắc cơ bản để bảo mật Linux server tốt hơn

1. Bảo vệ hệ thống server vật lý:
Các nguyên tác dưới đây sẽ là thừa thãi nếu bạn không đặt quan trọng cho việc bảo vệ server vật lý của mình.
Hãy luôn coi trọng việc bảo vệ server dưới góc độ con người và thiên tai.

2. Luôn luôn sử dụng các giao thức có mã hóa cho việc truyền dữ liệu trên mạng
Việc chúng ta sử dụng các giao thức không mã hóa như FTP, telnet, rlogin sẽ luôn là một mối đe dọa lớn trong việc bảo mật server, các thông tin được truyền một cách rất "sáng sủa" trên mạng và bất kỳ ai cũng có thể "bắt" lấy nó.

3. Chỉ cài đặt những services thực sự cần thiết để giảm thiểu rủi ro:
Một nguyên tắc khác trong việc bảo mật server: càng phô trương, bạn càng dễ bị nhòm ngó.
- Vô hiệu hóa IPv6:
sudo nano /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no
4. Luôn luôn cập nhật các bản vá bảo mật cho Kernel, services:
Cũng giống như các nền tảng server khác, Linux cũng luôn tiềm tàng những lỗ hổng bảo mật chưa được tìm ra. Một ví dụ điển hình là lỗ hổng heartbleed trong thời gian gần đây. Do đó, đừng xem nhẹ việc upgrade Kernel và services.

5. Thiết lập bảo mật cho user
- Một mật khẩu phức tạp với độ dài tối thiểu là 8 ký tự bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt:
Ví dụ: 8FiQ(_o;LL
- Tuyệt đối không sử dụng user root cho việc remote:
Không cho phép user root login thông qua SSH
sudo nano /etc/ssh/sshd_config
PermitRootLogin no
Chỉ cho phép user được chỉ định login thông qua SSH:
AllowUsers username
Sử dụng SSH v2:
Protocol 2
- Hạn chế sử dụng các mật khẩu đã sử dụng trước đây
- Khóa tất cả các tài khoản không có mật khẩu
awk -F: '($2 == "") {print}' /etc/shadow
passwd -l accountName
- Kiểm tra và chắc chắn không có bất kỳ tài khoản nào set UID = 0 trừ tài khoản root
awk -F: '($3 == "0") {print}' /etc/passwd
- Kiểm tra thời gian hết hạn mật khẩu của user:
chage -l user_name
và set các giá trị cần thiết
chage -M 60 -m 7 -W 7 userName
Trong đó:
-M: Đặt số ngày tối đa bạn phải thay đổi mật khẩu
-m: Đặt số ngày tối thiểu bạn có thể thay đổi mật khẩu
-W: Đặt số ngày xuất hiện cảnh báo phải thay đổi mật khẩu

6. Kích hoạt firewall, SELinux:
Việc đó sẽ không bao giờ thừa thãi ngay cả khi bạn đã có 1 hardware firewall cho server của mình.

7.  Luôn kiểm tra tình trạng các port đang được mở trên server:
netstat -tulpn
hoặc sử dụng nmap để scan port từ client
nmap -v -A IP_address

8. Ẩn version của các services được sử dụng trên server

9. Luôn kiểm tra log của hệ thống để phát hiện các bất thường:
/var/log/message – Where whole system logs or current activity logs are available.
/var/log/auth.log – Authentication logs.
/var/log/kern.log – Kernel logs.
/var/log/cron.log – Crond logs (cron job).
/var/log/maillog – Mail server logs.
/var/log/boot.log – System boot log.
/var/log/mysqld.log – MySQL database server log file.
/var/log/secure – Authentication log.
/var/log/utmp or /var/log/wtmp : Login records file.
/var/log/yum.log: Yum log files.
10. Tạo backup plan cho server

Tham khảo và tổng hợp:
http://www.cyberciti.biz/tips/linux-security.html
http://www.thegeekstuff.com/2011/03/apache-hardening/
http://www.cyberciti.biz/faq/tcp-wrappers-hosts-allow-deny-tutorial/