Ví dụ về iptables của Opennet. Hiển thị trạng thái tường lửa của bạn. Giới hạn số lượng kết nối đồng thời tới máy chủ cho mỗi client qua IP

Được thiết kế cho người mới bắt đầu. Chúng tôi sẽ cố gắng lấp đầy khoảng trống này. Chúng ta hãy xem xét những điều cơ bản về quy tắc viết, cũng như một số mô-đun bổ sungđiều đó sẽ giúp cuộc sống dễ dàng hơn.

    Mọi thứ đều là của bạn Phần cứng chức năng. Tức là bạn đã kết nối tất cả các thiết bị, các mô-đun đang tải, các thiết bị hiển thị trong hệ thống. Điều hữu ích trước tiên là kiểm tra xem có thể kết nối Internet mà không cần bất kỳ iptables nào không. Không có gì tệ hơn việc loay hoay với một chương trình cứng đầu trong nhiều giờ, chửi bới nó một cách vô ích rồi nhận ra card mạng không hoạt động hoặc modem được cấu hình sai.

    Bạn có ý tưởng gì về công nghệ mạng và bạn đã quen thuộc với Quản trị Linux và Gentoo Linux nói riêng. Nghĩa là, bạn cần có kỹ năng làm việc với những thứ cơ bản như ifconfig, rc-update, /etc/conf.d/net, v.v. Nếu đây vẫn là những âm thanh trống rỗng đối với bạn, thì trước tiên hãy nghiên cứu Sổ tay Cơ bản về Mạng 101 của Gentoo và Trợ giúp Linux.

Kết nối mạng --->

Tùy chọn kết nối mạng ---->

Lọc gói mạng (thay thế IPchains) --->

Cấu hình bộ lọc mạng

Hãy kích hoạt tất cả các tùy chọn dưới dạng mô-đun (mặc dù từ quan điểm bảo mật, các mô-đun nên bị vô hiệu hóa hoàn toàn; hạt nhân nguyên khối đáng tin cậy hơn, mặc dù chậm hơn).

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 tin tặc 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 hệ điều hành Linux có tường lửa iptables rất linh hoạt và đáng tin cậy được tích hợp trong 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 hệ thống từ khá lâu. nền tảng Linux. Tất cả gói mạng Các tin nhắn đi qua máy tính, được máy tính gửi hoặc được gửi đến máy tính sẽ đượ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ó được thông 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 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 các trang web và các hoạt độ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- xóa 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 xử lý bởi iptables, 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 mà chúng tôi cũng muốn xử lý.

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ó nội dung như thế này hình thức chung:

-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 thấy 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ổng cụ thể qua 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ó 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ể sử 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.

thép, chồn, thịt bò, giấy Ngày 28 tháng 9 năm 2010 lúc 07:47 chiều

khái niệm cơ bản về iptables lấy Debian làm ví dụ qua con mắt của một đứa bé

Chúng ta sẽ nói về điều gì?

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 đề ứng 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 của 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.

Chúng ta đ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 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à lúc NAT phát huy tác dụng - nó cho phép bạn kết nối mạng máy tính sử dụng một địa chỉ IP duy nhất giữa chúng, hành động của 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ể trực tiếp tiến hà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 sự trợ giúp của chúng; tôi thấy đây là 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ó địa chỉ cụ thể dành cho 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 đang nằm trong hàng chục 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à chúng tôi sẽ bắt đầu xử lý chính xác các yêu cầu rơi vào đó.
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 của bạn với các bộ định tuyến phần mềm dựa trên Linux.

Tags: iptables, netfilter, NAT

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách định cấu hình iptables trên Linux. Bạn sẽ tìm hiểu nó là gì và tại sao bạn cần cấu hình chức năng này. Thiết lập iptables trên Linux khá đơn giản.

Thiết lập iptables trên Linux: iptables là gì?

Iptables là tiện ích tường lửa dòng lệnh sử dụng chính sách chuỗi để cho phép hoặc chặn lưu lượng truy cập. Khi một kết nối cố gắng tự thiết lập trên hệ thống của bạn, iptables sẽ tìm kiếm một quy tắc trong danh sách của nó để khớp với nó. Nếu không tìm thấy, nó sẽ sử dụng hành động mặc định.

