ฉันจะใช้ iptables บน centos 7 ได้อย่างไร [ปิด]


154

ฉันติดตั้ง CentOS 7 ด้วยการตั้งค่าขั้นต่ำ (เครื่องมือ os + dev) ฉันกำลังพยายามเปิดบริการ 80 พอร์ตhttpdแต่มีข้อผิดพลาดบางอย่างกับบริการ iptables ของฉัน ... เกิดอะไรขึ้นกับมัน ผมทำอะไรผิดหรือเปล่า?

# ifconfig/sbin/service iptables save
bash: ifconfig/sbin/service: No such file or directory


# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

# sudo service iptables status
Redirecting to /bin/systemctl status  iptables.service
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

# sudo service iptables start
Redirecting to /bin/systemctl start  iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

ลองใช้ /etc/init.d/iptables นี้บันทึก
Satya

8
ผมได้คำตอบที่นี่ RHEL 7 ใช้firewalldของiptables
Meiblorn

คำตอบ:


333

ด้วย RHEL 7 / CentOS 7, firewalldได้รับการแนะนำให้รู้จักกับการจัดการ iptables IMHO, firewalld เหมาะสำหรับเวิร์กสเตชันมากกว่าสภาพแวดล้อมเซิร์ฟเวอร์

เป็นไปได้ที่จะกลับไปที่การตั้งค่า iptables แบบคลาสสิก ก่อนอื่นหยุดและปิดบังบริการ firewalld:

systemctl stop firewalld
systemctl mask firewalld

จากนั้นติดตั้งแพ็กเกจ iptables-services:

yum install iptables-services

เปิดใช้งานบริการขณะบู๊ต:

systemctl enable iptables

ผู้จัดการบริการ

systemctl [stop|start|restart] iptables

การบันทึกกฎไฟร์วอลล์ของคุณสามารถทำได้ดังนี้:

service iptables save

หรือ

/usr/libexec/iptables/iptables.init save

5
มันไม่ได้บันทึก iptables การรีบูตเซิร์ฟเวอร์สูญเสียการเปลี่ยนแปลงทั้งหมด
roosevelt

2
ในระบบของฉัน iptables ถูกบันทึกอย่างถูกต้อง คุณแน่ใจหรือไม่ว่าบริการ iptables เริ่มต้นทำงานตอนบูท? คุณสามารถทำได้โดยการเรียกใช้ 'systemctl enable iptables'
Sgaduuw

1
นอกจากนี้คุณยังอาจเรียกใช้ firewalld ซึ่งจะเพิ่มกฎ iptables เพิ่มเติมลงในรายการ (ทุกครั้งที่คุณรีบูทระบบ) หากต้องการหยุด firewalld ให้เรียกใช้ "systemctl mask firewalld"
TroodoN-Mike

เพิ่มข้อมูลเกี่ยวกับการปิดบัง firewalld ให้กับคำตอบตามที่ @ TroodoN-Mike แนะนำ
Sgaduuw

8
@Sgaduuw คุณช่วยอธิบายเกี่ยวกับสาเหตุที่คุณคิดว่า fitewalld ไม่เหมาะสำหรับเซิร์ฟเวอร์ได้หรือไม่?
Alexander Groß

98

RHEL และ CentOS 7 การใช้งานไฟร์วอลล์ cmd แทน iptables คุณควรใช้คำสั่งประเภทนั้น:

# add ssh port as permanent opened port
firewall-cmd --zone=public --add-port=22/tcp --permanent

จากนั้นคุณสามารถโหลดกฎเพื่อให้แน่ใจว่าทุกอย่างเรียบร้อย

firewall-cmd --reload

สิ่งนี้ดีกว่าการใช้ iptable-save โดยเฉพาะถ้าคุณวางแผนที่จะใช้คอนเทนเนอร์ lxc หรือ docker การเรียกใช้บริการนักเทียบท่าจะเพิ่มกฎบางอย่างที่คำสั่ง iptable-save จะถาม หากคุณบันทึกผลลัพธ์คุณจะมีกฎมากมายที่ไม่ควรบันทึก เนื่องจากคอนเทนเนอร์นักเทียบท่าสามารถเปลี่ยนที่อยู่ IP ได้ในการรีบูตครั้งถัดไป

