Thiết lập quy tắc iptables. Thiết lập iptables trên Linux: Phương thức kết nối. Xử lý nguồn kết nối

Mọi thứ rất đơn giản, một lần nữa giải thích trên diễn đàn cho những người mới làm quen với thế giới Linux rằng vâng, theo tôi hiểu, trên Internet, bạn không thể tìm thấy một bài viết tổng hợp giải thích không chỉ cài đặt iptables mà còn một số thông tin cơ bản về mạng.
Vì vậy tôi trình bày cho bạn chú ý chuyến tham quan nhỏ Qua thiết lập tường lửa trong Linux. Hãy cùng đi sâu vào việc thiết lập netfilter/iptables; chắc chắn chúng ta cũng sẽ đề cập đến các vấn đề được áp dụng khác, vì chúng ta thiếu câu trả lời toàn diện cho các câu hỏi của mình... Và tôi sẽ cố gắng trình bày mọi thứ ở đây rõ ràng nhất có thể.

Nó trông như thế nào

Chúng ta sẽ xem xét một sơ đồ điển hình cho văn phòng và căn hộ, vâng, căn hộ! Rất ít người có máy chủ nhỏ dưới gầm bàn ở nhà, nhưng hầu hết Internet ở nhà được phân phối thông qua bộ định tuyến và phần lớn chúng cũng là phần sụn với Linux.
Đây là cách bố trí văn phòng nhỏ điển hình. Khi 1 máy tính (máy chủ) được kết nối Internet và các máy còn lại được kết nối Internet thông qua máy chủ này.

Đi thôi, từ từ...

Và vậy chúng ta có gì:
  • máy chủ có 2 card mạng và cài đặt Debian Lenny trên đó
  • mặc định trong tường lửa Debian Lenny - netfilter/iptables
  • mạng cục bộ gồm N máy tính, tất cả được kết nối thông qua một switch, bao gồm cả máy chủ
NAT là gì
Đầu tiên, chúng ta cần hiểu rằng chúng ta sẽ thiết lập NAT (Dịch địa chỉ mạng) thông thường nhất. Đối với những ai đang khát khao, cuối cùng tôi cũng sẽ đề cập đến một máy chủ proxy sử dụng mực làm ví dụ. Như tôi đã nói, chúng ta sẽ nhai hầu hết mọi thứ.
NAT là gì? Trên thực tế, mọi thứ đều đơn giản, tất cả các máy tính đều có địa chỉ vật lý (MAC) và mạng (IP). Chúng tôi ở khoảnh khắc này Tôi quan tâm đến địa chỉ IP. Địa chỉ IP trong cùng một mạng phải là duy nhất! Và với chuẩn IPv4 hiện tại thì chỉ có 4.294.967.296 (2 32) là duy nhất, con số này không nhiều chút nào và gần như không còn nữa. nhưng đừng lo lắng, IPv6 sắp trở nên phổ biến và có rất nhiều địa chỉ ở đó!
Nhưng ở đây bạn có thể nhận thấy rằng máy tính có vai trò đáng kể Hơn nữa những con số mà IPv4 cho phép hoặc nói rằng một người bạn ở nhà có cùng địa chỉ với bạn! Và đây là nơi chúng ta nói về NAT - nó cho phép bạn kết nối các mạng máy tính với nhau bằng cách sử dụng một địa chỉ IP duy nhất của bạn, hành động tường lửa được gọi là SNAT (NAT nguồn hoặc thay thế địa chỉ nguồn). Những thứ kia. trong 99% trường hợp, toàn bộ văn phòng của bạn truy cập Internet dưới 1 địa chỉ IP, trong khi bên trong văn phòng mọi người đều có địa chỉ IP của riêng mình. Bạn có thể đọc về các lớp địa chỉ IP trên Internet.

Bây giờ chúng ta đã biết NAT là gì và nó cần thiết để làm gì, chúng ta có thể tiến hành trực tiếp đến việc thiết lập máy chủ.

giao thông quá cảnh
Tất cả các lệnh được thực thi dưới dạng root (superuser). Trong Debian, cái gọi là lưu lượng chuyển tiếp bị tắt theo mặc định, tức là. Theo mặc định, hoạt động chỉ được cung cấp dưới dạng một máy duy nhất. Như bạn có thể đoán, không có lưu lượng chuyển tuyến thì không có NAT. Để kích hoạt nó, chỉ cần thay đổi 1 chữ số - $ echo 1 > /proc/sys/net/ipv4/ip_forward, Nhưng cài đặt này sẽ gặp sự cố sau khi khởi động lại, vì vậy tốt hơn hết bạn nên sửa cấu hình - $ nano /etc/sysctl.conf tiếp theo chúng ta tìm dòng #net.ipv4.ip_forward=1 và xóa hàm băm (ký hiệu nhận xét) ở đầu dòng và kiểm tra xem giá trị có phải là 1 không! Bây giờ bạn có thể tiến hành trực tiếp để định cấu hình iptables.
cài đặt iptables
Có rất nhiều bài viết trên Internet về cách viết các quy tắc trong iptables và những gì bạn có thể làm với chúng; tôi thấy chúng là những bài viết đầy đủ và thú vị nhất để đọc.
Và vì vậy hãy bắt đầu. Đầu tiên, hãy xóa các bảng quy tắc không cần thiết, phòng trường hợp có bất cứ điều gì không cần thiết ở đó...
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F

Phần dư thừa đã được làm sạch. Điều rất quan trọng là phải hiểu và nhớ rằng các quy tắc trong iptables được áp dụng theo thứ bậc, tức là. quy tắc trên sẽ được thực hiện sớm hơn. Tất cả các chuỗi đều có chính sách CHẤP NHẬN theo mặc định - chúng cho phép mọi thứ. không thuộc các quy tắc của chuỗi này.
Hãy đồng ý rằng giao diện đối diện với mạng cục bộ là eth0 và giao diện đối diện với Internet là eth1, mạng cục bộ có địa chỉ 192.168.0.0/24 và nhà cung cấp đã cung cấp cho chúng tôi địa chỉ tĩnh 10.188.106.33 (mặc dù không phải “màu trắng” - bạn cũng có thể tra cứu các loại địa chỉ IP trên Internet). Và vì vậy chúng tôi viết:
$ iptables -A Forward -i eth0 -o eth1 -s 192.168.0.0/24 -j CHẤP NHẬN
$ iptables -A Forward -i eth1 -o eth0 -d 192.168.0.0/24 -j CHẤP NHẬN
$ iptables -P TIẾN LÊN THẢ

