Khi thiết lập hệ thống máy chủ hosting/vps thì không thể thiếu hệ thống tường lửa, một “rào cản” “bức tường” vững chắn bảo vệ hệ thống. Mặc định ở OS CentOS được tích hợp sẳn Firewalld, tuy nhiên còn một công cụ khác mà được sử dụng nhiều là CSF (ConfigServer & Firewall). Và trong bài viết hôm nay Minh Duy Solutions sẽ giới thiệu về CSF, các thông số cũng như tính năng bên trong để giúp bạn dần nắm rõ hơn và có thể chủ động cho việc bảo mật.
Các câu lệnh thường dùng trong CSF (ConfigServer & Firewall)
Lệnh | Chú thích | Ví dụ thực tế |
csf -e | Bật csf (start csf) | [root@sv ~]#csf -e |
csf -x | Tắt csf (stop csf) | [root@sv ~]#csf -x |
csf -s | Bắt đầu các quy tắt tường lửa (Start the firewall rules) | [root@sv ~]#csf -s |
csf -f | Flush/Stop firewall rules | [root@sv ~]#csf -f |
csf -r | Khởi động lại tường lữa | [root@sv ~]#csf -r |
csf -a | Cho phép 1 IP vào whitelist | [root@sv ~]#csf -a 45.252.249.102 |
csf -td | Thêm IP vào danh sách từ chối tạm (/var/lib/csf/csf.tempban) | [root@sv ~]#csf -td 45.252.249.102 |
csf -tr | Xóa IP khỏi elẹnh cấm tạm hoặc danh sách cho phép | [root@sv ~]#csf -tr 45.252.249.102 |
csf -tf | Xóa tất cả IP từ các mục IP tạm | [root@sv ~]#csf -tf |
csf -d | Lệnh cấm IP. IP sau khi bị cấm sẽ nằm trong /etc/csf/csf.deny | [root@sv ~]#csf -d 45.252.249.102 |
csf -dr [IP] | Bỏ chặn IP đã bị cấm trong /etc/csf/csf.deny | [root@sv ~]#csf -dr 45.252.249.102 |
csf -dr | Lệnh này không có option sẽ xóa chặn tất cả các IP trong /etc/csf/csf.deny | [root@sv ~]#csf -dr |
csf -g | Search the iptables and ip6tables rules for a match (e.g. IP, CIDR, Port Number) | [root@sv ~]#csf -g 45.252.249.102 |
csf -t | Hiển thị danh sách hiện tại các IP tạm thời cho phép và từ chối TTL và nhận xét. | [root@sv ~]#csf -t |
Các thông số cấu hình trong CSF cần nắm.
Sau khi làm theo với các lệnh sử dụng, mình sẽ giới thiệu và giải thích các thông số bên trong file cấu hình để bạn có thể thiết lập một file config hoàn chỉnh, an toàn với nhu cầu sử dụng riêng.
Thông số cơ bản về CSF.
CSF sau khi cài đặt xong file cấu hình sẽ nằm trong /etc/csf/csf.conf. Các file cấu hình khác như csf.allow, csf.deny, csf.logfiles… sẽ nằm tại /etc/csf/
Trong đó các tham số khi cấu hình có dạng ARGS = “VALUE” bạn cần nằm như sau:
- VALUE = “0” : Disable (Không kích hoạt)
- VALUE = “1” : Enable (Kích hoạt)
- VALUE > 1 (VALUE = “20” , VALUE = “30” … ): Giới hạn tối đa (Ví dụ: Giới hạn tối đa 30 kết nối)
- VALUE >1 (VALUE = “1800” , VALUE = “3600”… ): Thời gian tối đa (Ví dụ: Giới hạn 1800s)
Cấu hình cơ bản bên trong file /etc/csf/csf.conf
- TESTING = “0”
Mặc định khi vừa cài TESTING = “1”, với TESTING = “1” thì LFD daemon (Login Fail Detect daemon) sẽ không hoạt động, do đó nếu có gì sai sót thì server cũng sẽ không block IP của bạn. Nếu cấu hình đã ổn thì bạn tắt TESTING để LFD bắt đầu hoạt động và chặn các IP tấn công.
- TESTING_INTERVAL = “5”
Thời gian chạy cronjob để clear iptables nếu như TESTING=1, tính bằng phút.
- AUTO_UPDATES = “0”
0 = Disable có nghĩa tắt cập nhật tự động. Nếu bạn muốn tự động cập nhật hãy chuyển sang 1
- TCP_IN = “22,25,53,80,443“
Allow incoming TCP ports: Cho phép người dùng kết nối đến các dịch vụ với port tương ứng cho phép, SSH, Mail, DNS.. Nếu bạn cần mở thêm port hãy thêm Port vào đây.
- TCP_OUT = “25,80“
Allow outgoing TCP port: Cho phép server kết nối ra với các port tương ứng.
- UDP_IN = “20,21,53,443”
Allow incoming UDP ports: Cho phép người dùng sử dụng dịch vụ với port tương ứng.
- UDP_OUT = “20,21,53,113,123,443”
Allow outgoing UDP ports: Cho phép server truy vấn kết nối với port tương ứng ra bên ngoài.
- ICMP_IN = “1”
Cho phép người dùng PING đến server. Nếu bạn không muốn người dùng PING bạn hãy chuyển về là 0 tương ứng với Disable.
- ICMP_IN_RATE = “1/s“
Thông số này sẽ giới hạn tần số ping đến server là 1/s. Nếu ping nhanh hơn tốc độ này sẽ nhận được “Request timeout”. Trong trường hợp nếu nhiều người cùng ping đến server cùng lúc, thì phần lớn sẽ nhận được các phản hồi “Request timeout” do server chỉ nhận 1 request/s, điều này làm chúng ta lầm tưởng kết nối mạng có vấn đề, mạng bị chập chờn nhưng thật ra không phải như vậy. Chỉ cần nâng thông số này lên cao một chút hoặc bỏ luôn ( set giá trị = 0 ) sẽ khắc phục được tình trạng trên. Ảnh dưới mình đã nâng lên 30 request/s
- ETH_DEVICE = “eth0“
Mặc định csf sẽ cấu hình iptables để filter traffic trên toàn bộ các card mạng, ngoại trừ card loopback. Nếu như bạn muốn rules iptables chỉ applied vào card mạng “eth0” thì khai báo ở đây.
- ETH_DEVICE_SKIP = “eth1, eth2“
Nếu bạn không muốn rules iptables không applied vào card mạng nào thì khai báo ở đây. Ví dụ card “eth1,eth2” là card local, bạn không muốn filter trên card này thì cấu hình như trên.
- DENY_IP_LIMIT = “200”
Giới hạn số lượng IP bị block “vĩnh viễn” bởi CSF (các IP này sẽ được lưu trong file /etc/csf/csf.deny). Con số này tùy thuộc vào resource của mỗi server, nếu dùng VPS thì con số này vào khoảng “200” là hợp lý, còn dedicated server thì khoảng “500”. Khi số lượng IP bị block vượt qua con số này, csf sẽ tự động unblock IP cũ nhất (IP ở dòng 1 của file /etc/csf/csf.deny).
- LF_DAEMON = “1”
Tham số 1 kích hoạt tính năng Login fail detection
- LF_CSF = “1”
Tham số 1 kích hoạt tính năng Auto start khi CSF bị stop
- PACKET_FILTER = “1”
Filter các gói tin TCP không hợp lệ (INVALID state như : sequence number không đúng , kết nối ko được thực hiện đủ qua 3 bước bắt tay…)
- SYNFLOOD = “1”
- SYNFLOOD_RATE = “75/s”
- SYNFLOOD_BURST = “25”
Enable synflood protection: Nếu 1 IP gửi 75 cú SYN trong vòng 1s và số lượng SYN connection tồn tại trên server đạt trên 25 thì block IP đó (temp block).
- CONNLIMIT = “80;20“
Giới hạn số lượng new concurrent connection đến server trên mỗi IP. Ví dụ trên có nghĩa: mỗi IP được phép mở 20 concurrent new connection đến port 80 trên server.
- PORTFLOOD = “80;tcp;20;5“
Tham số này sẽ giới hạn số lượng connection đến một port cụ thể trong một khoảng thời gian nhất định. Ví dụ như trên có nghĩa, nếu nhiều hơn 20 kết nối TCP đến port 80 trong vòng 5s thì block IP đó tối thiểu 5s tính từ packet cuối cùng của IP đó. Sau 5s IP đó sẽ tự động được unlock và truy cập bình thường.
- LF_ALERT_TO = “email@domain”
Mặc định email thông báo sẽ được gửi về root của server. Nếu bạn muốn gửi đến email khác nảy nhập email vào đây.
- LF_SELECT = “1”
Tham số này có nghĩa khi một IP vi phạm các rule của LFD thay vì block toàn bộ traffic từ IP này đến server thì chỉ block traffic đến dịch vụ mà IP này login fail (ví dụ như Login FTP, Mail sai nhiều lần thì block truy cập đến FTP,Mail nhưng vẫn cho phép truy cập vào website bình thường).
- LF_SSHD = “5”
- LF_SSHD_PERM = “1800“
khi cấu hình tham số này thì SSH sai 5 lần sẽ bị khóa IP.
- LF_DISTATTACK = “0”
Khi phát hiện tấn công brute force từ mạng botnet. Nếu như một account bị login sai quá giới hạn cho phép từ nhiều IP khác nhau thì sẽ block toàn bộ IP đã login sai.
- LF_DISTATTACK_UNIQ = “2”
Số lượng IP tối thiểu để nhận biết đây là tấn công phân tán.
- CT_LIMIT = “150”
Giới hạn số lượng connection từ một IP đến server. Nếu số lượng đó vượt quá 150 như cấu hình thì temp block IP đó.
- CT_INTERVAL = “30”
Các lần scan kiểm tra cách ngay 30s.
Ngoài ra còn một vài tham số khác ít sử dụng mình sẽ không để cập trong đây. Hi vọng với bài viết này sẽ giúp cho bạn thiết lập cấu hình bảo mật thật tốt cho máy chủ server của mình khỏi các cuộc tấn công từ bên ngoài vào.