Firewall-cmd พร้อมตัวเลือกถาวรจะดีกว่า

ตรวจสอบ "man firewall-cmd" หรือตรวจสอบเอกสาร firewalld อย่างเป็นทางการเพื่อดูตัวเลือก มีตัวเลือกมากมายในการตรวจสอบโซน, การกำหนดค่า, วิธีการทำงาน ... man page เสร็จสมบูรณ์จริง ๆ

ฉันแนะนำอย่างยิ่งให้ไม่ใช้ iptables-service ตั้งแต่ Centos 7


1
คำอธิบายที่ดีเยี่ยม - ใช้ได้อย่างสมบูรณ์แบบสำหรับฉัน ขอบคุณ!
ดิจิทัล

1
firewall-cmd - โหลดไม่ทำงาน ฉันต้องรีสตาร์ทโดยใช้ "systemctl restart firewalld" เพื่อให้การเปลี่ยนแปลงมีผล
Basil Musa

"เนื่องจาก firewalld เป็นแบบไดนามิกสามารถทำการเปลี่ยนแปลงการกำหนดค่าได้ตลอดเวลาและถูกนำไปใช้งานทันทีไม่จำเป็นต้องทำการรีโหลดไฟร์วอลล์บางส่วนดังนั้นจึงไม่มีการหยุดชะงักของการเชื่อมต่อเครือข่ายที่ไม่ได้ตั้งใจ" - จากไฟร์วอลล์ firewalld docs
yicone

มีประสิทธิภาพและสะอาด ขอบคุณมาก
Vaibhav

17

ฉันมีปัญหาว่าการรีบูตเครื่องจะไม่เริ่มต้น iptables

มันคงที่:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables

ใน CentOS 7 ไม่ทำงาน: การ# systemctl start iptablesให้ Failed to start iptables.service: Unit not found.และการ# systemctl start ip6tablesมอบให้Failed to start ip6tables.service: Unit not found.
PKHunter


5

ฉันแก้ไขการ/etc/sysconfig/ip6tables-configเปลี่ยนแปลงไฟล์:

IP6TABLES_SAVE_ON_STOP="no"

ถึง:

IP6TABLES_SAVE_ON_STOP="yes"

และนี่:

IP6TABLES_SAVE_ON_RESTART="no"

ถึง:

IP6TABLES_SAVE_ON_RESTART="yes"

สิ่งนี้ดูเหมือนจะบันทึกการเปลี่ยนแปลงที่ฉันทำโดยใช้คำสั่ง iptables ผ่านการรีบูต


1

ใส่การกำหนดค่า IPtables ในไฟล์ดั้งเดิมและจะถูกโหลดหลังจากบูต:

/ etc / sysconfig / iptables


1

เดือนที่แล้วฉันพยายามกำหนดค่า iptables บน LXC VM container แต่ทุกครั้งหลังจากรีบูตการกำหนดค่า iptables ไม่ได้ถูกโหลดโดยอัตโนมัติ

วิธีเดียวที่ฉันจะใช้งานได้ก็คือการรันคำสั่งต่อไปนี้:

yum -y ติดตั้ง iptables บริการ systemctl ปิดการใช้งาน firewalld; systemctl mask firewalld; บริการ iptables รีสตาร์ท บริการ iptables บันทึก


0

และเพื่อเพิ่มคุณควรจะสามารถทำเช่นเดียวกันสำหรับ ip6tables หลังจากเรียกใช้systemctl mask firewalldคำสั่ง:

    systemctl start ip6tables.service
    systemctl enable ip6tables.service

0

หากคุณทำเช่นนั้นและคุณใช้ fail2ban คุณจะต้องเปิดใช้งานตัวกรอง / การกระทำที่เหมาะสม:

ใส่บรรทัดต่อไปนี้ใน /etc/fail2ban/jail.d/sshd.local

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 5
bantime = 86400

เปิดใช้งานและเริ่มต้น fail2ban:

systemctl enable fail2ban
systemctl start fail2ban

การอ้างอิง: http://blog.iopsl.com/fail2ban-on-centos-7-to-protect-ssh-part-ii/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.