Do đó, chúng tôi đã cho phép các gói chuyển tiếp đi qua tường lửa đối với dải địa chỉ IP của chúng tôi và chúng tôi cấm mọi thứ khác.
Bây giờ chính NAT:
$ iptables -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 10.188.106.33
Điều này là đủ để bạn có thể làm cho NAT hoạt động.
những điều nhỏ nhặt...
Trên máy khách, chúng tôi chỉ ra một ip từ phạm vi đã chọn và chỉ ra địa chỉ IP của máy chủ của chúng tôi làm cổng (thường nó được chỉ định đầu tiên từ mạng con - tôi sẽ tùy ý quyết định điều này). Tất cả thiết lạp mạng lưới Trên máy chủ, bạn có thể thực hiện việc này:
$ nano /etc/mạng/giao diện nó chỉ định các cài đặt của giao diện mạng của bạn.
truy cập vào độ sâu của mạng thông qua một cổng hoặc DNAT
Và sau đó bạn nhận ra rằng bạn có trực tuyến máy chủ Windows mà bạn luôn có thể truy cập dễ dàng thông qua RDP và sau đó cổng Debian phiền toái này xuất hiện! Mọi thứ rất đơn giản - bạn chỉ cần thêm quy tắc DNAT vào iptables của chúng tôi.
DNAT là loại quái vật gì? DNAT (NAT đích hoặc thay thế địa chỉ người nhận) - card mạng hoạt động ở chế độ mà chúng chỉ chấp nhận các gói được gửi đến địa chỉ cụ thể của chúng, nhưng bạn có thể truy cập máy chủ của chúng tôi nếu ip mà nó truy cập Internet là hàng tá máy khác trong văn phòng của bạn không? Làm thế nào yêu cầu sẽ đến được với anh ta? Trên thực tế, tất cả các yêu cầu kiểu này đều chống lại cổng của chúng tôi. Và tất cả những gì chúng ta cần làm là đặt ra các quy tắc để làm việc với các gói như vậy.
$ iptables -A TRƯỚC -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
Quy tắc đơn giản này sẽ chuyển hướng tất cả các gói đến cổng từ Internet tới cổng TCP 3389 (đây là những gì nó sử dụng Giao thức RDP) vào Windows Server nội bộ của bạn. Và, thì đấy, mọi thứ đều có lợi cho bạn.
vậy còn con mực yêu thích của bạn thì sao
Và mặc dù hiện tại mọi thứ đều hoạt động, mọi người đều có Internet và mọi thứ đều hoạt động, một số vẫn cần máy chủ proxy. Tôi sẽ không nói về việc thiết lập mực, tôi sẽ chỉ ra một quy tắc để làm cho nó “minh bạch”. Bạn chỉ cần đăng ký tại SQUID Lời kỳ diệu minh bạch ở đúng nơi và nó sẽ bắt đầu xử lý chính xác các yêu cầu rơi vào nó.
Chúng tôi viết $ iptables -A TRƯỚC -d! 192.168.0.0/24 -i eth0 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 3128.
Và điều này mang lại cho chúng ta điều gì? Bây giờ tất cả các yêu cầu cho trang web từ máy trạm của bạn thông qua giao thức http((80) và https(443) sẽ được chuyển hướng đến cổng mà mực nghe. Bạn nhận được tính năng lọc nội dung, thông tin về ai đã ở đâu và họ đã làm gì trên Internet, người dùng mà không cần nghi ngờ gì , hoạt động như trước ...
một chút an toàn
Ít nhất bạn nên bảo vệ cổng của mình ở mức tối thiểu, vì vậy hãy thêm một vài quy tắc nữa
$ iptables -A INPUT -i lo -j CHẤP NHẬN
$ iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j CHẤP NHẬN
$ iptables -A INPUT -i eth1 -m conntrack --ctstate LIÊN QUAN, THÀNH LẬP -j CHẤP NHẬN
$ iptables -P ĐẦU VÀO THẢ

Vì vậy, mọi liên lạc trực tiếp với cổng đều bị cấm, ngoại trừ kết nối được thiết lập, I E. những điều do bạn khởi xướng và bạn chỉ cần nhận được câu trả lời cho chúng. Đừng sợ, DNAT của chúng tôi không đạt được những quy tắc này...
sao ít thế?
Bài viết không phải cao su và bạn vẫn không thể kể hết mọi thứ... Tôi đã mang tối thiểu một tập hợp các hành động và khái niệm để bạn có thể bắt đầu làm chủ một khối khổng lồ như một cổng vào trên Linux. Tại đây bạn có thể nói chuyện rất rất lâu, thảo luận về nhiều khía cạnh và khả năng của netfilter.

Tổng cộng

Như chúng ta thấy, mọi thứ thực sự đơn giản! Điều chính là phải hiểu nguyên tắc hoạt động của mạng và không ngại thiết lập và đọc các hướng dẫn sử dụng lớn.
Tôi hy vọng tôi có thể tập hợp đủ thông tin để bắt đầu tình bạn với các bộ định tuyến phần mềm dựa trên Linux.

Tags: iptables, netfilter, NAT

Mọi máy tính kết nối vào mạng đều có nguy cơ tiềm ẩn. Có rất nhiều mối đe dọa trên mạng, từ các chương trình sẽ cố gắng xâm nhập hệ thống bằng mọi cách cho đến những hacker muốn giành quyền truy cập vào máy tính mà họ cần. MỘT phần mềmđược cài đặt trên máy tính có thể chứa các lỗ hổng không xác định và chưa được sửa chữa, có thể trở thành lỗ hổng bảo mật.

Nếu điều này không phù hợp lắm với máy tính gia đình, vì chúng được kết nối với mạng thông qua bộ định tuyến và NAT, giúp ẩn chúng khỏi mạng bên ngoài, thì đối với máy chủ, điều này phù hợp hơn bao giờ hết. Trong phòng mổ hệ thống Linux Tường lửa iptables rất linh hoạt và đáng tin cậy được tích hợp vào kernel.

Với sự trợ giúp của chương trình này, hệ thống được bảo vệ khỏi sự xâm nhập từ bên ngoài, chuyển hướng cổng và nhiều hành động khác với lưu lượng truy cập. Nhưng nhược điểm của nó là hơi khó cài đặt. Bài viết này sẽ xem xét việc thiết lập iptables cho người mới sử dụng. Tôi hy vọng rằng sau này bạn sẽ có thể tự tin sử dụng nó khả năng cơ bản iptables.

Hệ thống con iptables và Netfilter đã được tích hợp vào nhân Linux từ khá lâu. Tất cả các gói mạng đi qua máy tính, được máy tính gửi hoặc được gửi đến máy tính, đều được hạt nhân định tuyến thông qua bộ lọc iptables. Ở đó, các gói này có thể được kiểm tra và sau đó với mỗi lần kiểm tra, nếu nó vượt qua, hành động được chỉ định trong đó sẽ được thực hiện. Ví dụ: gói được chuyển tới kernel để gửi chương trình mục tiêu, hoặc bị loại bỏ.

Các loại gói

Tất cả các gói được chia thành ba loại: đến, đi và đi. Thư đến là những thư được gửi đến máy tính này, thư đi là những thư được gửi từ máy tính này tới mạng. Và các gói chuyển tiếp là các gói chỉ cần được chuyển tiếp thêm, chẳng hạn như nếu máy tính của bạn đang hoạt động như một bộ định tuyến.

Theo đó, trong bộ lọc iptables, tất cả các gói được chia thành ba chuỗi tương tự nhau:

  • Đầu vào- xử lý các gói tin và kết nối đến. Ví dụ: nếu bất kỳ người dùng bên ngoài nào cố gắng kết nối với máy tính của bạn qua ssh hoặc bất kỳ trang web nào gửi nội dung của nó cho bạn theo yêu cầu của trình duyệt. Tất cả các gói này sẽ kết thúc trong chuỗi này;
  • phía trước- chuỗi này được sử dụng để chuyển các kết nối. Điều này bao gồm các gói được gửi đến máy tính của bạn nhưng không dành cho máy tính của bạn, chúng chỉ được gửi qua mạng tới đích. Như tôi đã nói, điều này được quan sát thấy trên các bộ định tuyến hoặc chẳng hạn như nếu máy tính của bạn phát wifi;
  • đầu ra- Chuỗi này được sử dụng cho các gói tin và kết nối gửi đi. Điều này bao gồm các gói được tạo khi bạn cố gắng ping một trang web hoặc khi bạn khởi chạy trình duyệt của mình và cố gắng mở bất kỳ trang web nào.

Nhưng nếu bạn nghĩ rằng chỉ cần đóng hoàn toàn Chuỗi đầu vào để tăng tính bảo mật thì bạn đã nhầm to rồi. Khi mạng hoạt động, cả chuỗi đầu vào và đầu ra đều được sử dụng. Ví dụ: bạn đang cố gắng ping, dữ liệu được gửi qua đầu ra nhưng phản hồi lại đến qua đầu vào. Điều tương tự cũng xảy ra khi duyệt trang web và các hành động khác. Nhưng chuỗi chuyển tiếp có thể không được sử dụng nếu máy tính của bạn không phải là bộ định tuyến. Vì vậy việc cấu hình iptables phải được thực hiện rất cẩn thận.

Quy tắc và hành động

Trước khi chuyển sang tạo danh sách các quy tắc iptables, bạn cần xem xét cách chúng hoạt động và chúng là gì. Đối với mỗi loại gói, bạn có thể đặt một bộ quy tắc sẽ được kiểm tra lần lượt xem gói có tuân thủ hay không và nếu gói đó khớp thì hành động được chỉ định trong quy tắc sẽ được áp dụng cho gói đó. Các quy tắc tạo thành một chuỗi nên đầu vào, đầu ra và chuyển tiếp được gọi là chuỗi, chuỗi quy tắc. Có thể có một số hành động:

  • CHẤP NHẬN- cho phép gói tin đi xa hơn dọc theo chuỗi quy tắc;
  • LÀM RƠI- gỡ bỏ gói;
  • TỪ CHỐI- từ chối gói hàng, một thông báo sẽ được gửi đến người gửi rằng gói hàng đã bị từ chối;
  • ĐĂNG NHẬP- tạo một bản ghi về gói trong tệp nhật ký;
  • XẾP HÀNG- gửi gói đến ứng dụng người dùng.

Các quy tắc có thể kiểm tra bất kỳ kết quả trùng khớp nào, chẳng hạn như theo ip, theo cổng người nhận hoặc người gửi, tiêu đề gói, v.v. Nếu một gói không khớp với bất kỳ quy tắc nào thì hành động mặc định sẽ được áp dụng cho gói đó, thường là CHẤP NHẬN.

Khi chúng ta đã tìm ra các quy tắc, chúng ta có thể quay trở lại dây chuyền. Ngoài những điều được liệt kê ở trên, còn có hai chuỗi quy tắc bổ sung:

  • định tuyến trước- gói tin đi vào chuỗi này trước khi được iptables xử lý, hệ thống chưa biết nó sẽ được gửi đi đâu, vào, ra hay chuyển tiếp;
  • định tuyến sau- tất cả các gói chuyển tiếp đã vượt qua chuỗi chuyển tiếp sẽ đến đây.

Nhưng đó không phải là tất cả. Chúng tôi cũng có các bảng iptables, bạn cũng nên xử lý bảng này.

bảng ipadtable

Phía trên chuỗi quy tắc trong iptables còn có một mức độ trừu tượng khác và đây là các bảng. Có một số bảng trong hệ thống và tất cả chúng đều có bộ tiêu chuẩn chuỗi đầu vào, chuyển tiếp và đầu ra. Các bảng được thiết kế để thực hiện hành động khác nhau trên các gói, ví dụ như để sửa đổi hoặc lọc. Bây giờ điều này không quá quan trọng đối với bạn và chỉ cần biết rằng việc lọc gói iptables được thực hiện trong bảng bộ lọc là đủ. Nhưng chúng ta sẽ xem xét tất cả:

  • thô- được thiết kế để làm việc với các gói thô trước khi chúng được xử lý;
  • mang thai- dành cho việc sửa đổi các gói;
  • tự nhiên- cung cấp chức năng tự nhiên nếu bạn muốn sử dụng máy tính của mình làm bộ định tuyến;
  • lọc- bảng chính để lọc các gói, được sử dụng theo mặc định.

Hầu hết mọi thứ đều có lý thuyết, bây giờ chúng ta cùng xem công dụng nhé dòng lệnh iptables, được sử dụng để quản lý hệ thống iptables.

Tiện ích iptables

Hệ thống con iptables và netfilter được tích hợp vào kernel, nhưng một bộ tiện ích để quản lý tất cả những thứ này không phải lúc nào cũng được cung cấp cùng với hệ thống. Để cài đặt tiện ích trên Ubuntu, gõ:

sudo apt cài đặt iptables

Và trên các bản phân phối dựa trên Fedora, việc cài đặt iptables được thực hiện hơi khác một chút:

sudo yum cài đặt iptables

Sau khi quá trình cài đặt iptables hoàn tất, bạn có thể chuyển sang cấu hình, nhưng trước tiên hãy xem cú pháp của tiện ích. Thông thường lệnh có dạng tổng quát sau:

-t chuỗi hành động bảng Tùy chọn bổ sung

Bây giờ chúng ta hãy xem các tham số iptables, bảng cho biết bảng sẽ làm việc, tham số này có thể bị bỏ qua, hành động là Yêu cầu hành động, ví dụ: tạo hoặc xóa quy tắc và Tùy chọn bổ sung mô tả hành động và quy tắc sẽ được thực hiện.

Vẫn còn phải xem xét các hành động chính mà iptables cho phép bạn thực hiện:

  • -MỘT- thêm quy tắc vào chuỗi;
  • -VỚI- kiểm tra tất cả các quy tắc;
  • -D- xóa quy tắc;
  • -TÔI- chèn quy tắc với số lượng mong muốn;
  • -L- hiển thị tất cả các quy tắc trong chuỗi hiện tại;
  • -S- hiển thị tất cả các quy tắc;
  • -F- xóa tất cả các quy tắc;
  • -N- tạo một chuỗi;
  • -X- xóa chuỗi;
  • -P- đặt hành động mặc định.

Tùy chọn bổ sung cho quy tắc:

  • -P- chỉ định giao thức, một trong các tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
    mh;
  • -S- chỉ định địa chỉ IP của thiết bị gửi gói;
  • -d- cho biết địa chỉ IP của người nhận;
  • -Tôi- giao diện mạng đầu vào;
  • -o- giao diện mạng đi;
  • -j- chọn một hành động nếu quy tắc phù hợp.

Bây giờ bạn có thể chuyển sang xem các ví dụ về cách cấu hình iptables.

Ví dụ về cấu hình iptables

Chúng ta sẽ xem xét một số ví dụ cơ bản để bạn có thể củng cố những gì bạn đã đọc ở trên.

Danh sách các quy tắc

Trước tiên, hãy xem cách xem các quy tắc iptables, tùy chọn -L là đủ cho việc này:

Bạn cũng có thể chỉ định chuỗi mong muốn để chỉ hiển thị các quy tắc cho chuỗi đó:

iptables -L ĐẦU VÀO

Xóa quy tắc

Bạn không thể đơn giản vô hiệu hóa iptables bằng cách dừng dịch vụ cập nhật quy tắc iptables qua systemd hoặc thậm chí bằng cách xóa bộ tiện ích cấu hình. Hệ thống con hoạt động ở cấp kernel và không phụ thuộc vào những gì bạn đã cài đặt ở đó. Vì vậy, nếu bạn làm sai điều gì đó, bạn sẽ cần phải làm rõ các quy tắc. Để làm điều này, hãy chạy:

Hoặc chỉ dành cho một chuỗi cụ thể:

sudo iptables -F Đầu vào

Hãy để tôi nhắc bạn rằng tất cả những hành động này được thực hiện cho bảng mặc định - bộ lọc.

Quy tắc mặc định

Như tôi đã nói, nếu không có quy tắc nào khớp với gói thì hành động mặc định sẽ được áp dụng cho gói đó. Nó có thể được chỉ định bằng tùy chọn -p:

sudo iptables -p CHẤP NHẬN ĐẦU VÀO
$ sudo iptables -p CHẤP NHẬN ĐẦU RA
$ sudo iptables -p TIẾP TỤC

Trong ví dụ này, chúng tôi cho phép chuỗi INPUT và OUTPUT, nhưng vô hiệu hóa FORWARD.

Chặn gói

Để chặn các gói, chúng ta có thể sử dụng hành động DROP; chúng ta có thể lọc các gói cần chặn theo nhiều tiêu chí, ví dụ: giao thức, địa chỉ IP, mặt nạ mạng, cổng và nhiều tiêu chí khác.

Lệnh sẽ trông như thế này, cho phép bạn thêm quy tắc iptables để chặn tất cả các gói đến từ 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j THẢ

Và bây giờ các gói gửi đi đến cùng một địa chỉ:

Việc chặn dải IP được thực hiện theo cách tương tự. Để thực hiện việc này, bạn cần sử dụng mặt nạ mạng 10.10.10.0/24. Đây sẽ là tất cả các địa chỉ bắt đầu từ 10.10.10.0 đến 10.10.10.255:

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

Hoặc một phiên bản mở rộng của mặt nạ:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j THẢ

Bạn cũng có thể chặn tất cả các kết nối ssh đến:

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Như bạn có thể thấy, việc thêm quy tắc iptables rất đơn giản.

Xóa quy tắc

Việc xóa các quy tắc iptables được thực hiện tương tự như cách tạo quy tắc mới, chỉ thay vì tùy chọn A, bạn cần sử dụng tùy chọn D. Trước tiên, hãy xem danh sách các quy tắc:

Ví dụ: đây là cách bạn có thể xóa quy tắc iptables được tạo lần thứ hai:

sudo iptables -A OUTPUT -s 10.10.10.10 -j THẢ

Bạn cũng có thể xóa hoàn toàn iptables bằng cách chạy lệnh với tùy chọn -F:

Nhiều lần tôi nhận ra rằng ngay cả những người thông minh nói chung cũng hoàn toàn những lỗi lầm không thể tha thứ. Ví dụ: họ mở cổng mà cơ sở dữ liệu chạy trên toàn bộ Internet. Điều này thường xảy ra với những người mới bắt đầu DevOps, những người đã viết mã cả đời và giờ đây trách nhiệm của họ cũng bao gồm cả việc thiết lập máy chủ. Có những hướng dẫn tốt trực tuyến trên thiết lập cơ bản tường lửa trong Linux và *nix khác, nhưng thường đây là các trang tính trên nhiều màn hình. Vì vậy, tôi hy vọng hướng dẫn ngắn gọn hơn này sẽ hữu ích cho ai đó.

Quan trọng! Rất dễ nhầm tưởng tường lửa của một máy đến mức bạn không thể truy cập được nữa. Đặc biệt nó liên quan Đám mây lưu trữ. Ví dụ: nếu trong AWS bạn đóng tất cả các cổng từ 1024 đến 65536, vì lý do nào đó, máy sẽ bị đóng sau khi khởi động lại mọi thứ nói chung cổng. Nếu bạn được lưu trữ trên đám mây, hãy định cấu hình tường lửa tốt hơn thông qua giao diện web do hosting cung cấp.

Một lưu ý nhỏ về thuật ngữ. Tường lửa được tích hợp trong nhân Linux được gọi là Netfilter và iptables là một tiện ích để quản lý tường lửa này. Nhiều người lầm tưởng tường lửa có tên là iptables. Cái này sai. Bằng cách nói điều gì đó như “Tôi lọc các gói bằng iptables”, bạn đang cho người khác thấy sự thiếu hiểu biết của mình.

Nói chung, loại vấn đề nào có thể được giải quyết bằng Netfilter:

  • Cho phép/từ chối lưu lượng truy cập đến các cổng nhất định bằng các giao thức nhất định (IPv4/IPv6, TCP/UDP) với địa chỉ được chỉ định(IP, MAC) hoặc mạng con;
  • Mọi thứ đều giống nhau đối với lưu lượng truy cập đi;
  • Ví dụ: bạn có thể bỏ qua hoàn toàn tất cả các gói ICMP;
  • Thiết lập NAT, xem bài viết về bộ định tuyến dựa trên Raspberry Pi;
  • Tôi nghe nói rằng những chuyên gia thực sự biết cách thiết lập biện pháp bảo vệ chống lại DDoS và bạo lực cũng như hạn chế quyền truy cập vào mạng ứng dụng cụ thể, người dùng hoặc nhóm và làm những điều điên rồ khác;

Tôi sẽ lưu ý rằng cá nhân tôi lúc đầu, tiện ích iptables có vẻ cực kỳ bất tiện so với ipfw trong FreeBSD. May mắn thay, sau khi làm việc với nó một thời gian, tất cả các cờ như -A, -D, -j và những cờ khác đều trở nên quen thuộc, vì vậy hãy kiên nhẫn. Hãy xem xét các lệnh cơ bản.

Hiển thị tất cả các quy tắc:

iptables -L -n

Bạn có thể nhận thấy rằng Netfilter có một số “chuỗi” - ít nhất là INPUT, OUTPUT và FORWARD. Cá nhân tôi cũng có một chuỗi Docker trên máy của mình. Lần đầu tiên, bạn có thể coi hai điều đầu tiên tương ứng là tất cả lưu lượng truy cập đến và đi và tạm thời quên đi phần còn lại. Rất có thể bạn sẽ không bao giờ cần chúng nữa.

Xóa tất cả các quy tắc:

iptables -F

Thay đổi chính sách (hành vi mặc định) của chuỗi:

iptables -P ĐẦU VÀO THẢ
iptables -P CHẤP NHẬN ĐẦU VÀO

Từ chối quyền truy cập từ máy chủ/mạng con:

iptables -A INPUT -s 123.45.67.89 -j THẢ
iptables -A INPUT -s 123.45.0.0/ 16 -j THẢ

Bạn cũng có thể dùng Tên miền:

iptables -A INPUT -s example.ru -j DROP

Cấm kết nối đi:

iptables -A ĐẦU RA -d 123.45.67.89 -j THẢ

Bạn có thể sử dụng phủ định trong các quy tắc:

iptables -A ĐẦU VÀO! -s 123,45,67,89 -j THẢ

Xóa quy tắc theo số của nó trong chuỗi:

iptables -D ĐẦU VÀO 1

Xóa quy tắc dựa trên chức năng của nó:

iptables -D INPUT -s 123.45.67.89 -j THẢ

Tùy chọn -p chỉ định giao thức. Bạn có thể sử dụng tất cả, icmp, tcp, udp hoặc số giao thức từ /etc/protocols. Lá cờ - -sport cho biết cổng mà gói được gửi và - -dport chỉ định cổng đích:

iptables -A INPUT -p tcp --sport 80 -j CHẤP NHẬN
iptables -A INPUT -p tcp --dport 80 -j CHẤP NHẬN

Chèn quy tắc vào đầu chuỗi:

iptables -TÔI NHẬP ...

Hoặc bạn có thể chỉ định một vị trí cụ thể:

iptables -I NHẬP 3 ...

iptables-save > /etc/ iptables.rules

Khôi phục quy tắc:

iptables-khôi phục< / etc/ iptables.rules

Bây giờ chúng ta hãy xem xét một số ví dụ thực tế. Ví dụ: đây là giao diện của mô phỏng netsplit trong thử nghiệm kiểm tra hành vi của một ứng dụng sử dụng Cụm Akka:

chạy (nút1, s "iptables -A INPUT -s $node2 -j THẢ")
chạy (nút1, s "iptables -A INPUT -s $node3 -j THẢ")
chạy (nút1, s "iptables -A ĐẦU RA -d $node2 -j THẢ")
chạy (nút1, s "iptables -A ĐẦU RA -d $node3 -j THẢ")

Quá trình khôi phục diễn ra theo cách tương tự, chỉ có cờ -A được thay thế bằng cờ -D.

Một vi dụ khac. Bạn cần tìm hiểu cổng nào đang nghe trên máy và đóng những cổng không cần thiết. Chúng tôi lên xe và nói:

netstat -tuwpln

Đầu ra ví dụ:

Kết nối Internet đang hoạt động (chỉ máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Bang Tên PID/Prog
tcp 0 0 0.0.0.0:80 0.0.0.0:* LẮNG NGHE 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LẮNG NGHE 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* NGHE 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* NGHE 990/postgres

Nginx và SSHd nhìn vào Internet, điều này là bình thường. PostgreSQL chỉ lắng nghe giao diện cục bộ nên cũng không có vấn đề gì với điều đó. Nhưng epmd nhô ra (bạn có thể kiểm tra nó bằng telnet từ một máy khác) và điều này không tốt. Bạn chỉ có thể đóng cổng 4369. Cách thực hiện việc này đã được trình bày ở trên. Hoặc bạn có thể tiến xa hơn nữa và từ chối tất cả các kết nối từ bên ngoài đến cổng 81 trở lên.

iptables là một tiện ích dòng lệnh là giao diện quản lý công việc tiêu chuẩn bức tường lửa(bức tường lửa) bộ lọc mạngNhân Linux phiên bản 2.4 và 2.6. Cần có đặc quyền để sử dụng tiện ích iptables siêu người dùng(root). Đôi khi từ iptables đề cập đến chính tường lửa netfilter.

1. Tường lửa là gì và tại sao cần thiết?

Bức tường lửa- một phức hợp phần cứng hoặc phần mềm, theo dõi và lọc các gói mạng đi qua nó trên nhiều cấp độ khác nhau Mô hình OSI theo các quy tắc xác định.


Nhiệm vụ chính của tường lửa là mạng máy tính hoặc các nút riêng lẻ khỏi bị truy cập trái phép. Cũng tường lửa thường được gọi là bộ lọc, vì nhiệm vụ chính của chúng là không truyền (lọc) các gói không đáp ứng tiêu chí được xác định trong cấu hình.

2. Cách thức hoạt động của iptables

Khi một gói đến tường lửa của chúng tôi, trước tiên nó sẽ đi đến thiết bị mạng, bị trình điều khiển tương ứng chặn lại và sau đó được truyền đến kernel. Gói tin sau đó đi qua một số bảng và sau đó được truyền đi ứng dụng cục bộ hoặc được chuyển sang máy khác.

Iptables sử dụng ba loại bảng:

  1. mangle- chuỗi này thường được sử dụng để thực hiện các thay đổi đối với tiêu đề gói, ví dụ để thay đổi các bit TOS, v.v.
  2. Nat- chuỗi này được sử dụng để phát sóng địa chỉ mạng(Dịch địa chỉ mạng đích). Dịch địa chỉ mạng nguồn được thực hiện sau, trong một chuỗi khác. Bất kỳ loại lọc nào trong chuỗi này chỉ có thể được thực hiện trong những trường hợp đặc biệt.
  3. Lọc- lưu lượng truy cập được lọc ở đây. Hãy nhớ rằng tất cả các gói đến địa chỉ của chúng ta đều đi qua chuỗi này, bất kể chúng đến từ giao diện nào.

Theo đó, chúng ta quan tâm đến bảng Filter thứ ba. Bảng này có ba chuỗi tích hợp:

  1. INPUT - cho các gói đến.
  2. TIẾN - cho những người đi qua chiếc ô tô nàyđến cái khác.
  3. ĐẦU RA - để gửi đi.

Một gói đi qua các chuỗi này, dựa trên quy tắc, có thể được chuyển (CHẤP NHẬN) hoặc bị loại bỏ (DROP).

Chương trình Iptables cho phép bạn chỉnh sửa các quy tắc thông qua thiết bị đầu cuối bằng cách nhập lệnh.

Một chút về quy tắc viết:

Mỗi quy tắc là một chuỗi chứa các tiêu chí xác định xem gói có khớp với quy tắc nhất định hay không và hành động phải được thực hiện nếu tiêu chí được đáp ứng. TRONG nhìn chung các quy tắc được viết như thế này:

IPtables [-t tên bảng ] lệnh [mẫu] [ -j hoạt động ]

Tùy chọn -t chỉ định bàn. Nếu bỏ qua tùy chọn này thì mặc định là sử dụng bảng lọc. Nếu bạn có ý định sử dụng một bảng khác thì điều này phải được chỉ định rõ ràng.

Tiếp theo, ngay sau tên bảng phải có lệnh. Nếu không có bộ xác định bảng thì lệnh phải luôn được đặt trước.
Đội xác định hành động của iptables, ví dụ: chèn quy tắc hoặc thêm quy tắc vào cuối chuỗi hoặc xóa quy tắc, v.v.

Danh sách các lệnh:

  • -MỘT tên chuỗi luật lệ (thêm quy tắc vào cuối chuỗi; công tắc --set-counters cho phép bạn đặt bộ đếm gói và byte)
  • -TÔI tên chuỗi con số luật lệ (chèn quy tắc vào chuỗi trước quy tắc với số được chỉ định, đánh số từ 1; công tắc --set-counters cho phép bạn đặt bộ đếm gói và byte)
  • -R tên chuỗi con số luật lệ (thay thế;
    công tắc --set-counters cho phép bạn đặt bộ đếm gói và byte)
  • -D tên chuỗi con số (xóa quy tắc có số đã chỉ định, đánh số từ 1)
  • -D tên chuỗi luật lệ (xóa quy tắc dựa trên kết quả khớp văn bản)
  • -C tên chuỗi túi nhựa (kiểm tra gói tin đi qua;
    địa chỉ đi, địa chỉ đích, giao thức, giao diện, cổng được chỉ định bởi các phím tương ứng)
  • -L [tên chuỗi ] (hiển thị danh sách các quy tắc; phím bổ sung:
    • -v(đầu ra Thông tin thêm, đặc biệt là bộ đếm)
    • --chính xác(hiển thị bộ đếm mà không làm tròn đến KB, MB, v.v.)
    • --số(hiển thị địa chỉ và số cổng dưới dạng số)
    • --số dòng(hiển thị số quy tắc)
  • -F tên chuỗi (xóa tất cả các quy tắc khỏi chuỗi)
  • -Z tên chuỗi (đặt lại bộ đếm)
  • -N tên chuỗi (tạo chuỗi)
  • -X tên chuỗi (xóa chủ đề trống không có liên kết)
  • -P tên chuỗi hoạt động (thay đổi hành động mặc định: CHẤP NHẬN,
    THẢ, XẾP HÀNG, TRẢ LẠI)
  • -E tên chuỗi cũ tên chuỗi mới (đổi tên chuỗi)

chương vật mẫuđặt tiêu chí xác minh để xác định xem gói có tuân theo quy tắc này hay không. Tại đây, bạn có thể chỉ định nhiều tiêu chí khác nhau - địa chỉ IP của nguồn gói hoặc mạng, giao diện mạng. Địa chỉ IP đích, cổng, giao thức, v.v. Các tham số khác để lọc có thể được tìm thấy trong trợ giúp dành cho tiện ích iptables (man iptables)

Và cuối cùng hoạt động chỉ định hành động nào sẽ được thực hiện nếu các tiêu chí trong quy tắc được đáp ứng. Tại đây, bạn có thể buộc kernel chuyển gói sang một chuỗi quy tắc khác, “bỏ” gói, đưa ra thông báo lỗi cho nguồn, v.v.

Danh sách một số hành động:

  • CHẤP NHẬN - bỏ qua gói tin; quá trình quét bảng kết thúc
  • DROP - vứt đi trong im lặng; quá trình quét kết thúc không chỉ đối với chuỗi hiện tại mà còn đối với các bảng khác
  • TỪ CHỐI - vứt đi, thông báo cho người gửi ( --từ chối-với loại thông báo )

3. Thứ tự của gói mạng dành cho quy trình/ứng dụng cục bộ:

Đối với ứng dụng địa phương

Bước chân Bàn Xích Ghi chú
1 Cáp (tức là)
2 Đầu vào
3 mang thai ĐANG TRƯỚC Thường được sử dụng để thực hiện các thay đổi đối với tiêu đề gói, chẳng hạn như cài đặt các bit TOS, v.v.
4 tự nhiên ĐANG TRƯỚC Dịch địa chỉ (Dịch địa chỉ mạng đích). Lọc gói chỉ được phép ở đây trong những trường hợp đặc biệt.
5 Đưa ra các quyết định định tuyến.
6 mang thai ĐẦU VÀO Gói kết thúc trong chuỗi INPUT của bảng mangle. Điều này sẽ thực hiện các thay đổi đối với tiêu đề gói trước khi nó được chuyển đến ứng dụng cục bộ.
7 lọc ĐẦU VÀO Lưu lượng truy cập đến được lọc ở đây. Hãy nhớ rằng tất cả các gói đến địa chỉ của chúng ta đều đi qua chuỗi này, bất kể chúng đến từ giao diện nào.
8 Quy trình/ứng dụng cục bộ (tức là chương trình máy chủ hoặc chương trình máy khách)

Điều quan trọng cần nhớ là lần này các gói đi qua chuỗi INPUT chứ không phải qua FORWARD.

Thứ tự di chuyển của các gói được tạo bởi các tiến trình cục bộ.

Từ các quy trình cục bộ

Bước chân Bàn Xích Ghi chú
1 Quá trình cục bộ (tức là chương trình máy chủ hoặc chương trình máy khách).
2 Đưa ra các quyết định định tuyến. Ở đây người ta quyết định gói tin sẽ đi tiếp theo ở đâu - đến địa chỉ nào, thông qua giao diện mạng nào, v.v.
3 mang thai ĐẦU RA Đây là nơi các thay đổi được thực hiện đối với tiêu đề gói. Thực hiện lọc trên chuỗi này có thể gây ra hậu quả tiêu cực.
4 tự nhiên ĐẦU RA Chuỗi này được sử dụng để dịch địa chỉ mạng (NAT) trong các gói có nguồn gốc từ các quy trình tường lửa cục bộ.
5 Lọc ĐẦU RA Lưu lượng truy cập đi được lọc ở đây.
6 mang thai ĐĂNG KÝ Chuỗi POSTROUTING của bảng mangle chủ yếu được sử dụng cho các quy tắc cần thực hiện thay đổi đối với tiêu đề gói trước khi nó rời khỏi tường lửa nhưng sau khi quyết định định tuyến đã được đưa ra. Tất cả các gói, cả gói truyền tải và gói được tạo bởi các quy trình tường lửa cục bộ, đều rơi vào chuỗi này.
7 tự nhiên ĐĂNG KÝ Đây là nơi thực hiện việc dịch địa chỉ mạng nguồn. Bạn không nên thực hiện lọc gói tin trong chuỗi này để tránh những tác dụng phụ không mong muốn. Tuy nhiên, ở đây bạn cũng có thể dừng các gói bằng cách áp dụng chính sách DROP mặc định.
8 Giao diện mạng (ví dụ eth0)
9 Cáp (tức là Internet)

Thứ tự di chuyển của các gói vận chuyển

Bước chân Bàn Xích Ghi chú
1 Cáp (tức là Internet)
2 Giao diện mạng (ví dụ eth0)
3 mang thai ĐANG TRƯỚC Thông thường, chuỗi này được sử dụng để thực hiện các thay đổi đối với tiêu đề gói, chẳng hạn như thay đổi các bit TOS, v.v.
4 tự nhiên ĐANG TRƯỚC Chuỗi này được sử dụng để dịch địa chỉ mạng đích. Dịch địa chỉ mạng nguồn được thực hiện sau, trong một chuỗi khác. Bất kỳ loại lọc nào trong chuỗi này chỉ có thể được thực hiện trong những trường hợp đặc biệt
5 Quyết định định tuyến tiếp theo, tức là. tại thời điểm này, gói sẽ được quyết định đi đâu - đến ứng dụng cục bộ hoặc tới nút mạng khác.
6 mang thai PHÍA TRƯỚC Sau đó, gói sẽ đi vào chuỗi FORWARD của bảng mangle, chỉ nên sử dụng chuỗi này trong những trường hợp đặc biệt khi cần thực hiện một số thay đổi đối với tiêu đề gói giữa hai điểm quyết định định tuyến.
7 Lọc PHÍA TRƯỚC Chỉ những gói đi đến máy chủ khác mới được tham gia chuỗi FORWARD. Tất cả việc lọc lưu lượng chuyển tuyến mới được thực hiện tại đây. Đừng quên rằng lưu lượng truy cập đi qua chuỗi này theo cả hai hướng; hãy nhớ tính đến điều này khi viết quy tắc lọc.
8 mang thai ĐĂNG KÝ Chuỗi này nhằm mục đích thực hiện các thay đổi đối với tiêu đề gói sau khi quyết định định tuyến cuối cùng được đưa ra.
9 tự nhiên ĐĂNG KÝ Chuỗi này chủ yếu dành cho Dịch địa chỉ mạng nguồn. Không sử dụng nó để lọc trừ khi thực sự cần thiết. Việc hóa trang cũng được thực hiện ở đây.
10 Giao diện mạng đầu ra (ví dụ: eth1).
11 Cáp (hãy để nó là mạng LAN).

Có ba Các tùy chọn khác nhau các gói tin đi qua.

1. Từ bên ngoài đến dịch vụ cục bộ (máy chủ) của máy tính này (INPUT).

2. Từ dịch vụ địa phương(máy chủ) của máy tính này ở bên ngoài (OUTPUT).

3. Đi ngang qua, cổng vào, qua giao diện mạng của máy tính này (FORWARD).

4. Một số ví dụ cấu hình:

kịch bản ví dụ:

#set biến để chỉ định giao diện mạng bên ngoài và bên trong

LOCAL_IF="eth0"
INET_IF="eth0:g"

#=======================
# Xóa tất cả quy tắc khỏi chuỗi.
#=======================
iptables -F
iptables -X

#=======================
# Đặt chính sách mặc định.
#=======================

iptables -P ĐẦU VÀO THẢ

iptables -P ĐẦU RA THẢ

iptables -P CHUYỂN TIẾP

#=======================
# Tạo quy tắc cho tất cả các giao diện.
#=======================

#http - mở cổng 80
iptables -A INPUT -i ALL -p tcp -m tcp --dport 80 -j CHẤP NHẬN
iptables -A INPUT -i TẤT CẢ -p icmp -j CHẤP NHẬN

#=======================
# Tạo quy tắc cho giao diện nội bộ.
#=======================

#ssh - mở 22

iptables -A INPUT -p tcp -i $LOCAL_IF -m tcp --dport 22 -j CHẤP NHẬN

Tất cả những gì còn lại là chạy tập lệnh

ví dụ về các chuỗi riêng lẻ:

Chúng tôi cho phép mọi thứ giao diện nội bộ(lo, eth0, eth1 - giao diện nội bộ)
iptables -A INPUT -i eth1 -j CHẤP NHẬN
iptables -A INPUT -i eth0 -j CHẤP NHẬN
iptables -A INPUT -i lo -j CHẤP NHẬN

Cho phép truy cập vào một cổng được chỉ định từ Internet
iptables -A INPUT -p tcp -m tcp -d external_ip --dport 80 -j CHẤP NHẬN

Mở giao thức
iptables -A INPUT -p gre -j CHẤP NHẬN

5. Liên kết tới tài liệu cấu hình iptables

http://www.posix.ru/network/iptables/ - bài viết của Dmitry Kulakov "Định cấu hình tường lửa Iptables"

http://www.opennet.ru/docs/RUS/iptables/ - bài viết của Oscar Anderson do Andrey Kiselev dịch "Hướng dẫn về IPtables"

http://system-administrators.info/?p=396 - bài viết "netfilter và iptables trong Linux: nguyên tắc hoạt động, cấu hình"

http://www.iptables.ru/ - cấu hình từng bước của iptables. hỗ trợ kỹ thuật


Để lại bình luận của bạn!

Có một số giải pháp để định cấu hình tường lửa trên Linux, nhưng nhiều giải pháp trong số đó thực sự chỉ là giao diện người dùng để định cấu hình iptables và một số giải pháp không hoàn toàn thành công. Về nguyên tắc, thật tuyệt khi có thể nhanh chóng thiết lập tường lửa, nhưng một khi bạn đã hiểu rõ về iptables, bạn sẽ có thể thực hiện việc đó nhanh hơn và tinh tế hơn. Tinh chỉnh iptables thường không có sẵn cho giao diện người dùng.

Bắt đầu nào. Hãy bắt đầu với một cái đơn giản, sau đó chúng ta sẽ phức tạp hóa cấu hình. Ở đây trên trang web đã có một bài viết về tự động tải các quy tắc iptables, vì vậy chúng tôi sẽ không xem xét việc tải các quy tắc ngay bây giờ mà sẽ tập trung vào chính các quy tắc đó. Tường lửa luôn được cấu hình theo tài khoản nguồn gốc.

Kịch bản kết nối mạng

Trước khi thiết lập tường lửa, bạn phải hiểu chính xác những gì kết nối mạng và cách cài đặt chúng trong quá trình vận hành hệ thống để tất cả các dịch vụ có thể hoạt động bình thường. Bức tranh của chúng ta càng chính xác về hoạt động của các dịch vụ mạng, cả chạy trên máy chủ của chúng ta và trên các máy chủ khác, thì chúng ta càng có thể cấu hình hệ thống một cách tinh vi hơn. Do đó, trước tiên bạn nên luôn mô tả các tình huống về cách mọi thứ sẽ hoạt động và chỉ sau đó mới bắt đầu thiết lập tường lửa. Kịch bản có thể được viết bằng bất kỳ soạn thảo văn bản. Đầu tiên chúng tôi mô tả mọi thứ Dịch vụ bên ngoài, máy chủ đang chạy và sau đó là tất cả các dịch vụ đang chạy trên máy chủ. Tại sao điều này là cần thiết? Để thể hiện chính xác quá trình làm việc mà không đi sâu vào phần kỹ thuật. Sau khi viết tập lệnh chính xác nhất, bạn có thể bắt đầu thiết lập tường lửa. Mô tả tập lệnh sẽ trông giống như thế này:

1) Tất cả người dùng có thể xem trang web. Theo mặc định, trang web này bằng tiếng Nga.
2) Nếu người dùng đến từ địa chỉ<список-адресов-или-маска-подсети>, thì họ sẽ được hiển thị trang web bằng tiếng Ukraina. Trong ví dụ của chúng tôi, đây sẽ là một cửa hàng trực tuyến có một tên miền, được hiển thị bằng tiếng Nga hoặc tiếng Ukraina và có bộ riêng để bán cho Nga và Ukraine. Chúng tôi sẽ chỉ có hai trang web, một bằng tiếng Nga, trang thứ hai bằng tiếng Ukraina và địa chỉ mà khách hàng đến sẽ xác định trang web nào anh ta sẽ truy cập. Ví dụ được lấy từ đầu của tôi; tất nhiên, trong thực tế, những vấn đề như vậy được giải quyết khác nhau. Bạn cũng không thể cho phép xem trang web từ các địa chỉ tiếng Trung do liên tục có spam trong các bình luận bằng tiếng Trung.
3) Thư phải có thể truy cập được từ văn phòng; nó không thể truy cập được từ những nơi khác.
4) Phải có khả năng kết nối với VPN từ bên ngoài
5) Chúng tôi chỉ có thể sử dụng một số máy chủ DNS mà chúng tôi tin tưởng. Khác máy chủ DNS phải không thể truy cập được
6) …..

