สารบัญ:

Raspberry Pi4 Firewall: 12 ขั้นตอน
Raspberry Pi4 Firewall: 12 ขั้นตอน

วีดีโอ: Raspberry Pi4 Firewall: 12 ขั้นตอน

วีดีโอ: Raspberry Pi4 Firewall: 12 ขั้นตอน
วีดีโอ: ROCK 4 ดีกว่า Raspberry Pi จริงหรือ...? EP.1 2024, พฤศจิกายน
Anonim
Raspberry Pi4 Firewall
Raspberry Pi4 Firewall

ด้วย Raspbery Pi 4 (RPi4) ใหม่ที่เพิ่งเปิดตัว ฉันตัดสินใจสร้างไฟร์วอลล์สำหรับใช้งานที่บ้าน หลังจากท่องอินเทอร์เน็ตไปทั่ว ฉันพบบทความดีๆ เกี่ยวกับเรื่องนี้โดย Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html) บทความนี้น่าทึ่งมาก และคุณควรอ่านก่อนดำเนินการต่อ เนื่องจากจะทำให้กระบวนการที่อธิบายไว้ที่นี่ง่ายขึ้น สิ่งนั้นคือบทความนั้นเขียนขึ้นในปี 2555 และอิงตาม distro ของ ArchLinux ไม่มีอะไรเทียบกับ ArchLinux แต่ฉันต้องการสร้างสิ่งนี้โดยใช้ Raspbian build ทั่วไป RPi4 สามารถรองรับข้อกำหนดในการประมวลผลได้ ขอบคุณ Guillaume สำหรับแรงบันดาลใจ!! คำแนะนำนี้จะอ้างอิงกลับไปที่โพสต์ต้นฉบับของ Guillaume ("GK" สั้น ๆ) คุณอาจต้องการเปิดทั้งสองหน้าในเบราว์เซอร์ของคุณ

สิ่งสำคัญสองสามประการเกี่ยวกับไฟร์วอลล์ของฉัน:

  • ฉันมีแจ็คอีเทอร์เน็ตในตัว (eth0) ที่ไปที่LAN
  • เราเตอร์ ISP อยู่บนอะแดปเตอร์ TRENDnet (eth1)
  • ฉันได้ปิดการใช้งานอแด็ปเตอร์ไร้สาย (wlan0)
  • ไม่รับประกันว่าคุณจะได้รับ 100% ที่นั่น … หวังว่าอย่างน้อย 99%:) ดังนั้นโปรดให้ข้อเสนอแนะ / ความคิดเห็น
  • นี่เป็นคำสั่งแรกของฉัน ขออภัยสำหรับสิ่งที่ไม่เป็นไปตามบรรทัดฐานที่สอนได้อย่างเหมาะสม

เอาล่ะมาสนุกกัน…

เสบียง

  • ราสเบอร์รี่ Pi 4

    • ฉันใช้รุ่น 4GB อย่าลังเลที่จะลองใช้รุ่นอื่น
    • เคส (ฉันชอบ FLIRC แต่นั่นก็แล้วแต่คุณ)
    • อะแดปเตอร์ไฟฟ้า
  • การ์ด MicroSD, 32GB หรือมากกว่า (ฉันใช้การ์ด 64GB)
  • TRENDnet USB3.0 Gigabit Ethernet Dongle (รุ่น: TU3-ETG)
  • สายเคเบิลเครือข่าย RJ45 คู่
  • แป้นพิมพ์และเมาส์ USB
  • สาย Micro-HDMI เป็น HDMI (ที่เสียบเข้ากับจอภาพ HDMI)

แป้นพิมพ์ วิดีโอ และเมาส์นั้นสามารถลบออกได้เมื่อคุณเปิดใช้งาน SSH และ VNC แล้ว

ขั้นตอนที่ 1: การตั้งค่า RPi เริ่มต้น

การตั้งค่า RPi เริ่มต้น
การตั้งค่า RPi เริ่มต้น

