Giới thiệu
Tường lửa là một loại công cụ bảo mật mạng kiểm soát lưu lượng mạng trong và ngoài theo bộ quy tắc được xác định trước. Chúng tôi có thể sử dụng tường lửa cùng với các biện pháp an toàn khác để bảo vệ máy chủ của chúng tôi khỏi các cuộc tấn công và tấn công của tin tặc.
Thiết kế của tường lửa có thể là phần cứng chuyên dụng hoặc chương trình phần mềm chạy trên máy của chúng tôi. Trên CentOS 6, chương trình tường lửa mặc định là iptables.
Trong bài viết này, tôi sẽ chỉ cho bạn cách thiết lập tường lửa iptables cơ bản dựa trên ứng dụng Vultr "WordPress trên CentOS 6 x64", sẽ chặn tất cả lưu lượng truy cập ngoại trừ các dịch vụ web, SSH, NTP, DNS và ping. Tuy nhiên, đây chỉ là một cấu hình sơ bộ đáp ứng nhu cầu bảo mật chung. Bạn sẽ cần một cấu hình iptables tinh vi hơn nếu bạn có thêm yêu cầu.
Lưu ý :
Nếu bạn thêm địa chỉ IPv6 vào máy chủ của mình, bạn cũng nên thiết lập dịch vụ ip6tables. Cấu hình ip6tables nằm ngoài phạm vi của bài viết này.
Không giống như CentOS 6, iptables không còn là chương trình tường lửa mặc định trên CentOS 7 và đã được thay thế bằng một chương trình có tên là tường lửa. Nếu bạn đang dự định sử dụng CentOS 7, bạn sẽ cần thiết lập tường lửa của mình bằng tường lửa.
Điều kiện tiên quyết
Mới triển khai một phiên bản máy chủ với ứng dụng Vultr "WordPress trên CentOS 6 x64", sau đó đăng nhập bằng root.
Bước 1: Xác định các dịch vụ và cổng được sử dụng trên máy chủ của bạn
Tôi giả định rằng máy chủ này sẽ chỉ lưu trữ một blog WordPress và nó sẽ không được sử dụng làm bộ định tuyến hoặc cung cấp các dịch vụ khác (ví dụ: mail, FTP, IRC, v.v.).
Ở đây, chúng tôi cần các dịch vụ sau:
- HTTP (TCP trên cổng 80)
- HTTPS (TCP trên cổng 443)
- SSH (TCP trên cổng 22 theo mặc định, có thể được thay đổi cho mục đích bảo mật)
- NTP (UDP trên cổng 123)
- DNS (TCP và UDP trên cổng 53)
- ping (ICMP)
Tất cả các cổng không cần thiết khác sẽ bị chặn.
Iptables kiểm soát lưu lượng với một danh sách các quy tắc. Khi các gói mạng được gửi đến máy chủ của chúng tôi, iptables sẽ kiểm tra chúng bằng cách sử dụng từng quy tắc theo trình tự và thực hiện các hành động tương ứng. Nếu một quy tắc được đáp ứng, các quy tắc khác sẽ bị bỏ qua. Nếu không có quy tắc nào được đáp ứng, iptables sẽ sử dụng chính sách mặc định.
Tất cả lưu lượng truy cập có thể được phân loại thành INPUT, OUTPUT và FORWARD.
- Lưu lượng INPUT có thể là bình thường hoặc độc hại, nên được cho phép có chọn lọc.
- Lưu lượng OUTPUT thường được coi là an toàn và nên được cho phép.
- Lưu lượng truy cập là vô ích và nên bị chặn.
Bây giờ, hãy cấu hình các quy tắc iptables theo nhu cầu của chúng tôi. Tất cả các lệnh sau phải được nhập từ thiết bị đầu cuối SSH của bạn dưới dạng root.
Kiểm tra các quy tắc hiện có:
iptables -L -n
Xóa tất cả các quy tắc hiện có:
iptables -F; iptables -X; iptables -Z
Vì các thay đổi đối với cấu hình iptables sẽ có hiệu lực ngay lập tức, nếu bạn cấu hình sai các quy tắc iptables, bạn có thể bị chặn khỏi máy chủ của mình. Bạn có thể ngăn chặn tình cờ chặn bằng lệnh sau. Hãy nhớ thay thế [Your-IP-Address]
bằng địa chỉ IP công cộng hoặc dải địa chỉ IP của riêng bạn (ví dụ: 201.55.119.43 hoặc 201.55.119.0/24).
iptables -A INPUT -s [Your-IP-Address] -p tcp --dport 22 -j ACCEPT
Cho phép tất cả lưu lượng loopback (lo) và thả tất cả lưu lượng xuống 127.0.0.0/8 ngoài lo:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -d 127.0.0.0/8 -j REJECT
Chặn một số cuộc tấn công phổ biến:
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
Chấp nhận tất cả các kết nối gửi đến được thiết lập:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Cho phép lưu lượng truy cập HTTP và HTTPS:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Cho phép kết nối SSH:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Cho phép kết nối NTP:
iptables -A INPUT -p udp --dport 123 -j ACCEPT
Cho phép truy vấn DNS:
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
Cho phép ping:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Cuối cùng, đặt các chính sách mặc định:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Bước 3: Lưu cấu hình
Mỗi thay đổi mà chúng tôi thực hiện ở trên đã có hiệu lực, nhưng chúng không phải là vĩnh viễn. Nếu chúng ta không lưu chúng vào đĩa cứng, chúng sẽ bị mất khi hệ thống khởi động lại.
Lưu cấu hình iptables bằng lệnh sau:
service iptables save
Những thay đổi của chúng tôi sẽ được lưu trong tập tin /etc/sysconfig/iptables
. Bạn có thể xem lại hoặc sửa đổi các quy tắc bằng cách chỉnh sửa tệp đó.
Cách giải quyết cho việc chặn ngẫu nhiên
Nếu bạn bị chặn khỏi máy chủ do lỗi cấu hình, bạn vẫn có thể lấy lại quyền truy cập của mình với một số cách giải quyết.
- Nếu bạn chưa lưu các sửa đổi của mình cho các quy tắc iptables, bạn có thể khởi động lại máy chủ của mình từ giao diện trang web của Vultr, sau đó các thay đổi của bạn sẽ bị loại bỏ.
- Nếu bạn đã lưu các thay đổi của mình, bạn có thể đăng nhập vào máy chủ của mình thông qua bảng điều khiển từ giao diện trang web của Vultr và nhập vào
iptables -F
để xóa tất cả các quy tắc iptables. Sau đó, bạn có thể thiết lập lại các quy tắc.