Và như thế. Tôi nghĩ thế là đủ cho ví dụ đơn giản. Vấn đề là xác định bức tranh tương tác mạng càng chính xác càng tốt. Bất kỳ tập lệnh nào cũng chỉ có một mục tiêu - chính thức hóa sự tương tác với người dùng và dịch vụ trước khi đưa ra các mô tả kết nối, bao gồm cổng, giao thức, địa chỉ nguồn, địa chỉ đích cho mỗi kết nối.

Thiết lập iptables: Cấu hình đơn giản nhất

Nếu chúng ta nói về máy chủ chiến đấu, cài đặt tường lửa trên hai máy chủ có thể khác nhau rất nhiều, tùy thuộc vào nhiệm vụ mà các máy chủ này thực hiện. Vì vậy tôi sẽ cố gắng mô tả nguyên tắc chung, có thể được sử dụng khi thiết lập tường lửa cho bất kỳ máy chủ nào. Đây chỉ là cơ sở để tùy chỉnh thêm.

Trước hết, bạn cần xóa các quy tắc đã tải:

Iptables -F INPUT iptables -F OUTPUT iptables -F CHUYỂN TIẾP

INPUT, OUTPUT, FORWARD - đây là ba chuỗi chính mà các gói sẽ truyền, đến, đi và chuyển từ giao diện này sang giao diện khác.

