Score:0

แนวทางปฏิบัติที่ดีที่สุดสำหรับกฎ nftables ที่คงอยู่

ธง in

ฉันยังใหม่กับ Ubuntu ที่ย้ายจากการโฮสต์บน CentOS7 ซึ่งใช้ iptables และฉันรู้สึกสบายใจกับวิธีที่ apf และ bfd จัดการ (ซ่อน) iptables จากฉัน .. และมันก็ทำงานได้ดี

ดังนั้นฉันจึงย้ายไปที่ Ubuntu (20.04 LSR) และ "ubuntu-way" เพื่อทำไฟร์วอลล์ด้วยการพยายามแบนอัตโนมัติเพื่อเจาะระบบดูเหมือนจะเป็น nftables และ fail2ban

ฉันใช้ iRedMail เพื่อตั้งค่าเซิร์ฟเวอร์อีเมลพื้นฐาน nginx, postfix, dovecot, clamav, roundcube และอื่น ๆ และกำหนดค่า fail2ban เพื่อดูบันทึกสำหรับความพยายามในการแฮ็กเข้าสู่บริการอีเมลและ ssh และอื่น ๆ และฉันได้เห็น มันแยกวิเคราะห์บันทึกเมลของฉันอย่างถูกต้องและจัดเก็บ fial2ban ips ที่ถูกบล็อกในตาราง inet f2b-table

สิ่งนี้รอดจากการรีบูตอย่างถูกต้อง แต่ฉันสังเกตเห็นว่าไฟล์ /etc/nftables.conf ไม่มีตารางที่ล้มเหลวใด ๆ อยู่ในนั้น - มันมีไฟร์วอลล์พื้นฐานของฉันซึ่งฉันสามารถอัปเดตแบบคงที่เพื่อปฏิเสธพอร์ต tcp ทั้งหมดที่ฉันต้องการ (โดยพื้นฐานแล้ว เมลและเว็บเซิร์ฟเวอร์และ ssh)

แต่เท่าที่ฉันเห็น กฎของ fail2ban ไม่ได้อยู่ในไฟล์ config แต่ดูเหมือนว่าจะถูกสร้างขึ้นใหม่เมื่อบูตจากรายการในตาราง fail2ban ในฐานข้อมูล mysql ที่ตั้งค่าโดย iRedMail

ไม่เป็นไร .. แต่นี่คือภาวะที่กลืนไม่เข้าคายไม่ออก: ถ้าฉันเพิ่มกฎในไฟร์วอลล์ด้วยตนเองโดยใช้ประโยชน์จากตารางที่มีอยู่สำหรับ fail2ban ฉันสามารถ..

nft เพิ่มองค์ประกอบ inet f2b-table addr-set-postfix-pregreet { spammer.ip.addr.here }

มันปรากฏขึ้นและใช้งานได้ .. ฉันทดสอบโดยการล็อคตัวเองสำเร็จแล้วลบออกผ่านคอนโซลในเครื่อง ..

ยกเว้นเมื่อฉันรีบูท ตารางทั้งหมดจะสูญหายไปและสร้างขึ้นใหม่โดย fail2ban จากรายการตาราง (ฉันก็ยังเจ๋งเหมือนเดิม)

ดังนั้นฉันไปข้างหน้าและเพิ่มโต๊ะ / สิ่งของใหม่ของฉันเอง

ผู้ส่งสแปมตาราง inet {
    ตั้งหลุมดำ {
            พิมพ์ ipv4_addr
            องค์ประกอบ = { sample.ip.addr.here }
    }

    เชนสแปมเมอร์-เชน {
            ประเภท ตัวกรองเบ็ด ตัวกรองลำดับความสำคัญของอินพุต - 2; นโยบายยอมรับ;
            ip saddr @blackhole ดรอป
    }
 }

ทดสอบสิ่งนี้อีกครั้งและใช้งานได้ดี แต่เพื่อที่จะคงอยู่ฉันต้องเขียนไปที่ /etc/nftables.conf หรือตั้งค่าไดเร็กทอรีนั้นให้อ่านในกฎของฉัน ฯลฯ

ฉันสามารถทำได้โดยการเพิ่มการรวมใน nftables.conf ของฉันในไดเร็กทอรีของกฎตามอำเภอใจแล้วเก็บตารางของฉันไว้ทุกครั้งที่ฉันเพิ่มที่อยู่ แต่สิ่งนี้ดูน่าเกลียดและผิด