Iptables hầu như luôn đi kèm với phiên bản cài đặt sẵn trên bất kỳ Phân phối Linux. Để cập nhật/cài đặt nó, chỉ cần tải xuống gói iptables:

sudo apt-get cài đặt iptables

Có các lựa chọn thay thế GUI cho iptables như Firestarter, nhưng iptables không phức tạp lắm nếu bạn chỉ chạy một vài lệnh. Hãy cực kỳ cẩn thận khi thiết lập các quy tắc iptables, đặc biệt nếu bạn đang sử dụng SSH'd trên máy chủ, vì một lệnh sai có thể khóa bạn trong một thời gian dài cho đến khi nó được cam kết thủ công với máy vật lý.

Thiết lập iptables trên Linux cho người mới bắt đầu

Nhân tiện, chúng ta đã nói về điều này trước đây. Có lẽ điều này cũng sẽ thú vị với bạn. Liên kết có thể được tìm thấy ở trên.

Thiết lập iptables trên Linux, như chúng tôi đã nói ở trên, khá đơn giản. Nhưng trước khi bắt đầu thiết lập, bạn cần làm quen với Khái niệm chung tùy chọn.

Các loại mạch

Iptables sử dụng ba mạch khác nhau: đầu vào, chuyển tiếp và đầu ra.

Đầu vào- Chuỗi này được sử dụng để kiểm soát hành vi của các kết nối đến. Ví dụ: nếu người dùng cố gắng SSH vào máy tính/máy chủ của bạn, iptables sẽ cố gắng khớp địa chỉ IP và cổng với một quy tắc trong chuỗi đầu vào.

Phía trước- Chuỗi này được sử dụng cho các kết nối đến không thực sự được phân phối cục bộ. Hãy nghĩ về một bộ định tuyến - dữ liệu luôn được gửi đến nó nhưng hiếm khi thực sự được gửi đến chính bộ định tuyến đó; Dữ liệu được chuyển hướng đơn giản đến trang đích. Trừ khi bạn đang thực hiện bất kỳ định tuyến, NAT hoặc bất kỳ điều gì khác trên hệ thống yêu cầu chuyển tiếp, bạn thậm chí sẽ không sử dụng chuỗi này.

Chỉ có một cách đáng tin cậy kiểm tra xem hệ thống của bạn có sử dụng hoặc cần chuỗi chuyển tiếp hay không.

Ảnh chụp màn hình này là của một máy chủ đã chạy được vài tuần và không có hạn chế nào đối với các kết nối đến hoặc đi. Như bạn có thể thấy, chuỗi đầu vào đã xử lý 11 GB gói và chuỗi đầu ra xử lý 17 GB. Mặt khác, chuỗi chuyển tiếp không cần xử lý một gói đơn lẻ. Điều này là do máy chủ không thực hiện bất kỳ chuyển tiếp nào hoặc không được sử dụng làm thiết bị đầu cuối.

Đầu ra - Chuỗi này được sử dụng cho các kết nối gửi đi. Ví dụ: nếu bạn cố gắng ping trang web linuxinsider, iptables sẽ kiểm tra chuỗi đầu ra của nó để xem những quy tắc nào áp dụng cho ping và linuxinsider trước khi quyết định cho phép hay từ chối nỗ lực kết nối.

Cảnh báo

Mặc dù việc kiểm tra máy chủ bên ngoài trông giống như một việc chỉ cần đi qua chuỗi đầu ra nhưng hãy nhớ rằng chuỗi đầu vào cũng sẽ được sử dụng để trả về dữ liệu. Khi sử dụng iptables để khóa hệ thống của bạn, hãy nhớ rằng nhiều giao thức yêu cầu giao tiếp hai chiều, vì vậy cả chuỗi đầu vào và đầu ra đều phải được cấu hình chính xác. SSH là một giao thức phổ biến mà mọi người quên kích hoạt trên cả hai chuỗi.

Hành vi chính sách mặc định

Trước khi bắt đầu định cấu hình các quy tắc cụ thể, bạn phải quyết định xem bạn muốn hành vi mặc định của ba chuỗi này là gì. Nói cách khác, bạn muốn iptables làm gì nếu kết nối không phù hợp với bất kỳ quy tắc hiện có nào?

