CSF firewall (ConfigServer Security & Firewall) là một firewall rất phổ biến được phát hành miễn phí để tăng tính bảo mật cho các server Linux hiện nay. Bên cạnh những tính năng như một firewall, CSF hoạt động dựa trên iptables và tiến trình ldf để quét các tệp log nhằm phát hiện các dấu hiệu tấn công bất thường. CSF có một số tính năng cơ bản như ngăn chặn flood login, Port scans, SYN floods…
Điều kiện để cài đặt CSF Firewall
- Một Vps/ Dedicated đã cài HĐH CentOS
- RAM tối thiểu 1GB
- HDD/ SSD tối thiểu 15GB
- Hệ điều hành CentOS/ Ubuntu
- Quyền đăng nhập Root
Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cài đặt và cấu hình CSF Firewall trên CentOS 7.
Cài đặt các Module cần thiết
Cài đặt Perl Module để chạy CSF script:
# yum install perl-libwww-perl
Tải CSF Firewall về máy chủ
CSF Firewall không có sẵn trên máy chủ, vì vậy chúng ta phải tải về:
# cd /tmp
# wget https://download.configserver.com/csf.tgz
Cài đặt CSF Firewall
Tiến hành giải nén và cài đặt:
# tar -xzf csf.tgz
# cd csf
# sh install.sh
Bây giờ chúng ta sẽ kiểm tra xem CSF firewallcó thực sự hoạt động trên máy chủ không:
# cd /usr/local/csf/bin/
# perl csftest.pl
Đầu ra như sau:
Testing ip_tables/iptable_filter...OK Testing ipt_LOG...OK Testing ipt_multiport/xt_multiport...OK Testing ipt_REJECT...OK Testing ipt_state/xt_state...OK Testing ipt_limit/xt_limit...OK Testing ipt_recent...OK Testing xt_connlimit...OK Testing ipt_owner/xt_owner...OK Testing iptable_nat/ipt_REDIRECT...OK Testing iptable_nat/ipt_DNAT...OK RESULT: csf should function on this server
Nếu kết quả hiển thị như hình bên trên thì CSF firewall sẽ hoạt động mà không gặp sự cố nào trên máy chủ.
Tắt Firewall mặc định trên hệ thống máy chủ
Trước khi bước vào quá trình cấu hình, điều đầu tiên bạn phải biết là “CentOS 7” có một ứng dụng tường lửa mặc định được gọi là “firewalld”. Bạn phải dừng firewalld và loại bỏ nó.
Tắt Firewall mặc định trên CentOS:
# systemctl stop firewalld
Vô hiệu hóa Firewall vĩnh viễn:
# systemctl disable firewalld
Khởi động CSF Firewall
Sau khi cài đặt xong ở các bước trên, chúng ta cần khởi động CSF:
# systemctl start csf
# systemctl start lfd
Chạy và cho phép tự động kích hoạt lại mỗi khi Reboot máy chủ:
# systemctl enable csf
# systemctl enable lfd
Cấu hình CSF Firewall
Mặc định thì script trên sẽ cài đặt và chạy ở chế độ “Testing”, có nghĩa là server lúc này chưa được bảo vệ toàn diện. Để tắt chế độ “Testing” bạn cần cấu hình các lựa chọn TCP_IN, TCP_OUT, UDP_IN và UDP_OUT cho phù hợp với nhu cầu.
Mở tệp cấu hình csf.conf:
# nano /etc/csf/csf.conf
Khi đã cấu hình xong, tắt chế độ TESTING bằng cách chuyển TESTING = “1” thành TESTING = “0”
TESTING = "0"
Thiết lập Port
Chỉnh sửa các thông số Port cho phù hợp, thông thường chỉ mở Port 22(SSH), 80(http), 443(https).
# Allow incoming TCP ports TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"
Thiết lập kết nối
Các thông số của CSF firewall nằm trong tệp csf.conf:
# nano /etc/csf/csf.conf
Tổng số IP được kết nối trên một máy chủ. Nếu muốn tắt, hãy đặt tính năng này thành 0:
CT_LIMIT = "20"
Khoảng thời gian theo dõi kết nối tính bằng giây:
CT_INTERVAL = "30"
Đặt giá trị này thành 1 để chặn vĩnh viễn ips:
CT_PERMANENT = 1
Nếu bạn chọn chặn IP tạm thời cho CT, thì sau khi hết thời gian chặn 1800
giây, nếu tái phạm quy tắc thì IP vẫn sẽ bị chặn lại:
CT_BLOCK_TIME = 1800
Nếu chúng ta chỉ muốn block các IP kết nối qua các Port cụ thể thì hãy thêm các cổng (ví dụ: 22,23,80,443). Để trống thì các IP kết nối vi phạm quy tắc trên bất kỳ Port nào cũng sẽ bị block:
CT_PORTS = "22,80,443"
Thiết lập nâng cao
Theo mặc định, lfd cũng sẽ chặn IP dưới tệp csf.allow, vì vậy nếu bạn muốn một IP trong tệp csf.allow không bao giờ bị chặn bởi lfd, thì hãy thay đổi “IGNORE_ALLOW” thành “1”. Điều này rất hữu ích khi bạn có một IP tĩnh ở nhà hoặc tại văn phòng và muốn đảm bảo rằng IP của bạn không bao giờ bị chặn bởi tường lửa trên máy chủ internet của bạn.
IGNORE_ALLOW = "1"
Cho phép ping ICMP gửi đến
ICMP_IN = "1"
Cho phép ping ICMP gửi đi:
ICMP_OUT = "1"
CSF có tùy chọn cho phép và từ chối quyền truy cập theo quốc gia, sử dụng CIDR (Mã quốc gia):
CC_DENY = "CN,UK,US"
CC_ALLOW = "ID,MY,DE"
Bạn có thể đặt địa chỉ email được LFD sử dụng để gửi email về các sự kiện “Đăng nhập SSH” và người dùng chạy lệnh “su”, thay đổi giá trị thành “1”.
LF_SSH_EMAIL_ALERT = "1"
LF_SU_EMAIL_ALERT = "1"
Và sau đó xác định địa chỉ email bạn muốn sử dụng:
LF_ALERT_TO = "mymail@mydomain.tld"
CONNLIMIT: Quy tắc dưới đây sẽ cho phép 5 kết nối đồng thời trên cổng 22 và 20 kết nối cùng lúc trên cổng 443.
CONNLIMIT = "22;5;443;20"
PORTFLOOD: Quy tắc dưới đây sẽ chặn địa chỉ IP nếu có hơn 5 kết nối được thiết lập trên cổng 22 bằng giao thức TCP trong vòng 900 giây
Cú pháp để thực hiện:
port1;protocol1;connection_count1;time1,port2;protocol2;connection_count2;time2
PORTFLOOD = "22;tcp;5;900"
Lỗi thường găp khi khởi động
Khi khởi động CSF, chúng ta thường hay gắp một số thông báo lỗi, tuy nhiên chúng ta sẽ thực hiện các bước sau đây để xử lý triệt để.
Hiển thị thông báo lỗi 1
*WARNING* The MaxMind Geolite databases will soon be deprecated, disable CC_OLDGEOLITE to start using the new Geolite2 databases
Mở tệp csf.conf:
# nano /etc/csf/csf.conf
Tìm dòng:
CC_OLDGEOLITE = "1"
Đổi thành:
CC_OLDGEOLITE = "0"
Hiển thị thông báo lỗi 2
*WARNING* Binary location for [HOST] [/usr/bin/host] in /etc/csf/csf.conf is either incorrect, is not installed or is not executable
Cài đặt thêm:
# yum install bind-utils
Hiển thị thông báo lỗi 3
*WARNING* RESTRICT_SYSLOG is disabled. See SECURITY WARNING in /etc/csf/csf.conf
Tìm dòng:
RESTRICT_SYSLOG = "0"
Đổi thành:
RESTRICT_SYSLOG = "3"
Sau khi thiết lập các thông số, cần phải khởi động lại CSF:
# csf -r
Những tệp cấu hình
Toàn bộ thông tin cấu hình được lưu ở các tệp trong folder /etc/csf. Nếu bạn chỉnh sửa các tệp này thì cần khởi động lại để thay đổi có hiệu lực.
- csf.conf : File cấu hình chính để quản lý.
- csf.allow : Danh sách địa chỉ IP cho phép qua firewall.
- csf.deny : Danh sách địa chỉ IP từ chối qua firewall.
- csf.ignore : Danh sách địa chỉ IP cho phép qua firewall và không bị block nếu có vấn đề.
- csf.*ignore : Danh sách user, IP được ignore.
Một số lệnh cơ bản thường dùng
Sử dụng các lệnh dưới đây để thực thi các quy tắc:
- csf -s //Khởi động CSF
- csf -r //Khởi động lại CSF
- csf -x //Tắt CSF
- csf -e //Mở lại CSF
- csf -f //Xóa và làm sạch các quy tắc Firewall trong trường hợp muốn cấu hình lại
- csf -d IPADDRESS //Block địa chỉ IP, ví dụ: csf -d 192.168.1.109
- csf -dr IPADDRESS //Xóa địa chỉ IP đã bị block, ví dụ: csf -dr 192.168.1.109
- csf -a IPADDRESS //Allow địa chỉ IP, ví dụ: csf -a 192.168.1.109
- csf -ar IPADDRESS //Xóa địa chỉ IP đã được allow, ví dụ: csf -ar 192.168.1.109
- csf -g IPADDRESS //Kiểm tra địa chỉ IP có bị block không, ví dụ: csf -g 192.168.1.109
Xóa CSF khỏi máy chủ
Nếu bạn muốn xóa hoàn toàn CSF, chỉ cần sử dụng script sau:
# /etc/csf/uninstall.sh
Việc này sẽ xóa toàn bộ CSF nên cần cân nhắc khi dùng. Nếu muốn tạm thời tắt CSF thì có thể chuyển chế độ TESTING sang 1.
Kết luận !
Kết thúc quá trình cài đặt Firewall trên máy chủ CentOS. Nếu có ý kiến đóng góp, vui lòng để lại bình luận bên dưới.