Sau này, bạn cần đặt chính sách mặc định. Chỉ có hai trong số đó - CHẤP NHẬN và THẢ, chấp nhận gói hay không. Đối với máy chủ sản xuất, bạn phải luôn chọn DROP, sau đó mở mọi thứ cần thiết và không mở gì thêm.

Để đặt các chính sách như vậy, trước tiên bạn phải cho phép kết nối qua SSH, chúng tôi sẽ coi như chúng tôi không thay đổi; cổng tiêu chuẩn(việc này thường được thực hiện trên các máy chủ sản xuất ngay sau khi cài đặt máy chủ SSH).

Iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j CHẤP NHẬN

Và sau đó bạn có thể bắt đầu thay đổi các chính sách mặc định:

Iptables -P INPUT DROP iptables -P OUTPUT CHẤP NHẬN iptables -P TIẾN LÊN THẢ

Đối với chuỗi OUTPUT, hiện tại bạn có thể để lại chính sách CHẤP NHẬN mặc định, chính sách này cho phép các kết nối gửi đi; bạn có thể chuyển sang chính sách này sau khi thiết lập chuỗi INPUT, khi chúng tôi cấm các kết nối đến. Trên nhiều máy chủ, việc định cấu hình chính xác chuỗi INPUT là đủ, nhưng chúng ta cũng sẽ xem xét cấu hình OUTPUT sau để có cấu hình cứng nhắc hơn.