Để xem chuỗi chính sách nào được định cấu hình để xử lý lưu lượng chưa khớp, hãy chạy lệnh iptables -L.

Như bạn có thể thấy, chúng tôi cũng đã sử dụng lệnh grep để có được kết quả rõ ràng hơn. Trong ảnh chụp màn hình này, chuỗi của chúng tôi hiện được định cấu hình để chấp nhận lưu lượng truy cập.

Nhiều khi bạn muốn hệ thống của mình chấp nhận kết nối theo mặc định. Trừ khi trước đó bạn đã thay đổi các quy tắc của chuỗi chính sách, cài đặt này phải được định cấu hình sẵn. Trong mọi trường hợp, đây là lệnh chấp nhận các kết nối mặc định:

iptables --policy CHẤP NHẬN ĐẦU VÀO
iptables --policy CHẤP NHẬN ĐẦU RA
iptables --policy CHUYỂN TIẾP CHẤP NHẬN

Theo mặc định, trong quy tắc chấp nhận, bạn có thể sử dụng iptables để từ chối các địa chỉ IP hoặc số cổng cụ thể trong khi tiếp tục chấp nhận tất cả các kết nối khác. Chúng ta sẽ nhận được những lệnh đó sau một phút.

Nếu bạn muốn từ chối tất cả các kết nối và chỉ định thủ công những kết nối nào bạn muốn cho phép kết nối, bạn phải thay đổi chính sách mặc định của các mạch để từ chối. Điều này có lẽ sẽ chỉ hữu ích cho các máy chủ chứa thông tin bí mật và sẽ chỉ được kết nối với chúng bằng cùng một địa chỉ IP.

iptables --policy INPUT DROP
iptables --policy ĐẦU RA THẢ
iptables --policy TIẾP TỤC TIẾP THEO

Phản hồi kết nối

Với các chính sách chuỗi mặc định được định cấu hình, bạn có thể bắt đầu thêm quy tắc vào iptables để nó biết phải làm gì khi gặp kết nối đến một địa chỉ IP hoặc cổng cụ thể. Trong hướng dẫn này, chúng ta sẽ xem xét ba “câu trả lời” phổ biến nhất và được sử dụng thường xuyên nhất.

Chấp nhận- cho phép kết nối.

Làm rơi- Ngắt kết nối, coi như chuyện đó chưa từng xảy ra. Điều này là tốt nhất nếu bạn không muốn nguồn nhận ra rằng hệ thống của bạn tồn tại.

Từ chối— từ chối kết nối nhưng gửi thông báo lỗi. Điều này là tốt nhất nếu bạn không muốn một nguồn cụ thể kết nối với hệ thống của mình nhưng bạn muốn họ biết rằng tường lửa của bạn đã chặn họ.

Cách tốt nhất để thể hiện sự khác biệt giữa ba quy tắc này là hiển thị nó trông như thế nào khi PC cố gắng ping Máy Linux với iptables được cấu hình cho từng tùy chọn này.

Quyền kết nối:

Xóa kết nối:

Từ chối kết nối:

Một mặt nạ mạng hoặc đặc tính để chỉ ra một dải địa chỉ IP.

Thiết lập iptables trên Linux: Phương thức kết nối

Nếu chúng ta nói về chủ đề “Thiết lập iptables trên Linux”, thì chúng ta cần nói về các phương thức kết nối.

Cho phép hoặc chặn các kết nối cụ thể
Với các chính sách được định cấu hình, bạn có thể định cấu hình iptables để cho phép hoặc chặn địa chỉ nhất định, phạm vi địa chỉ và cổng. Trong các ví dụ này, chúng tôi sẽ đặt các kết nối thành DROP nhưng bạn có thể chuyển chúng sang CHẤP NHẬN hoặc TỪ CHỐI, tùy thuộc vào nhu cầu của bạn và cách bạn định cấu hình chuỗi chính sách của mình.

Ghi chú. Trong những ví dụ này, chúng tôi sẽ sử dụng iptables -A để thêm quy tắc vào chuỗi hiện có. Iptables bắt đầu ở đầu danh sách và đi qua từng quy tắc cho đến khi tìm thấy quy tắc phù hợp với nó. Nếu bạn cần chèn một quy tắc lên trên một quy tắc khác, bạn có thể sử dụng iptables -I để chỉ định số sẽ có trong danh sách.

