Bảo vệ máy tính Linux với Iptables

Linux là một trong những hệ điều hành chạy nhanh hơn và có tiếng về chức năng bảo mật hơn các hệ điều hành khác nhưng không có nghĩa là nó có thể bảo mật hoàn toàn. Vì thế cách tốt nhất là chúng ta nên thực hiện một số phương pháp bảo mật khác. Gợi ý của chúng tôi là sử dụng firewall (tường lửa). Có một vài lựa chọn firewall trong Linux, nhưng ở đây chúng tôi muốn đề cập tới tường lửa Iptables.

Vậy Iptables là gì?

Iptables là firewall Linux kernel được cấu hình và hoạt động trên nền Console rất nhỏ và tiện dụng. Nó đi kèm với mọi bản phân phối Linux và đó là cách trực tiếp nhất để kiểm soát lưu lượng truy cập vào và ra từ máy tính của bạn.

Iptables có tiếng là phức tạp, tuy nhiên, bạn không cần biết mọi thứ về iptables để sử dụng nó hiệu quả trên máy tính. Bạn chỉ cần biết một số kiến thức cơ bản về cách hoạt động và các quy tắc cấu trúc của nó.

Cấu trúc lệnh

Tất cả các quy tắc iptables đều có cùng cấu trúc cơ bản. Mỗi quy tắc là một lệnh đơn cho iptables - cho biết cách xử lý lưu lượng truy cập trên một cổng cụ thể. Hãy xem ví dụ dưới đây:

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT

Trông thì có vẻ phức tạp nhưng thực chất rất đơn giản khi bạn chia nó ra. Đầu tiên, quy tắc này bắt đầu với -A bở nó sẽ nối vào các quy tắc tường lửa iptables của bạn.

Tiếp theo, -i xác định giao diện của các quy tắc. Trong trường hợp này, đó là eth0. Khi bạn viết các quy tắc của riêng mình, hãy đảm bảo là bạn biết giao diện mà bạn kết nối mạng tới.

Tiếp theo, -p đặt tên cho giao thức. Quy tắc này dành cho tcp - đây là lưu lượng web.

-m thì có một chút khác biệt. Nó được sử dụng để khẳng định có một điều kiện cần được đáp ứng để lưu lượng truy cập không bị từ chối. Điều kiện trong quy tắc này là state.

Tiếp theo là --state. Bạn cần phải cung cấp --state cho một danh sách các state được chấp nhận, tất cả đều phải viết bằng chữ hoa và cách nhau bằng dấu phẩy. Quy tắc này chấp nhận cả kết nối mới và các kết nối đã được thiết lập.

--sport là từ viết tắt của “source port", và nó cho iptables biết nguồn gốc của lưu lượng. Bên cạnh đó, --dport là viết tắt của “destination port". Nó được dùng cho các quy tắc OUTPUT để xử lý lưu lượng cổng đang đến.

Cuối cùng là -j. Nó cho iptables biết hành động để "jump" tới. Trong trường hợp này, cần ACCEPT lưu lượng truy cập đáp ứng các điều kiện trước.

Sử dụng File

Bạn có thể nhập các quy tắc lần lượt vào iptables. Tuy nhiên, điều này rất dễ để mất theo dõi vị trí của bạn và những gì bạn đang làm. Tốt hơn hết là tạo một file quy tắc mà bạn có thể nhập vào iptables cùng một lúc.

Tạo file của bạn. Hướng dẫn này sẽ sử dụng /tmp/iptables-ip4. Trong tệp tin, thêm hai dòng dưới đây. Tất cả các quy tắc của bạn sẽ nằm giữa chúng.

*filter

# Your Rules Here

COMMIT

Tạo các quy tắc của bạn

Bạn có thể bắt đầu thiết lập các quy tắc của mình. Đây chỉ là những đề xuất. Rõ ràng, nếu bạn đang chạy các dịch vụ khác hoặc cần mở các cổng khác, bạn chắc chắn có thể tùy chỉnh một số thứ hoặc thêm một số quy tắc riêng của mình.

Loopback

Giao diện Loopback là một giao diện nội bộ mà Linux sử dụng.

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

Ping