Vì thế. Hiện tại, chúng tôi chỉ mở cổng máy chủ SSH cho các kết nối đến; sẽ không đi qua tất cả các cổng khác. Bây giờ bạn cần thêm khả năng nhận kết nối vào cổng của các dịch vụ khác, nếu chúng đang chạy trên máy chủ của bạn.

Iptables -t filter -A INPUT -p tcp -m tcp --dport 25 -j CHẤP NHẬN

DNS (thường cho phép UDP là đủ, nhưng bạn cũng có thể thêm TCP):

Iptables -t filter -A INPUT -p udp -m udp --dport 53 -j CHẤP NHẬN

Iptables -t filter -A INPUT -p tcp -m tcp --dport 80 -j CHẤP NHẬN

Iptables -t filter -A INPUT -p tcp -m tcp --dport 110 -j CHẤP NHẬN

Iptables -t filter -A INPUT -p tcp -m tcp --dport 443 -j CHẤP NHẬN

Nhưng đó không phải là tất cả. Các cổng được mở, các dịch vụ có thể truy cập được từ bên ngoài, nhưng thư không hoạt động và tên miền không được phân giải. Thực tế là khi truy vấn các máy chủ DNS, yêu cầu được gửi từ một cổng miễn phí tùy ý trong số các cổng không có đặc quyền, giống như kết nối với một cổng khác. máy chủ thư. Và các dịch vụ này gửi phản hồi đến cùng một cổng. Và cổng này, như bạn hiểu, đã đóng cửa đối với chúng tôi. Chúng tôi có thể mở cổng này, nhưng chúng tôi không biết kết nối đi sẽ đến từ cổng nào. Do đó, chúng ta có thể làm điều đơn giản nhất có thể - cho phép kết nối từ các cổng cụ thể trên máy tính từ xa:

Iptables -t filter -A INPUT -p tcp -m tcp --sport 25 -j CHẤP NHẬN

Iptables -t filter -A INPUT -p udp -m udp --sport 53 -j CHẤP NHẬN

Hai quy tắc này cho phép các kết nối đến từ cổng 25/tcp và 53/udp, vì vậy khi các gói có giao thức phù hợp đến từ các cổng này, chúng sẽ được chấp nhận. Nếu bạn dự định cập nhật hệ thống, phần mềm hoặc cài đặt các gói cần thiết để hoạt động thì bạn sẽ phải cho phép kết nối từ cổng 80 của các máy từ xa.

Bây giờ chúng ta đã có sẵn cấu hình iptables đơn giản nhất.

Sau khi nhập các quy tắc vào bảng, bạn cần lưu chúng lại. Để làm điều này, bạn có thể sử dụng một tập lệnh chẳng hạn.

Xử lý nguồn kết nối

Hãy tiếp tục. kết nối qua một số cổng nhất định chúng ta không cần toàn bộ Internet mà cần với một số máy nhất định, với các địa chỉ IP nhất định. Do đó, chúng ta có thể làm phức tạp các quy tắc một chút bằng cách thêm địa chỉ nguồn gói vào chúng.

Iptables -t filter -A INPUT -s 123.123.123.123 -p tcp -m tcp --dport 22 -j CHẤP NHẬN