Kết nối từ cùng một địa chỉ IP

Ví dụ này cho thấy cách chặn tất cả các kết nối từ địa chỉ IP 10.10.10.10..

iptables -A INPUT -s 10.10.10.10 -j THẢ

Kết nối từ nhiều địa chỉ IP

Ví dụ này cho thấy cách chặn tất cả các địa chỉ IP trong phạm vi mạng 10.10.10.0/24. Bạn có thể sử dụng mặt nạ mạng hoặc dấu gạch chéo chuẩn để chỉ định một dải địa chỉ IP.

iptables -A INPUT -s 10.10.10.0/24 -j THẢ

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

Kết nối với một cổng cụ thể

Ví dụ này cho thấy cách chặn kết nối SSH từ 10.10.10.10.

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

Bạn có thể thay thế "ssh" bằng bất kỳ giao thức hoặc số cổng nào. Phần -p tcp của mã cho iptables biết kết nối đang sử dụng giao thức nào. Nếu bạn đang chặn một giao thức sử dụng UDP thay vì TCP thì -p udp sẽ được yêu cầu thay thế.

Ví dụ này cho thấy cách chặn kết nối SSH từ bất kỳ địa chỉ IP nào.

iptables -A INPUT -p tcp --dport ssh -j THẢ

Trạng thái kết nối

Như chúng tôi đã đề cập trước đó, nhiều giao thức yêu cầu giao tiếp hai chiều. Ví dụ: nếu bạn muốn cho phép kết nối SSH vào hệ thống của mình, các mạch đầu vào và đầu ra sẽ cần thêm quy tắc vào chúng. Tuy nhiên, nếu bạn muốn cho phép đăng nhập SSH vào hệ thống của mình thì sao? Việc thêm quy tắc vào chuỗi đầu ra có dẫn đến các nỗ lực SSH gửi đi không?

Đây là lúc các trạng thái kết nối xuất hiện, cung cấp cho bạn tùy chọn cho phép liên lạc hai chiều nhưng chỉ cho phép thực hiện kết nối một chiều. Hãy xem ví dụ này trong đó cho phép kết nối SSH TỪ 10.10.10.10 nhưng không cho phép kết nối SSH ĐẾN 10.10.10.10. Tuy nhiên, hệ thống được phép gửi lại thông tin qua SSH trong khi phiên đã được thiết lập, giúp có thể liên lạc SSH giữa hai máy chủ.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m trạng thái - trạng thái MỚI, THÀNH LẬP -j CHẤP NHẬN

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state THÀNH LẬP -j CHẤP NHẬN

Lưu thay đổi

Những thay đổi bạn thực hiện đối với quy tắc iptables sẽ bị hủy vào lần tiếp theo khi dịch vụ iptables được khởi động lại trừ khi bạn đưa ra lệnh lưu các thay đổi. Lệnh này có thể thay đổi tùy thuộc vào bản phân phối của bạn:

sudo /sbin/iptables-save

Mũ đỏ/CentOS:

/sbin/service iptables lưu

/etc/init.d/iptables lưu

Các lệnh khác

Danh sách các quy tắc iptables hiện được cấu hình:

Thêm tùy chọn -v sẽ cung cấp cho bạn thông tin gói và byte và thêm -n sẽ chứa mọi thứ giá trị số. Nói cách khác, tên máy chủ, giao thức và mạng được liệt kê dưới dạng số.

Để xóa tất cả các quy tắc hiện được cấu hình, bạn có thể chạy lệnh tuôn ra.

Bản dịch từ một nguồn tài liệu tiếng Anh xuất sắc HowToGeek.

Nếu bạn vẫn có bất kỳ câu hỏi nào về chủ đề “Thiết lập iptables trên Linux cho người mới sử dụng”, bạn có thể viết chúng vào biểu mẫu nhận xét trên trang web của chúng tôi.

Nếu bạn tìm thấy lỗi, vui lòng đánh dấu một đoạn văn bản và nhấp vào Ctrl+Enter.