Nhiều người không muốn cho phép ping trên máy tính của họ. Tuy nhiên, nó khá hữu ích để kiểm tra các kết nối. Nếu bạn muốn cho phép ping, hãy thêm các quy tắc bên dưới.

-A INPUT -i eth0 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT
-A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o eth0 -p icmp -j ACCEPT

Web

Bạn có thể kết nối với web. Mặt khác, bạn không muốn cho phép các kết nối bắt nguồn từ Internet.

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 443 -j ACCEPT

-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j ACCEPT

Bạn sẽ cần cho phép kết nối DNS để máy tính có thể sử dụng URL thay vì địa chỉ IP bởi điều đó không được thuận tiện cho lắm. Thay thế địa chỉ IP của router cho địa chỉ IP được sử dụng dưới đây.

-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport 53 -m udp -j ACCEPT

Thời gian

Hầu hết máy tính để bàn Linux đều sử dụng NTP để thiết lập và duy trì thời gian hệ thống từ Internet. Bạn cần cho phép máy tính kết nối với máy chủ NTP để cài thời gian.

-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --dport 123 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 123 -j ACCEPT

In

Trừ khi bạn đang sử dụng máy in USB hoặc máy chủ in ngoài, không thì bạn cần kích hoạt kết nối với CUPS.

-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 631 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT

Email

Bạn cũng có thể gửi và nhận email. Các cổng được phép ở đây là các cổng email SSL. Nếu bạn cần sử dụng email không an toàn, hãy thay thế các cổng đó.

# IMAP
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 993 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j ACCEPT

# POP3
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 995 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j ACCEPT

# SMTP
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 465 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 465 -j ACCEPT

SSH

Để sử dụng đầy đủ các kết nối SSH, bạn cần cho phép cả đầu ra và đầu vào qua SSH.

# Input
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
# Output
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT

DHCP

Hầu hết các máy tính Linux sử dụng DHCP để tự động nhận địa chỉ IP từ một bộ định tuyến. DHCP sử dụng các cổng riêng, dó đó chúng cần phải được truy cập. Nếu bạn đang sử dụng IP tĩnh, bạn sẽ không cần các quy tắc này.

-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --sport 67:68 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 67:68 -j ACCEPT

Sau tất cả, các quy tắc của bạn sẽ giống như thế này:

Quy tắc cuối cùng

Nhập các quy tắc

Bây giờ, bạn đã có một danh sách các quy tắc iptables đầy đủ chức năng. Bạn chỉ cần đưa nó vào iptables để sử dụng. Trong trường hợp một số quy tắc đã được thêm vào theo thời gian, hãy xóa chúng đi. Sau các lệnh dưới đây, bạn sẽ thấy các cài đặt mặc định cho phép mọi thứ.

sudo iptables -F && sudo iptables -X

Máy tính của bạn giờ đang sử dụng các quy tắc iptables mới. Bạn có thể kiểm tra bằng cách nhập lệnh.

sudo iptables -S

Tuy nhiên, các quy tắc này chỉ là tạm thời. Khi bạn khởi động lại máy tính, chúng sẽ biến mất.

Cách tạo các quy tắc vĩnh viễn

Có một số cách để làm cho các quy tắc này tồn tại vĩnh viễn. Hướng dẫn này sẽ tập trung vào các hệ thống dựa trên Debian và Ubuntu bởi chúng phổ biến nhất.

Có một gói sẵn có là iptables-persistant - có chức năng xử lý việc lưu và khôi phục lại iptables. Tất cả những việc bạn cần làm là cài đặt nó.

Trong quá trình cài đặt, package này sẽ hỏi bạn có muốn lưu cấu hình của mình không, hãy chọn Yes.

Nếu sau này bạn muốn thêm các quy tắc, bạn có thể lưu lại bằng cách chạy các lệnh sau:

sudo service netfilter-persistent save

Bạn đang kiểm soát lưu lượng truy cập qua máy tính của mình. Bạn có thể làm nhiều thứ hơn với iptables nhưng hãy thử những thao tác cơ bản này đã nhé!

Thứ Tư, 12/07/2017 10:15
31 👨 1.304
0 Bình luận
Sắp xếp theo
    ❖ Linux