chặn tất cả trừ một vài ips với tường lửa


17

Trên một máy tính nối mạng linux, tôi muốn hạn chế tập hợp các địa chỉ trên vùng "công cộng" (khái niệm tường lửa), được phép tiếp cận nó. Vì vậy, kết quả cuối cùng sẽ không có máy nào khác có thể truy cập vào bất kỳ cổng hoặc giao thức nào, ngoại trừ những máy được cho phép rõ ràng, một loại hỗn hợp

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

Vấn đề ở trên là đây không phải là một danh sách thực, nó sẽ chặn mọi thứ vì nếu địa chỉ của nó bị chặn bởi không giống với địa chỉ kia, tạo ra hiệu ứng "thả tất cả" vô tình, làm thế nào tôi "bỏ chặn" một thứ không cụ thể tiếp giáp tập hợp? nguồn có chấp nhận một danh sách các địa chỉ? Tôi không thấy bất cứ điều gì trong cái nhìn của tôi về các tài liệu hoặc kết quả google cho đến nay.


EDIT: Tôi vừa tạo cái này:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Nhưng tôi vẫn có thể truy cập cổng 6000 từ .123 ý định của tôi là nếu một nguồn không được liệt kê, nó sẽ không thể truy cập bất kỳ dịch vụ hoặc cổng nào

Câu trả lời:


24

Các quy tắc phong phú không cần thiết ở tất cả.

Nếu bạn muốn giới hạn một vùng trong một nhóm IP cụ thể, chỉ cần xác định các IP đó là nguồn cho chính vùng đó (và xóa bất kỳ định nghĩa giao diện nào có thể có, vì chúng ghi đè IP nguồn).

Tuy nhiên, có lẽ bạn không muốn làm điều này với khu vực "công cộng", vì điều đó có ý nghĩa về mặt ngữ nghĩa đối với các dịch vụ đối mặt với công chúng được mở ra cho thế giới.

Thay vào đó, hãy thử sử dụng một khu vực khác, chẳng hạn như "nội bộ" cho các địa chỉ IP chủ yếu đáng tin cậy để truy cập các dịch vụ nhạy cảm tiềm năng như sshd. (Bạn cũng có thể tạo các vùng riêng của mình.)

Cảnh báo: không nhầm vùng "đáng tin cậy" đặc biệt với vùng "nội bộ" thông thường. Bất kỳ nguồn nào được thêm vào vùng "đáng tin cậy" sẽ được cho phép trên tất cả các cổng; thêm dịch vụ vào khu vực "đáng tin cậy" được cho phép nhưng không có ý nghĩa gì để làm như vậy.

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

Kết quả của việc này sẽ là một vùng "nội bộ" cho phép truy cập vào ssh, nhưng chỉ từ hai địa chỉ IP đã cho. Để làm cho nó bền bỉ, hãy chạy lại từng lệnh với phần --permanentbổ sung.


vui lòng làm rõ ý của bạn bằng "định nghĩa giao diện có thể có mặt", iv đã thử đề xuất của bạn, vui lòng xem chỉnh sửa của tôi.
mike

@mike Giống như tôi đã nói, bạn cần xóa eth1khỏi khu vực. firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton

tốt, vùng mã hóa là vùng mới, trước khi eth1 xuất hiện, tôi đã chuyển nó từ nơi công cộng sang mã hóa, vì vậy mã hóa có nguồn .120, tôi nghĩ chỉ có 120 để có thể truy cập vào cổng, tôi còn thiếu gì?
mike

1
Nếu bạn đặt giao diện vào vùng, thì mọi thứ đến qua giao diện đều có thể truy cập vào bất kỳ cổng và dịch vụ nào được thêm vào vùng đó, bất kể địa chỉ IP. Vì vậy, nó có thể thuộc về nơi công cộng, nơi nó ban đầu.
Michael Hampton

à, vậy các nguồn được chấp nhận vẫn sẽ được cho phép ngay cả khi giao diện được đặt ở chế độ công khai và các nguồn chấp nhận được đặt trong một nguồn đáng tin cậy khác?
mike

1

Theo firewalld.richlanguage:

Nguồn nguồn [không] address = "address [/ mask]"

   With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

Chỉ định một mặt nạ cho địa chỉ để cho phép các khối liền kề.

Ngoài ra, bạn có thể thử tạo một ipsetdanh sách IP được phép không liền kề.

Ví dụ /etc/firewalld/direct.xml: trong :

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

Thực tế ipsetphải được tạo riêng.


điều này sẽ từ chối, những gì tôi cần là nghịch đảo, chấp nhận nếu trong tập,
mike

0

Bạn có thể quản lý dễ dàng bằng Rich Rule.

Bước đầu tiên

firewall-cmd --permanent --set-default-zone=home
firewall-cmd --permanent --zone=drop --change-interface=eth0

Bước thứ hai - Thêm quy tắc phong phú

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

Tất cả các cổng có thể truy cập bằng 192.168.2.2 sau khi bạn thêm quy tắc phong phú và chặn mọi cổng từ nguồn khác.

Nếu bạn sẽ thêm bất kỳ cổng hoặc dịch vụ nào bằng lệnh bên dưới thì tất cả các nguồn sẽ có thể truy cập được.

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

Nếu bạn muốn mở cổng cụ thể cho Ip cụ thể hơn lệnh dưới đây

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.