Quy tắc này cho phép bạn nhận các gói trên cổng 22 thông qua giao thức TCP chỉ từ nguồn có địa chỉ 123.123.123.123, điều này được biểu thị bằng tham số “-s” (nguồn, nguồn). Bằng cách này, bạn có thể giới hạn các kết nối đến máy chủ qua SSH ở một địa chỉ IP cụ thể hoặc với một mạng con cụ thể nếu bạn chỉ định mặt nạ mạng con mà từ đó các kết nối được phép thay vì một địa chỉ IP cụ thể.

Nếu bạn luôn sử dụng cùng một cổng thư mà máy chủ của bạn gửi thư qua đó, thì bạn có thể giới hạn kết nối từ cổng 25/tcp bằng cách chỉ định cổng này làm nguồn.

Quy tắc cho một giao diện mạng hoặc địa chỉ IP cụ thể

Một máy chủ có thể có nhiều giao diện mạng. Thông thường có ít nhất hai trong số chúng - giao diện mạng bên ngoài và cái gọi là giao diện loopback 127.0.0.1, không thể truy cập từ bên ngoài trừ khi có chuyển hướng gói thích hợp. Bạn cũng có thể có ít nhất một địa chỉ IP khác được chia sẻ với bí danh giao diện mạng hoặc giao diện mạng vật lý khác. Và mỗi địa chỉ IP hoặc giao diện mạng có thể chạy các dịch vụ cụ thể. Ví dụ, trên một Máy chủ web Apache và thứ hai là máy chủ dịch vụ tên miền bind9. Và khi bạn cho phép kết nối trên một cổng cụ thể mà không chỉ định giao diện mạng đó, bạn sẽ mở quyền truy cập vào cổng đó trên tất cả các giao diện. Vì vậy, có hai cách để thu hẹp phạm vi cấp phép.