ราวกับว่าฉันต้องการเพิ่มสแปมเมอร์รายใหม่ในรายการของฉัน ฉันสามารถทำได้

nft เพิ่มองค์ประกอบ inet ผู้ส่งอีเมลขยะ blackhole { new.ip.addr.here }

แต่แล้วจะต้อง.. ยืนยันตารางไปยังไฟล์ของฉันหรือไม่

รายการ nft ตารางผู้ส่งอีเมลขยะ inet > /etc/nftables.d/spammers.conf

นั่นเป็นวิธีหนึ่งที่ฉันสามารถทำได้ แต่ฉันเคยเห็นคนอื่นพูดถึง netfilter-persist แต่นั่นไม่ใช่ส่วนหนึ่งของ Ubuntu ดังนั้นก่อนที่ฉันจะออกไปทั้งประดิษฐ์วงล้อของตัวเองหรือลงไปที่โพรงกระต่าย netfilter-persist หรือ (ไม่ ขอบคุณ) ทำบางสิ่งที่คล้ายกับที่ Fail2ban ดูเหมือนจะทำไปแล้ว... (จัดเก็บ IP ที่ถูกแบนในฐานข้อมูลและสร้างรายการใหม่เมื่อเข้าสู่ระบบ)

ฉันสามารถคิดได้หลายวิธี .. แต่ฉันสงสัยว่ามี "แนวทางปฏิบัติที่ดีที่สุด" "Ubuntu-way" ที่ฉันหายไปที่นี่หรือไม่ ...

อัปเดต/แก้ไข: เว้นแต่ฉันจะได้รับคำแนะนำที่ดีกว่า "วิธีแก้ปัญหา" ของฉันในตอนนี้คือ

mkdir /etc/nftables.d/
รายการ nft ตารางผู้ส่งอีเมลขยะ inet > /etc/nftables.d/spammers.conf

จากนั้นฉันก็แก้ไข /etc/nftables.conf เพื่อเพิ่มบรรทัดนี้ที่ด้านล่าง

รวม "/etc/nftables.d/*.conf"

ตอนนี้ เมื่อฉันเพิ่มบล็อกลงในตาราง มันเป็น 2 ขั้นตอน:

nft เพิ่มองค์ประกอบ inet ผู้ส่งอีเมลขยะ blackhole { some.evildoer.ip.address }
รายการ nft ตารางผู้ส่งอีเมลขยะ inet > /etc/nftables.d/spammers.conf

มันไม่ได้สวยงามที่สุด แต่ใช้งานได้จริง .. แน่นอนว่าฉันสามารถรวมทั้งหมดนี้ไว้ในสคริปต์ที่กำหนดเองของฉันเองเพื่อที่ฉันจะได้เรียกสิ่งที่ต้องการ

สแปมเมอร์ "badguy.ip.addr.here"

และ banspammer จะเพิ่มองค์ประกอบที่อยู่ที่ระบุและบันทึกตารางที่อัปเดต def...

อีกครั้งนี่รู้สึกเหมือน "ไม่ใช่แนวปฏิบัติที่ดีที่สุด" ดังนั้นคำถามของฉัน

แก้ไข: 2021-12-22 โอเค ฉันค่อนข้างคุยกับตัวเองแต่เนื่องจากฉันไม่ได้รับคำติชมใดๆ ฉันจึงทำตามไอเดียของฉัน - มันใช้ได้ผลและฉันได้เขียนสคริปต์แบนสแปมเมอร์เล็กๆ นี้...มันดิบและอาจอันตรายมาก - ฉันไม่ได้ตรวจสอบสุขภาพจิต เช่น รบกวนตรวจสอบว่าเส้นทางไฟล์ config นั้นถูกต้องหรือไม่ และไม่ได้ทำการสำรองข้อมูลไฟล์ดังกล่าว ฯลฯ ...

เนื่องจากรายการตารางเป็นประเภท ipv4_addr nftables จึงทำการตรวจสอบ ดังนั้นฉันจึงไม่ต้องกังวลเกี่ยวกับเรื่องนี้มากนัก

โปรดทราบว่าการตั้งค่าเฉพาะของฉันมีตัวกรองชื่อ fileter ในตระกูล inet แล้ว - ฉันเพิ่มสิ่งนี้เป็นพิเศษเป็นรายการที่มีลำดับความสำคัญต่ำกว่าเล็กน้อย ฉันยังสร้างไดเร็กทอรี /etc/nftables.d และเพิ่มในโค้ดของฉันเพื่อให้แยกวิเคราะห์ไดเร็กทอรี config เป็น ฉันกล่าวถึงข้างต้น

หวังว่าบางคนจะพบว่าสิ่งนี้มีประโยชน์

ฉันยังคงสนใจ "Ubuntu-way" มากกว่าหากมีสิ่งนี้

#!/usr/bin/sh

#################################################### ##############################
# banspammer 2021-12-22 DigitalSorceress
#  
# สรุป
# สคริปต์นี้เพิ่ม ip หรือช่วงของ Ips (ดูการเพิ่มองค์ประกอบ) ให้กับ nftables
# โดยเฉพาะกับหลุมดำสแปมเมอร์ของฉัน
# มันยังคงอยู่ที่ /etc/nftables.d/spammers.conf
#
# วางสิ่งนี้ไว้ที่ใดที่หนึ่งเช่น /root/tandautils
# จากนั้นไปที่ /user/local/sbin และ ln -s /root/tandautils/banspammer.sh banspammer
#
#################################################### ##############################

# จัดการบรรทัดคำสั่ง args
คำสั่ง = $1
ที่อยู่=$2


# ตำแหน่งของไฟล์กำหนดค่า ssh daemon
# ค่าเริ่มต้นสำหรับ CentOS คือ CONFIG_FILE=/etc/ssh/sshd_config
#
CONFIG_FILE=/etc/nftables.d/spammers.conf



# นี่คือรูทีนย่อยสำหรับการดำเนินการแต่ละรายการ
ban_spammer () {
    # ออกคำสั่งพื้นฐานเพื่อแบนผู้ส่งสแปม 
    echo "เพิ่มสแปมเมอร์ใน blackhole ..."
    
    nft เพิ่มองค์ประกอบ inet ผู้ส่งอีเมลขยะ blackhole { ${ADDRESS} }
    BAN_SPAMMER_RESULT=$?
    ถ้า [ $BAN_SPAMMER_RESULT -eq 0 ] 
    แล้ว
        echo " เสร็จสิ้น: เพิ่ม ${ADDRESS} ไปยังตารางสแปมเมอร์"
    ไฟ
    เสียงก้อง ""
}

unban_spammer () {
    # ออกคำสั่งพื้นฐานเพื่อแบนผู้ส่งสแปม 
    echo "ลบ spammer จาก blackhole ..."
    
    nft ลบองค์ประกอบ inet สแปมเมอร์ หลุมดำ { ${ADDRESS} }

    UNBAN_SPAMMER_RESULT=$?
    ถ้า [ $UNBAN_SPAMMER_RESULT -eq 0 ] 
    แล้ว
        echo " เสร็จสิ้น: ลบ ${ADDRESS} จากตาราง"
    ไฟ
    เสียงก้อง ""
}

ถาวร_spamtable () {
    echo "ยังคงส่งสแปมไปยัง ${CONFIG_FILE}..."
    # เราจำเป็นต้องยืนยันตารางสแปมเพื่อกำหนดค่า
    รายการ nft ตารางผู้ส่งอีเมลขยะ inet > ${CONFIG_FILE}
    ถ้า [ $? -eq 0 ]
    แล้ว
      echo "เสร็จแล้ว..แสดงตาราง..."
      เสียงก้อง ""
      nft รายการตารางผู้ส่งสแปม inet
    อื่น
      echo "ตารางเกิดข้อผิดพลาด.."
    ไฟ
    เสียงก้อง ""
}

list_spamtable () {
    echo "รายชื่อ spamtable"
    เสียงก้อง ""
    nft รายการตารางผู้ส่งสแปม inet
    เสียงก้อง ""
}

kill_spamtable () {
    echo "กำลังรีเซ็ต / สร้างตารางสแปมว่าง ${CONFIG_FILE}..."

    #rm -f /etc/nftables.d/spammers.conf
    ที /etc/nftables.d/spammers.conf <<EOF
ผู้ส่งสแปมตาราง inet {
    ตั้งหลุมดำ {
        พิมพ์ ipv4_addr
    }

    เชนสแปมเมอร์-เชน {
        ประเภท ตัวกรองเบ็ด ตัวกรองลำดับความสำคัญของอินพุต - 2; นโยบายยอมรับ;
        ip saddr @blackhole ดรอป
    }
}
อฟ
    เสียงก้อง ""
    ถ้า [ $? -eq 0 ]
    แล้ว
        echo "สำเร็จ.. นี่คือไฟล์ใหม่:"
        เสียงก้อง ""
        แมว /etc/hftables.d/spammers.conf
    อื่น
        echo "เขียนไฟล์ผิด..."
    ไฟ
    
    เสียงก้อง ""
}

ช่วยฉันด้วย () {
  echo "นี่คือเครื่องมือที่ช่วยลดความซับซ้อนในการบล็อกที่อยู่ IP ของผู้ส่งสแปม"
  เสียงสะท้อน " "
  echo "banspammer 2021-12-22 DigitalSorceress" 
  เสียงสะท้อน " "
  echo "สรุป"
  echo " สคริปต์นี้ใช้เพื่อลดความซับซ้อนของการเพิ่ม/ลบสแปมเมอร์จาก "
  echo " ตารางสแปมเมอร์ในชุดกฎ nftables "
  เสียงสะท้อน " "
  เสียงสะท้อน " "
  echo "การใช้งาน: $0 คำสั่งแบนสแปมเมอร์ [ที่อยู่] "
  เสียงสะท้อน " "
  echo " ตัวเลือกคำสั่ง: "
  echo " ที่อยู่ห้าม "
  echo " แบนที่อยู่เป้าหมาย สามารถเป็น singe IP หรือ comma sep list "
  เสียงสะท้อน " "
  echo "ปลดแบนที่อยู่"
  echo " ลบที่อยู่เป้าหมายอาจเป็น single IP หรือรายการเครื่องหมายจุลภาค "
  เสียงสะท้อน " "
  เสียงสะท้อน "รีเซ็ต"
  echo " ล้างรายการทั้งหมดจากตารางผู้ส่งอีเมลขยะ "
  echo " โปรดทราบว่าสิ่งนี้สามารถใช้เพื่อสร้างตารางว่างใหม่ "
  เสียงสะท้อน " "
  เสียงสะท้อน "แสดง"
  echo " แสดงรายการตารางสแปมปัจจุบัน "
  เสียงสะท้อน " "
  ก้อง "ช่วย"
  echo " แสดงกล่องโต้ตอบความช่วยเหลือนี้"
}



#ที่นี่เราทำงานจริงตามคำสั่งที่ผ่านไป
กรณี "$COMMAND" ใน
  ห้าม)
    ถ้า [ $# -eq 2 ] 
    แล้ว
        echo "ที่อยู่ห้าม: ${ADDRESS}"
        ban_spammer ${ADDRESS}
      ถ้า [ $BAN_SPAMMER_RESULT -eq 0 ]
      แล้ว
        ถาวร_spamtable
      ไฟ
    อื่น
        echo "คำสั่งห้ามต้องการ IP เดียวหรือรายการ IP ที่คั่นด้วยเครื่องหมายจุลภาค "
    ไฟ
    ;;
  ปลดแบน)
    ถ้า [ $# -eq 2 ] 
    แล้ว
      echo "ยกเลิกการแบนที่อยู่: ${ADDRESS}"
      unban_spammer ${ADDRESS}
      ถ้า [ $UNBAN_SPAMMER_RESULT -eq 0 ]
      แล้ว
        ถาวร_spamtable
      ไฟ
    ไฟ
    ;;
  แสดง)
      list_spamtable
      ;;
  รีเซ็ต)
      kill_spamtable
      ;;
  ช่วย)
    ช่วยฉันด้วย
    ;;
  *)
      echo "การใช้งาน: $0 ban|unban comma-separated-ip-list or $0 show|reset"
      ทางออก 1
เอสแซค
Score:0
ธง us

ถ้าคุณ apt-get ติดตั้ง iptables-persistent มันจะดึงเข้ามา netfilter-ถาวร ดูเหมือนว่าจะเป็นสิ่งที่คุณกำลังมองหาเพื่อยืนยันกฎ netfilter ของคุณ

Someone avatar
my flag
ตามที่เขียนอยู่ในขณะนี้ คำตอบของคุณไม่ชัดเจน โปรด [แก้ไข] เพื่อเพิ่มรายละเอียดเพิ่มเติมที่จะช่วยให้ผู้อื่นเข้าใจว่าสิ่งนี้ตอบคำถามที่ถามอย่างไร คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเขียนคำตอบที่ดีได้[ในศูนย์ช่วยเหลือ](/help/how-to-answer)

โพสต์คำตอบ

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