สิ่งแรกที่ต้องทำคือทำให้ RPi4 ของคุณทำงานเป็นระบบใหม่ ดาวน์โหลดและติดตั้ง Raspbian full distribution (Raspbian Buster พร้อมเดสก์ท็อปและซอฟต์แวร์ที่แนะนำ) คุณจะต้องรีบูตสองสามครั้งเพื่อให้สามารถขยายและใช้ประโยชน์จากการ์ด MicroSD แบบเต็มได้

เมื่อบูทเครื่อง คุณจะต้องตอบคำถามเกี่ยวกับพื้นที่ เครือข่าย คีย์บอร์ด และเมาส์ เชื่อมต่อกับเครือข่ายและอนุญาตให้อัปเดต

ให้ยืนยันด้วยว่าทุกอย่างอัปเดตอย่างถูกต้อง และรับยูทิลิตี้สองสามตัวที่อาจช่วยในการดีบักในภายหลัง:

$ sudo apt-get update

$ sudo apt-get dist-upgrade $ sudo apt-get ติดตั้ง htop $ sudo apt-get ติดตั้ง tcpdump

ฉันไม่ได้ติดตั้ง vim และไม่ทำขั้นตอนที่ 8 ของ GK (กำหนดค่า vim) ฉันเพิ่งใช้ตัวแก้ไข vi เพราะมันมีคุณสมบัติส่วนใหญ่อยู่แล้ว นอกจากนี้ยังช่วยประหยัดเวลาและความพยายามอีกด้วย

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

$ sudo vi /boot/config.txt

ในไฟล์นั้น:

uncomment (ลบด้านหน้า #-สัญลักษณ์): hdmi_force_hotplug=1

ไม่ใส่ความคิดเห็น: hdmi_drive=2

หรือเพิ่ม: enable_hdmi_sound

ขั้นตอนที่ 2: การสร้างเครือข่าย

ระบบเครือข่าย
ระบบเครือข่าย
ระบบเครือข่าย
ระบบเครือข่าย

หากคุณกำลังติดตามบนไซต์ของ GK นี่คือขั้นตอนที่ 3 แต่โปรดจำไว้ว่า ฉันไม่ได้ทำตามขั้นตอนแรกของเขามากมายในลำดับที่แน่นอน

เมื่อฉันเริ่มต้นสิ่งนี้ ฉันเชื่อมต่อ RPi โดยตรงกับเราเตอร์ ISP ของฉัน ("ถัดจากเครือข่ายที่มีอยู่ของฉัน") สิ่งนี้ทำให้ฉันสามารถเล่นกับการกำหนดค่าได้โดยไม่ส่งผลกระทบต่อเครือข่าย เชื่อมต่อ RJ45 ในตัว RPi4 กับเราเตอร์ของคุณ (หรือไร้สาย ถ้าคุณต้องการ) ด้วย Raspbian วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ GUI จากเดสก์ท็อป ให้คลิกไอคอน Raspberry > Preferences > Raspberry Pi Configuration อย่าลืมเปิดใช้งาน SSH และ VNC สิ่งนี้จะติดตั้งไคลเอนต์เซิร์ฟเวอร์ Real-VNC ฉันพบว่าถ้าคุณพยายามเชื่อมต่อกับไคลเอนต์ Tight VNC มันจะพอดีและต้องมีการกำหนดค่าเพิ่มเติม ดังนั้น ณ จุดนี้ให้ติดตั้งไคลเอ็นต์ Real-VNC บนเดสก์ท็อป/แล็ปท็อปหลักของคุณ (ไม่ใช่ RPi4)

SSH จะไม่ทำงานนอกกรอบ (ขั้นตอนของ GK 7) เราจำเป็นต้องแก้ไขการกำหนดค่าบางอย่าง ขั้นแรก ให้แก้ไขไฟล์กำหนดค่า ssh นี่คือการเปลี่ยนแปลงที่ฉันทำ โปรดทราบว่าฉันไม่ได้ศึกษาผลกระทบของการเปลี่ยนแปลงทุกอย่างที่นี่ ฉันทำตามที่เว็บไซต์ของ GK แนะนำ การเปลี่ยนแปลงบางอย่างอาจไม่จำเป็น

$ sudo vi /etc/ssh/sshd_config

ในไฟล์นั้น ให้ uncomment บรรทัดต่อไปนี้:

HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogLevel INFOStrictModes ใช่PubkeyAuthentication ใช่HostBasedAuthentication no

ละเว้น Rhosts ใช่

PrintMotd noPrintLastLog ใช่ TCPKeepAlive ใช่

และเพิ่มบรรทัดต่อไปนี้:

โปรโตคอล 2 UsePrivilegeSeparation ใช่KeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentcation yesRhostsRSAAuthentication no

และแก้ไขบรรทัดต่อไปนี้:

พอร์ต 15507LoginGraceTime 60PermitRootLogin no

มาคุยกันเรื่องการปรับเปลี่ยนก่อน…พอร์ต 15507 กัน ปกติ SSH ทำงานบนพอร์ต 22 GK ย้ายไปที่ 15507--ไม่รู้ว่าทำไม คุณสามารถแก้ไขได้หรือไม่… หากคุณเลือกที่จะแก้ไข คุณจะต้องเพิ่ม "-p 15507" ในคำสั่ง SSH ใดๆ ที่คุณพยายามจะเชื่อมต่อด้วย หากคุณตัดสินใจที่จะข้ามไป ให้จับตาดูสถานที่อื่นๆ ที่กล่าวถึง 15507 ในคำแนะนำเหล่านี้และไม่ต้องสนใจ โดยเฉพาะกฎของไฟร์วอลล์!

สุดท้ายสำหรับขั้นตอนนี้ ให้รับที่อยู่ IP ของ RPi4 เพื่อให้เรารู้ว่าต้องเชื่อมต่อกับอะไร:

$ ipconfig -a

ค้นหาการเชื่อมต่อเครือข่ายที่ใช้งานอยู่ (น่าจะอยู่ที่ eth0 หรือ wlan0) และจดที่อยู่ IP นั้นไว้ ตอนนี้คุณมีสิ่งที่คุณต้องการเพื่อเชื่อมต่อกับ RPi4 จากระยะไกลแล้ว มารีบูตก่อนที่เราจะไปต่อ:

$ sudo รีบูต

ขั้นตอนที่ 3: ผู้ใช้รายอื่น

ผู้ใช้รายอื่น
ผู้ใช้รายอื่น

เป็นการดีที่สุดที่จะไม่ใช้ชื่อผู้ใช้ RPi เริ่มต้น (pi) และคุณควรเปลี่ยนรหัสผ่านอย่างแน่นอน เพื่อความปลอดภัย ให้เพิ่มบัญชีผู้ใช้อื่นที่คุณสามารถใช้เพื่อเชื่อมต่อจากระยะไกลและดำเนินการต่อด้วย (ขั้นตอนของ GK 6) กลับไปที่ RPi ให้เพิ่มผู้ใช้ใหม่และตั้งค่าการอนุญาตสำหรับผู้ใช้เป็น SSH และออกคำสั่ง sudo:

$ sudo useradd -m -g users -G sudo, netdev -s /bin/bash [USERNAME]

$ sudo passwd [ชื่อผู้ใช้]

คุณสามารถออกจากระบบหรือรีบูตและใช้บัญชีที่สร้างขึ้นใหม่ได้ในอนาคต

ขั้นตอนที่ 4: ไฟล์ Syctl

ไฟล์ Syctl
ไฟล์ Syctl

ขั้นตอนต่อไปคือการแก้ไขไฟล์ /etc/sysctl.conf (ขั้นตอนที่ 9) ของ GK ไฟล์นี้ใช้เพื่อเปลี่ยนการตั้งค่าเคอร์เนลบางส่วน เราจะทำสิ่งที่ GK บอกให้ทำอย่างแน่นอน นี่คือชุดขั้นตอนแบบง่าย

$ sudo vi /etc/sysctl.conf

ในไฟล์นั้น ให้ uncomment บรรทัดต่อไปนี้:

net.ipv4.conf.default.rp_filter=1net.ipv4.conf.all.rp_filter=1net.ipv4.tcp_syncookies=1

net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.all.log_martians = 1

และเพิ่มบรรทัดต่อไปนี้:

net.ipv4.icmp_echo_ignore_broadcasts = 1net.ipv4.icmp_ignore_bogus_error_responses = 1net.ipv4.conf.eth0.accept_redirects = 0vm.min_free_kbytes = 8192

เริ่มบริการใหม่ด้วยการตั้งค่าใหม่และรีบูต:

$ sudo sysctl -p

$ sudo รีบูต

ขั้นตอนที่ 5: DHCP & DNS (ตอนที่ 1)

DHCP & DNS (ตอนที่ 1)
DHCP & DNS (ตอนที่ 1)

สำหรับฉัน มีสองส่วนที่เจ็บปวดในกระบวนการนี้… การตั้งค่า DHCP & DNS และการตั้งค่ากฎไฟร์วอลล์ เอาล่ะ มาต่อกันที่ภาคแรกกันเลย หากคุณกำลังติดตามไซต์ของ GK เราอยู่ในขั้นตอนที่ 10

ในการทำเช่นนี้ คุณจะต้องใช้ข้อมูลบางส่วนจากเราเตอร์ ISP ของคุณ (หรือไฟร์วอลล์ปัจจุบัน):

  • ที่อยู่ IP ภายในของเราเตอร์
  • ที่อยู่ IP ที่คุณใช้สำหรับอินเทอร์เฟซของ RPi4 กับเราเตอร์ได้
  • IPs สำหรับเนมเซิร์ฟเวอร์ (หรือสอง)
  • ชื่ออินเทอร์เฟซสำหรับการเชื่อมต่อ LAN (เช่น eth0 หรือ eth1)
  • ชื่ออินเทอร์เฟซสำหรับการเชื่อมต่อ ISP (เช่น อะไรก็ตามที่คุณไม่ได้ใช้สำหรับ LAN)

คุณอาจต้องแก้ไขการตั้งค่าของเราเตอร์เพื่อให้ RPi4 มีที่อยู่ IP แบบคงที่ (bullet 2 ด้านบน) อย่างน้อยนั่นคือสิ่งที่ฉันทำ

ขั้นแรก ให้แก้ไขไฟล์ dhcpcd.conf…

$ sudo vi /etc/dhcpcd.conf

ยกเลิกหมายเหตุบรรทัดเหล่านี้:

Persistryoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

สำหรับแต่ละอินเทอร์เฟซเครือข่าย คุณต้องตั้งค่ารายละเอียดเครือข่าย พวกเขาควรมีลักษณะดังนี้:

# คงที่สำหรับส่วนต่อประสานกับ ISP

interface eth1 static ip_address=192.168.1.static routers=192.168.1.254 static domain_name_servers=8.8.8.8 8.8.4.4 metric 100 # Static สำหรับอินเทอร์เฟซ LAN อินเตอร์เฟส eth0 static ip_address=10.210.212.static routers=10.210.212.1 คงที่ domain_name_servers=8.8.8.8 8.8.4.4 #interface wlan0 #static ip_address=10.210.212.#static routers=10.210.212.1 #static domain_name_servers=8.8.8.8 #Uncomment this section if you want to force an IP address on a device. ชื่อหลัง 'เจ้าภาพ' #ไม่มีความหมายต่อระบบ ป้อนที่อยู่ MAC ของอุปกรณ์รวมถึงที่อยู่ #IP ที่ต้องการ ตรวจสอบให้แน่ใจว่าอยู่นอกช่วง dhcp ทำซ้ำตามความจำเป็น #host [อะไรก็ได้] { # ฮาร์ดแวร์อีเธอร์เน็ต xx:xx:xx:xx:xx:xx; # ที่อยู่คงที่ 10.210.212.250; #}

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

นอกจากนี้ หากคุณต้องการบังคับที่อยู่ IP บนอุปกรณ์ (เช่น NAS) ให้ใช้ส่วนด้านล่าง ตั้งชื่อโฮสต์ที่มีความหมายกับคุณ แต่รู้ว่าไม่เคยมีใครใช้ชื่อนี้ อย่าลืมเครื่องหมายอัฒภาค

ขั้นตอนที่ 6: DHCP & DNS (ตอนที่ 2)

DHCP & DNS (ตอนที่ 2)
DHCP & DNS (ตอนที่ 2)

ขั้นตอนต่อไปคือการแก้ไขไฟล์ dnsmasq.conf…

$ sudo vi /etc/dnsmasq.conf

เราจำเป็นต้องยกเลิกความคิดเห็นสองสามบรรทัด และแก้ไขสองสามบรรทัด คุณจะต้องคัดลอกการตั้งค่าบางอย่างจากไฟล์ dhcpcd.conf อีกสองคำถามที่คุณต้องตอบสำหรับตัวคุณเองคือ:

LAN ภายใน (เช่น eth0) ต้องการ DHCP และ DNS หรือไม่ คุณต้องการช่วง DHCP ใดสำหรับ LAN ของคุณ และแต่ละสัญญาเช่าควรมีความยาวเท่าใด

เริ่มต้นด้วยการไม่ใส่ความคิดเห็นสองสามบรรทัด:

bogus-privno-dhcp-interface=wlan0bind-interfacesdhcp-name-match=set:wpad-ignore, wpaddhcp-ignore-names=tag:wpad-ignore

ตั้งชื่อเซิร์ฟเวอร์ของคุณ มองหาบรรทัดที่ขึ้นต้น 'server=' และทำให้เป็น 'server=8.8.8.8'

ตั้งค่าช่วง DHCP ของคุณ มีหลายวิธีในการทำเช่นนี้ ฉันเลือกที่จะจัดเตรียม IP ปลายทางสองรายการ มาสก์ และระยะเวลาการเช่า ช่วงของฉันคือ 10.210.212.20-10.210.212.240 โดยมี netmask 255.255.255.0 และเวลาเช่า 12 ชั่วโมง ฉันแนะนำให้คุณปล่อย IP บางส่วนไว้ที่ด้านบนและด้านล่างของช่วงของคุณ ในกรณีที่คุณจำเป็นต้องให้ IP แบบคงที่

ตั้งค่าอินเทอร์เฟซที่จะได้รับ DNS และ DHCP (LAN) โดยแก้ไขบรรทัด 'interface=' ให้เป็น 'interface=eth0) ขอให้สังเกตว่าฉันบอกเป็นพิเศษว่าอย่ากำหนดที่อยู่ IP DHCP ให้กับเครือข่ายไร้สายของฉัน อีกครั้ง ฉันตั้งใจจะปิดอินเทอร์เฟซนั้นโดยสมบูรณ์ ดังนั้นมันจึงสมเหตุสมผลสำหรับฉัน

ขั้นตอนที่ 7: DHCP & DNS (ตอนที่ 3)

DHCP & DNS (ตอนที่ 3)
DHCP & DNS (ตอนที่ 3)

การเบี่ยงเบนจากคำแนะนำของ GK สำหรับขั้นตอนสุดท้ายนี้…

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

สร้างรหัสต่อไปนี้เป็นไฟล์ชื่อ 'dns_masq_keepalive.sh' บน RPi ของคุณ

#!/bin/bash

# ไฟล์: dns_masq_keepalive.sh # สิงหาคม 2019 # ใช้สิ่งนี้กับ crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) เพื่อให้แน่ใจว่า dnsmasq ทำงาน บริการจะหยุดตัวเองหาก # อินเทอร์เฟซทั้งหมดที่กล่าวถึงใน dhcpcd.conf ไม่ได้ทำงานก่อนที่จะเริ่มต้น วิธีนี้ช่วยแก้ไขปัญหา # บรรทัดถัดไปจะส่งคืนงานที่ใช้งานอยู่ทั้งหมดที่มีคำว่า 'dnsmasq' อยู่ในนั้น ดังนั้นอย่ารวม 'dnsmasq' ไว้ในชื่อไฟล์ # นี้ มิฉะนั้นจะส่งคืนทุกครั้งและคุณจะไม่มีวันรีสตาร์ท dns_running=$(ps -e | grep dnsmasq) echo $dns_running if [-z "$dns_running"] แล้ว #echo No DNSMasq sudo /etc/init.d/dnsmasq restart #else #echo DNSMasq Running fi

ตัดและวางหากคุณต้องการ ไม่ว่าคุณจะทำอะไร อย่ารวม 'dnsmasq' ไว้ในชื่อ สคริปต์จะค้นหาคำว่า 'dnsmasq' และหากสคริปต์มีอยู่ในชื่อ สคริปต์จะถือว่าบริการกำลังทำงานอยู่ เปลี่ยนชื่อไฟล์ให้ลงท้ายด้วย '.sh' Instructables ไม่อนุญาตให้ฉันอัปโหลดไฟล์ '.sh' ซึ่งถือว่าดี คำแนะนำที่เหลือถือว่าไฟล์อยู่ที่: /etc/dns_masq_keepalive.sh

ประการที่สอง ตั้งค่าการอนุญาตในไฟล์เพื่อให้สามารถดำเนินการได้:

$ sudo chmod u+x /etc/dns_masq_keepalive.sh

ตอนนี้เราจะใช้ระบบ crontab เพื่อให้โปรแกรมทำงานทุกๆ 2 นาทีของทุกวัน เริ่ม crontab:

$ sudo crontab -e

ควรแจ้งให้คุณแก้ไขโดยใช้ vi หรืออย่างอื่น ใด ๆ จะทำงาน เมื่อแก้ไขได้แล้ว ให้เพิ่มสิ่งต่อไปนี้ต่อท้ายไฟล์:

*/2 * * * * sudo /etc/dns_masq_keepalive.sh

ไม่มีช่องว่างใน '*/2' แต่มีช่องว่างระหว่างเครื่องหมายดอกจัน บันทึกและเลิก ควรบอกคุณว่างานมีกำหนดหรืออะไรทำนองนั้น

ขั้นตอนที่ 8: ไฟร์วอลล์

ไฟร์วอลล์
ไฟร์วอลล์

กระบวนการที่เจ็บปวดต่อไปคือไฟร์วอลล์ (ขั้นตอนที่ 11 ของ GK) Raspbian ใช้ระบบ iptables ที่รู้จักกันดี บล็อกของ GK มีไฟล์สามไฟล์ที่จะช่วยให้คุณไปถึงที่นั่น… firewall.simple, firewall.advanced และ firewall.flows ทั้งหมดเกี่ยวกับ GK แต่ทำให้ง่ายสำหรับตัวคุณเองและเพียงแค่ใช้ firewall.simple ฉันใช้เวลามากในการพยายามหาระบบและกฎ iptables ฉันดีใจที่ได้ทำ แต่มันเจ็บปวด ดังนั้นฉันจึงให้ไฟล์แนบสองไฟล์แก่คุณเพื่อช่วยคุณ… firewall.simple และ firewall.clear คัดลอกไฟล์ทั้งสองนี้ไปยังโฟลเดอร์ /etc ของคุณและเปลี่ยนการอนุญาตเพื่อให้ปฏิบัติการได้:

$ sudo chmod u+x /etc/firewall.simple

$ sudo chmod u+x /etc/firewall.clear

ก่อนที่คุณจะตั้งค่ากฎไฟร์วอลล์ใดๆ ให้เสียบเดสก์ท็อป/แล็ปท็อปเข้ากับพอร์ต RPi eth0 ของคุณและยืนยันว่าได้รับที่อยู่ IP และเปิดใช้งาน DNS วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการลอง ping ไซต์ทั่วไปแล้วตามด้วยที่อยู่ IP ที่รู้จัก ping เราเตอร์ RPi และ ISP ของคุณด้วย หากคุณได้ผลลัพธ์ แสดงว่าทุกอย่างเรียบร้อยดี และปัญหาเครือข่ายใดๆ ที่คุณพบในตอนนี้อาจเป็นผลมาจากปัญหาไฟร์วอลล์

ไฟล์แรกที่ให้มาเริ่มต้นเป็นไฟล์ firewall.simple ของ GK (ขอบคุณอีกครั้ง GK!) ฉันได้ทำการเปลี่ยนแปลงหลายอย่างเพื่อให้มันใช้งานได้กับระบบนี้ ควรอนุญาต HTTP, HTTPS, DNS, DHCP, ping, SSH ภายใน, VNC ภายในและเพล็กซ์เป็นอย่างน้อย Plex อาจไม่มีพอร์ตที่เปิดอยู่ทั้งหมดสำหรับอุปกรณ์ทุกเครื่องที่เป็นไปได้ แต่มีโพสต์มากมายให้แก้ไข ที่ด้านบนของไฟล์คือค่าที่คุณจะต้องเปลี่ยนเป็นการกำหนดค่าเครือข่ายของคุณ

ไฟล์ที่สอง firewall.clear มีวัตถุประสงค์เพื่อใช้ในขณะที่คุณทดสอบกฎไฟร์วอลล์ของคุณ เมื่อคุณเรียกใช้ 'sudo /etc/firewall.clear' กฎไฟร์วอลล์ทั้งหมดจะถูกล้างและระบบควรเชื่อมต่อกับอินเทอร์เน็ตอย่างสมบูรณ์ ดังนั้น หากคุณไม่สามารถทำให้บริการเครือข่าย (เช่น dns) ทำงานโดยใช้กฎ firewall.simple ได้ แต่จะเริ่มทำงานหลังจากที่คุณเรียกใช้ firewall.clear แล้วคุณจะรู้ว่าคุณมีปัญหาเกี่ยวกับกฎ สิ่งนี้จะมีความสำคัญอย่างยิ่งเมื่อทดสอบกฎของคุณเท่านั้น

ดังนั้นเราจึงมีกฎไฟร์วอลล์อยู่ที่นั่น เราต้องทำให้พวกเขาเริ่มต้นเมื่อ RPi เริ่มทำงาน ในการทำเช่นนั้น เราจะแก้ไขไฟล์ /etc/rc.local:

$ sudo vi /etc/rc.local

เมื่อเข้าไปข้างในแล้วให้เพิ่มสิ่งต่อไปนี้ต่อท้ายไฟล์:

echo “กำลังโหลดกฎ iptables”/etc/firewall.simple >> /dev/null

หากคุณเลือกที่จะเพิ่มระบบตรวจจับการบุกรุก snort คุณจะต้องแก้ไขไฟล์นี้อีกครั้ง สำหรับตอนนี้เพียงแค่บันทึกและรีบูต

$ sudo รีบูต

ขั้นตอนที่ 9: Syslog

Syslog
Syslog

เหลืออีกสองก้าว…

นี้เป็นเรื่องง่าย หากคุณยังคงอยู่ที่นั่น และติดตามบล็อกของ GK ต่อไป นี่คือขั้นตอนที่ 12 คุณต้องทำสิ่งที่เขาพูดเกี่ยวกับไฟล์ syslog ให้ถูกต้อง นี่คือขั้นตอนโดยย่อ:

เก็บข้อมูล syslog ให้คุ้มค่า 2 เดือน…

$ sudo vi /etc/logrotate.conf

เราจำเป็นต้องบอกให้ใช้ 'หนึ่งสัปดาห์' เป็นหน่วยวัด แล้วเก็บไว้ 12 ตัว คุณต้องมีสองบรรทัดต่อไปนี้ในไฟล์นี้ ฉันเชื่อว่าคุณจะต้องเปลี่ยนบรรทัดที่มีอยู่

รายสัปดาห์หมุน 12

บันทึกมัน

ขั้นตอนที่ 10: การตรวจจับการบุกรุกด้วย Snort

การตรวจจับการบุกรุกด้วย Snort
การตรวจจับการบุกรุกด้วย Snort

สิ่งสุดท้ายที่ GK กำหนดค่าคือระบบ snort ฉันแนะนำสิ่งนี้เช่นกัน คุณสามารถทำตามกฎของเขา และฉันจะไม่คัดลอกกฎทั้งหมดที่นี่ โดยมีการแก้ไขเล็กน้อย คำแนะนำของเขามีไว้สำหรับ ArchLinux distro ต่อไปนี้คือการเปลี่ยนแปลงเล็กน้อยสำหรับการแจกจ่าย Raspbian ที่เราใช้ที่นี่ คำแนะนำที่เหลือทำงานได้ดี

ก่อนอื่นอย่าใช้ sudo pacman -S snort เพื่อดาวน์โหลดและติดตั้ง snort ทำดังต่อไปนี้:

$ sudo apt-get ติดตั้ง snort

ประการที่สอง คุณไม่สามารถตรวจสอบ snort ด้วย sudo snort -version ตรวจสอบการติดตั้งด้วย:

$ sudo snort -V

สุดท้าย เมื่อต้องการให้มันทำงานเมื่อเริ่มต้น อย่าแก้ไขไฟล์ rc.conf แก้ไขไฟล์ rc.local (อีกครั้ง)…

$ sudo vi /etc/rc.local

เพิ่มบรรทัดต่อไปนี้ต่อท้ายไฟล์:

echo "กำลังโหลด snort"

#/usr/sbin/snort -D -u snort -g snort -c /etc/snort/snort.conf -i eth0 -l /var/log/snort

ตอนนี้ รีบูต และทุกอย่างควรจะทำงานได้อย่างน่าอัศจรรย์

$ sudo รีบูต

ขั้นตอนที่ 11: สนุก

สนุก
สนุก

ที่ควรจะเป็น!

ก่อนอื่น ฉันไม่สามารถขอบคุณ Guillaume Kaddouch ได้มากพอ! เขาได้แรงบันดาลใจนี้

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

สุดท้ายนี้อาจไม่สมบูรณ์แบบ 100% โปรดโพสต์กลับด้วยการเปลี่ยนแปลง/ข้อเสนอแนะ/คำแนะนำ เป้าหมายของฉันคือเพื่อให้สิ่งนี้เป็นจุดเริ่มต้นของการสนทนาและผู้คนจำนวนมากเพลิดเพลิน!

ขอบคุณ!!

PS… รูปภาพคือ RPi4 ภายในเคสอะลูมิเนียม FLIRC พร้อมพัดลม Intel รุ่นเก่าที่ดัดแปลงเล็กน้อยและติดซิปไว้ด้านบน มีแผ่นแปะระบายความร้อนใต้พัดลมด้วยเผื่อคุณสงสัย ฉันพบสิ่งที่คล้ายกันบนอินเทอร์เน็ต (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) และตัดสินใจลองด้วยตัวเอง

ขั้นตอนที่ 12: บันทึกการเปลี่ยนแปลง

เมื่อมีการเปลี่ยนแปลงคำแนะนำนี้ ฉันจะจัดทำเอกสารไว้ที่นี่ในกรณีที่คุณมีปัญหา ให้ตรวจสอบที่นี่เพื่อดูว่าคุณคว้าคำแนะนำหรือไฟล์เก่าหรือไม่

25 กันยายน 2019:

  • แก้ไขกฎ DHCP ใน firewall.simple
  • แก้ไขช่วง DHCP ในคำแนะนำ (ไฟล์ถูกต้อง)
  • เพิ่มการกำหนด IP คงที่ให้กับคำสั่ง DHCP

13 ตุลาคม 2019

  • แก้ไขคำผิดหลายรายการ
  • สร้าง pi ตัวที่สอง ดังนั้นฉันจะมี SDcard ทดสอบเพื่อสลับ ถ้าจำเป็น

แนะนำ: