บล็อกทั้งหมดยกเว้น ips เล็กน้อยด้วย firewalld


17

บนเครื่องเครือข่าย linux ฉันต้องการ จำกัด ชุดที่อยู่ในโซน "สาธารณะ" (แนวคิดไฟร์วอลล์) ที่ได้รับอนุญาตให้เข้าถึงได้ ดังนั้นผลลัพธ์ที่ได้ก็คือไม่มีเครื่องอื่นใดที่สามารถเข้าถึงพอร์ตหรือโปรโตคอลใด ๆ ยกเว้นที่ได้รับอนุญาตอย่างชัดเจนซึ่งเป็นการจัดเรียงของการผสมผสาน

  --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'

ปัญหาข้างต้นคือว่านี่ไม่ใช่รายการจริงมันจะปิดกั้นทุกอย่างเนื่องจากถ้าที่อยู่ของมันถูกบล็อกโดยไม่เหมือนกับที่อื่น ๆ สร้างผลกระทบ "ปล่อยทั้งหมด" โดยบังเอิญฉันจะ "ปลดบล็อก" เฉพาะที่ไม่ใช่ ชุดต่อเนื่องกันไหม แหล่งที่มายอมรับรายการที่อยู่หรือไม่ ฉันไม่เห็นอะไรเลยในเอกสารของฉันหรือผลลัพธ์ของ google


แก้ไข: ฉันเพิ่งสร้างสิ่งนี้:

# 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: 

แต่ฉันยังคงสามารถเข้าถึงพอร์ต 6000 ได้จาก .123 ความตั้งใจของฉันคือถ้าหากแหล่งที่ไม่ได้อยู่ในรายการก็ไม่ควรเข้าถึงบริการหรือพอร์ตใด ๆ

คำตอบ:


24

กฎสมบูรณ์ไม่จำเป็นเลย

หากคุณต้องการ จำกัด โซนให้กับชุดของ IP เฉพาะให้กำหนด IP เหล่านั้นเป็นแหล่งที่มาของโซนนั้นเอง (และลบคำจำกัดความของอินเทอร์เฟซใด ๆ ที่อาจมีอยู่ในขณะที่พวกเขาแทนที่ IP ของแหล่งที่มา)

คุณอาจไม่ต้องการทำเช่นนี้ในโซน "สาธารณะ" เนื่องจากนั่นหมายถึงความหมายเพื่อให้บริการสาธารณะหันหน้าไปทางโลก

ให้ลองใช้โซนอื่นเช่น "ภายใน" สำหรับที่อยู่ IP ที่เชื่อถือได้ส่วนใหญ่เพื่อเข้าถึงบริการที่มีความละเอียดอ่อนเช่น sshd (คุณสามารถสร้างโซนของคุณเองได้)

คำเตือน: อย่าเข้าใจผิดว่า "เชื่อถือ" โซนพิเศษกับโซน "ภายใน" ปกติ แหล่งข้อมูลใด ๆ ที่เพิ่มไปยังโซน "เชื่อถือได้" จะได้รับอนุญาตผ่านทางพอร์ตทั้งหมด อนุญาตให้เพิ่มบริการในโซน "ที่เชื่อถือได้" แต่ไม่จำเป็นต้องทำเช่นนั้น

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

ผลลัพธ์ของสิ่งนี้จะเป็นโซน "ภายใน" ซึ่งอนุญาตการเข้าถึง ssh แต่จะมาจากที่อยู่ IP ที่กำหนดไว้สองรายการเท่านั้น ในการทำให้เป็นแบบถาวรให้รันคำสั่งแต่ละคำสั่งใหม่โดย--permanentต่อท้าย


โปรดอธิบายสิ่งที่คุณหมายถึงโดย "คำจำกัดความอินเทอร์เฟซที่อาจมี" iv ลองข้อเสนอแนะของคุณโปรดดูการแก้ไขของฉัน
ไมค์

@ ไมค์อย่างที่ฉันพูดคุณต้องลบออกeth1จากโซน firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton

โซนเข้ารหัสเป็นโซนใหม่ก่อนที่ eth1 จะอยู่ในที่สาธารณะฉันย้ายมันจากที่สาธารณะเพื่อเข้ารหัสดังนั้นการเข้ารหัสมีแหล่งที่มา 0.120 ฉันคิดว่ามีเพียง 120 คนเท่านั้นที่จะสามารถเข้าถึงพอร์ตสิ่งที่ฉันขาดหายไปคืออะไร
ไมค์

1
หากคุณใส่อินเทอร์เฟซในโซนดังนั้นสิ่งใดก็ตามที่มาถึงผ่านอินเทอร์เฟซสามารถเข้าถึงพอร์ตและบริการใด ๆ ก็ตามที่ถูกเพิ่มเข้าไปในโซนโดยไม่คำนึงถึงที่อยู่ IP ดังนั้นมันจึงอาจเป็นของสาธารณะซึ่ง แต่เดิมนั้น
Michael Hampton

ahh ดังนั้นแหล่งที่ยอมรับจะยังคงได้รับอนุญาตแม้ว่าอินเทอร์เฟซจะถูกวางไว้ในที่สาธารณะและแหล่งที่ยอมรับได้จะอยู่ในแหล่งที่เชื่อถือได้อื่นหรือไม่
ไมค์

1

ตามfirewalld.richlanguage:

แหล่งที่มา [ไม่] ที่อยู่ = "ที่อยู่ [/ หน้ากาก]"

   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.

ระบุ netmask สำหรับที่อยู่เพื่ออนุญาตบล็อกที่ต่อเนื่องกัน

นอกเหนือจากนั้นคุณสามารถลองสร้างipsetรายการ IP ที่ได้รับอนุญาตที่ไม่ต่อเนื่องกัน

ตัวอย่างเช่นใน/etc/firewalld/direct.xml:

<?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>

ที่เกิดขึ้นจริงipsetจะต้องมีการสร้างแยกต่างหาก


สิ่งนี้จะปฏิเสธสิ่งที่ฉันต้องการคือสิ่งที่ตรงกันข้ามยอมรับถ้าอยู่ในกองถ่าย
ไมค์

0

คุณสามารถจัดการได้อย่างง่ายดายโดย Rich Rule

ขั้นแรก

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

ขั้นตอนที่สอง - เพิ่มกฎสมบูรณ์

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

พอร์ตทั้งหมดสามารถเข้าถึงได้โดย 192.168.2.2 เมื่อคุณเพิ่มกฎสมบูรณ์และบล็อกทุกพอร์ตจากแหล่งอื่น

หากคุณจะเพิ่มพอร์ตหรือบริการใด ๆ ตามคำสั่งด้านล่างมันจะสามารถเข้าถึงได้โดยแหล่งที่มาทั้งหมด

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

หากคุณต้องการเปิดพอร์ตเฉพาะสำหรับ Ip เฉพาะกว่าด้านล่างคำสั่ง

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.