Thứ ba, 16/04/2013 | 00:00 GMT+7

Cách thiết lập firewall Iptables cơ bản trên Centos 6


Giới thiệu

Bài viết này sẽ hướng dẫn cách tạo firewall đơn giản trên Centos VPS. Nó sẽ chỉ mở ra các cổng mà ta muốn và đóng các dịch vụ khác. Tôi cũng sẽ hướng dẫn cách ngăn chặn các cuộc tấn công đơn giản hơn và cách tự quay lại VPS nếu bạn vô tình từ chối quyền truy cập của chính mình.

Hướng dẫn này không phải là đầy đủ và chỉ cho thấy cách mở một vài cổng đến: cho apache, SSH và email và đóng tất cả các cổng khác. Ta sẽ không chặn bất kỳ lưu lượng gửi đi nào và chỉ tạo một số luật phổ biến nhất để chặn các tập lệnh và bot thông thường tìm kiếm VPS dễ bị tấn công.

iptables là một firewall đơn giản được cài đặt trên hầu hết các bản phân phối linux. Trang hướng dẫn sử dụng linux cho iptables cho biết đây là một công cụ quản trị để lọc gói IPv4 và NAT , theo bản dịch, nó là một công cụ để lọc ra và chặn lưu lượng truy cập Internet. Tường lửa iptables được bao gồm theo mặc định trong các hình ảnh Linux Centos 6.4 do DigitalOcean cung cấp.

Ta sẽ cài đặt firewall từng luật một. Để đơn giản hóa: firewall là một danh sách các luật , vì vậy khi một kết nối incomming được mở, nếu nó trùng với bất kỳ luật nào, luật này có thể chấp nhận hoặc từ chối kết nối đó. Nếu không có luật nào được đáp ứng, ta sử dụng luật mặc định.

Lưu ý: Hướng dẫn này bao gồm bảo mật IPv4. Trong Linux, bảo mật IPv6 được duy trì riêng biệt với IPv4. Ví dụ: "iptables" chỉ duy trì các luật firewall cho địa chỉ IPv4 nhưng nó có một đối tác IPv6 được gọi là "ip6tables", được dùng để duy trì các luật firewall cho địa chỉ mạng IPv6.

Nếu VPS của bạn được cấu hình cho IPv6, hãy nhớ bảo mật cả network interface IPv4 và IPv6 của bạn bằng các công cụ thích hợp. Để biết thêm thông tin về các công cụ IPv6, hãy tham khảo hướng dẫn này: Cách Cấu hình Công cụ để Sử dụng IPv6 trên VPS Linux

Quyết định các cổng và dịch vụ sẽ mở

Để bắt đầu, ta muốn biết những dịch vụ nào ta muốn mở cho công chúng. Hãy sử dụng server lưu trữ web điển hình: đó là web server và email, và ta cũng cần tự tham gia bằng server SSH.

Đầu tiên, ta muốn để cổng SSH mở để ta có thể kết nối với VPS từ xa: đó là cổng 22.

Ngoài ra, ta cần cổng 80 và 443 (cổng SSL) cho lưu lượng truy cập web. Để gửi email, ta sẽ mở cổng 25 (SMTP thông thường) và 465 (SMTP bảo mật). Để cho phép user nhận email, ta sẽ mở cổng thông thường 110 (POP3) và 995 (cổng POP3 an toàn).

Thêm vào đó, ta sẽ mở cổng IMAP, nếu ta có nó được cài đặt: 143 cho IMAP, và 993 cho IMAP qua SSL.Note: Đó là khuyến cáo để chỉ cho phép các giao thức an toàn, nhưng điều đó có thể không là một lựa chọn, nếu ta không thể ảnh hưởng đến user dịch vụ thư để thay đổi ứng dụng email của họ.

Chặn các cuộc tấn công phổ biến nhất

Các VPS DigitalOcean thường đi kèm với cấu hình trống: tất cả lưu lượng truy cập đều được phép. Chỉ đảm bảo điều này, ta có thể xóa các luật firewall - tức là xóa tất cả:

iptables -F

Sau đó, ta có thể thêm một số luật firewall đơn giản để chặn các cuộc tấn công phổ biến nhất, nhằm bảo vệ VPS của ta khỏi những kẻ lừa đảo tập lệnh. Ta thực sự không thể chỉ dựa vào iptables để bảo vệ ta khỏi DDOS quy mô đầy đủ hoặc tương tự, nhưng ít nhất ta có thể loại bỏ các bot quét mạng thông thường cuối cùng sẽ tìm thấy VPS của ta và bắt đầu tìm kiếm các lỗ hổng bảo mật để khai thác. Đầu tiên, ta bắt đầu với việc chặn các gói null.

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Ta đã yêu cầu firewall lấy tất cả các gói đến có cờ tcp KHÔNG VÀ chỉ DROP chúng. Các gói rỗng , nói một cách đơn giản, là các gói tin lại. Các kiểu tấn công sử dụng chúng để thử và xem cách ta đã cấu hình VPS và tìm ra điểm yếu. Mô hình tiếp theo để từ chối là một cuộc tấn công syn-lũ.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Tấn công Syn-lũ nghĩa là những kẻ tấn công mở một kết nối mới, nhưng không nêu rõ họ muốn gì (ví dụ: SYN, ACK, bất cứ điều gì). Họ chỉ muốn chiếm tài nguyên server của ta . Ta sẽ không chấp nhận các gói như vậy. Bây giờ ta chuyển sang một mẫu phổ biến hơn: các gói XMAS , cũng là một gói trinh sát.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Ta đã loại trừ ít nhất một số mẫu thông thường tìm thấy lỗ hổng trong VPS của ta .

Mở các cổng cho các dịch vụ đã chọn

Bây giờ ta có thể bắt đầu thêm các dịch vụ đã chọn vào bộ lọc firewall của bạn . Điều đầu tiên như vậy là giao diện localhost:

iptables -A INPUT -i lo -j ACCEPT

Ta yêu cầu iptables thêm (-A) một luật vào bảng bộ lọc đến (INPUT) bất kỳ trafic nào đi kèm với giao diện localhost (-i lo) và chấp nhận (-j CHẤP NHẬN) nó. Localhost thường được sử dụng cho, tức là. trang web hoặc server email của bạn giao tiếp với database được cài đặt local . Bằng cách đó, VPS của ta có thể sử dụng database , nhưng database bị đóng để khai thác từ internet.

Bây giờ ta có thể cho phép lưu lượng truy cập web server :

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Ta đã thêm hai cổng (cổng http 80 và cổng https 443) vào chuỗi ACCEPT - cho phép lưu lượng truy cập trên các cổng đó. Bây giờ, hãy cho phép user sử dụng server SMTP của ta :
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

Như đã nêu trước đây, nếu ta có thể ảnh hưởng đến user của bạn , ta nên sử dụng version bảo mật, nhưng thường thì ta không thể ra các điều khoản và khách hàng sẽ kết nối bằng cổng 25, điều này dễ bị dò password hơn nhiều. Bây giờ ta tiến hành cho phép user đọc email trên server của họ:

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

Hai luật đó sẽ cho phép lưu lượng POP3. , ta có thể tăng cường bảo mật cho server email của bạn bằng cách chỉ sử dụng version bảo mật của dịch vụ. Bây giờ ta cũng cần cho phép giao thức thư IMAP:

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

Giới hạn quyền truy cập SSH

Ta cũng nên cho phép lưu lượng SSH, để ta có thể kết nối với VPS từ xa. Cách đơn giản để làm điều đó sẽ là với lệnh này:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Bây giờ ta đã yêu cầu iptables thêm một luật để chấp nhận lưu lượng tcp nhập vào cổng 22 (cổng SSH mặc định). Bạn nên thay đổi cấu hình SSH thành một cổng khác và bộ lọc firewall này nên được thay đổi cho phù hợp, nhưng cấu hình SSH không phải là một phần của bài viết này.

Tuy nhiên, ta có thể làm một điều nữa về điều đó với chính firewall . Nếu văn phòng của ta có địa chỉ IP cố định, ta chỉ có thể cho phép kết nối tới SSH từ nguồn này. Điều này sẽ chỉ cho phép những người từ vị trí của ta kết nối.

Đầu tiên, hãy tìm địa chỉ IP bên ngoài của bạn. Đảm bảo rằng nó không phải là một địa chỉ từ mạng LAN của bạn, nếu không nó sẽ không hoạt động. Bạn có thể làm điều đó đơn giản bằng cách truy cập trang whatismyip.com . Một cách khác để tìm ra nó là gõ:

w

trong terminal , ta sẽ thấy ta đã đăng nhập (nếu ta là người duy nhất đăng nhập 'và địa chỉ IP của ta được viết ra.

Đầu ra trông giống như sau:

root@iptables# w
 11:42:59 up 60 days, 11:21,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root   pts/0    213.191.xxx.xxx  09:27    0.00s  0.05s  0.00s w

Bây giờ, bạn có thể tạo luật firewall để chỉ cho phép lưu lượng truy cập vào cổng SSH nếu nó đến từ một nguồn: địa chỉ IP của bạn:

iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

Tất nhiên, thay thế YOUR_IP_ADDRESS bằng IP của actuall.

Ta có thể mở nhiều cổng hơn trên firewall của bạn nếu cần bằng cách thay đổi số cổng. Bằng cách đó, firewall của ta sẽ chỉ cho phép truy cập vào các dịch vụ ta muốn. Ngay bây giờ, ta cần thêm một luật nữa cho phép ta sử dụng các kết nối gửi đi (ví dụ: ping từ VPS hoặc chạy các bản cập nhật phần mềm);

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Nó sẽ cho phép mọi kết nối gửi đi đã cài đặt nhận được trả lời từ VPS ở phía bên kia của kết nối đó. Khi ta đã cài đặt xong tất cả, ta sẽ chặn mọi thứ khác và cho phép tất cả các kết nối gửi đi.

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Bây giờ ta có các luật firewall của ta tại chỗ.

Lưu cấu hình

Bây giờ ta đã có tất cả cấu hình, ta có thể liệt kê các luật để xem có điều gì bị thiếu không.

iptables -L -n

Việc chuyển đổi -n ở đây là vì ta chỉ cần địa chỉ ip, không phải domain . I E. nếu có một IP trong các luật như sau: 69.55.48.33: firewall sẽ tìm kiếm nó và thấy rằng đó là một IP của digitalocean.com. Ta không cần điều đó, chỉ cần địa chỉ. Bây giờ cuối cùng ta cũng có thể lưu cấu hình firewall của bạn :

iptables-save | sudo tee /etc/sysconfig/iptables

Tệp cấu hình iptables trên CentOS được đặt tại / etc / sysconfig / iptables . Lệnh trên đã lưu các luật ta đã tạo vào file đó. Chỉ đảm bảo mọi thứ hoạt động, ta có thể khởi động lại firewall :

service iptables restart

Các luật đã lưu sẽ vẫn tồn tại ngay cả khi VPS được khởi động lại.

Xả để tự mở khóa

Nếu ta gặp sự cố trong cấu hình của bạn , ta có thể đã tự chặn truy cập vào VPS. Có lẽ ta đã đặt địa chỉ IP không chính xác nên firewall không cho phép kết nối từ máy trạm của ta . Bây giờ ta không thể đạt được các luật đó và nếu ta đã lưu chúng, ngay cả khởi động lại cũng không giúp được gì. May mắn là giao diện web DO cho phép ta kết nối với server thông qua console :

 Control panel

Sau khi kết nối, ta đăng nhập với quyền user root và đưa ra lệnh sau:

iptables -F

Điều này sẽ xóa các bộ lọc, ta sẽ có thể truy cập lại vào VPS.

Kết luận

Bài viết này không đầy đủ và nó chỉ sơ lược bề mặt của việc chạy một bức firewall đơn giản trên một máy linux. Nó sẽ làm đủ cho một kịch bản server email và web điển hình cho một nhà phát triển không quen thuộc với dòng lệnh linux hoặc iptables.

Tuy nhiên, nhiều hơn nữa có thể được thực hiện. Có nhiều hướng dẫn và mẫu tốt trên internet để giúp ta cung cấp cấu hình mạnh mẽ hơn. Đối với môi trường production , bạn nên tạo cấu hình chi tiết hơn hoặc nhờ chuyên gia bảo mật chuẩn bị cấu hình.

Hy vọng rằng các hướng dẫn ngắn sẽ cung cấp bảo mật cơ bản cho các VPS mới.


Tags:

Các tin trước

Cách thiết lập firewall Iptables cơ bản trên Centos 6 2013-04-16