Cách đầu tiên là chỉ định địa chỉ IP sẽ được phép truy cập.

Iptables -t filter -A INPUT -d 234.234.234.234 -p tcp -m tcp --dport 22 -j CHẤP NHẬN

Ví dụ này cho thấy cách sử dụng địa chỉ đích trong quy tắc iptables. Bạn cũng có thể sử dụng địa chỉ nguồn:

Iptables -t filter -A INPUT -s 123.123.123.123 -d 234.234.234.234 -p tcp -m tcp --dport 22 -j CHẤP NHẬN

TRONG ví dụ này Chúng tôi đã giới hạn quyền truy cập vào hai địa chỉ, cho phép bạn truy cập máy chủ tại 234.234.234.234 qua SSH từ địa chỉ 123.123.123.123; bạn sẽ không thể truy cập từ các địa chỉ khác.

Cách thứ hai là chỉ định tên của giao diện mạng. Phương pháp này cũng có thể áp dụng khi địa chỉ bên ngoài có thể thay đổi. Nếu địa chỉ trên giao diện mạng thay đổi, với tùy chọn trước đó bạn sẽ mất quyền truy cập vào máy chủ. Tên giao diện được chỉ định như sau:

Iptables -t filter -A INPUT -i eth0 -s 123.123.123.123 -p tcp -m tcp --dport 22 -j CHẤP NHẬN

Tùy chọn này cho phép truy cập qua SSH trên giao diện mạng eth0, phần còn lại giao diện mạng Quyền truy cập SSH sẽ không khả dụng.

Mọi thứ chúng ta vừa xem chỉ là phần mở đầu, phần tiếp theo sẽ tiếp tục...