พี่โป้ง เทพเสมอ
ใช้ nginx แล้วโดนยิงไม่ร่วง แถมยังได้ log มากมาย ทำให้เรา block ได้อย่างง่ายได้
ตัวอย่างที่ได้จาก ไฟล์ error_log เนื่องจากถูกยิง
2011/05/28 07:34:24 [info] 18655#0: *24849027 client sent invalid method while reading client request line, client: 125.26.30.221, server: localhost, request: “^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@”
2011/05/28 07:34:24 [info] 18655#0: *24849028 client sent invalid method while reading client request line, client: 125.26.30.221, server: localhost, request: “^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@”
2011/05/28 07:34:22 [info] 18654#0: *24849020 client sent invalid method while reading client request line, client: 125.26.30.221, server: localhost, request: “^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@”
2011/05/28 07:34:22 [info] 18656#0: *24849021 client sent invalid method while reading client request line, client: 125.26.30.221, server: localhost, request: “^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@”
จะเห็นว่า log โตเร็วมาก เนื่องจากมันยิงเข้ามาที่ Port 80 จะสังเกตุได้ว่า มันมาด้วย IP ซ้ำๆ ประมาณ 100-200 IP แล้วก็จะเปลี่ยนไปเรื่อยๆ แต่ไม่มาก ถ้าไม่ถึง 1000 IP นี้ก็ยังโอเคอยู่สำหรับการ Block
**** หากทุกยิงด้วย SYN จะเป็นอีกแบบหนึ่ง จริงๆ แล้วการยิง port 80 นี้บางครั้งทำให้เราหาตัวมันได้อยากยิ่งเลยครับ พอมี nginx แล้วทำให้การ block ip ง่ายขึ้นมากเลยครับ
วิธีการดูว่าถูกยิงแน่หรือเปล่าให้
ls -al ดูไฟล์ error_log ว่ามีขนาดเพิ่มขึ้นเร็วหรือเปล่า
-
เคลียค่า error_log ก่อนโดยใช้คำสั่ง “> error_log”
-
ls -al ดูว่าขนาดไฟล์เพิ่มขึ้นอย่างร่วดเร็วหรือไม่ (ผมลองทิ้งไว้ 1 วันเครื่องที่โดนยิงจะมีขาดไฟลื error_log เพิ่มขึ้นถึง 2 GB แค่ 1 วันนะครับ มันโหดมากๆ เลย)
-
ใช้คำสั่ง “cat error_log | awk ‘{print $16}’ | cut -d, -f1 | sort | uniq -c | sort -nr” ตัวอย่างของผม
อันนี้ตัวอย่างจากของจริง ใช้เวลาเก็บข้อมูลหลังจากเคลียไปแล้ว 1 นาที
2853 125.26.30.221
2406 113.53.154.232
2374 118.172.140.108
2321 125.24.35.187
2300 118.172.234.87
2109 118.172.132.213
872 118.173.116.165
679 125.26.180.20
504 125.26.38.227
407 182.53.106.223
216 118.172.255.55
210 125.27.181.39
จะเห็นว่าในเวลาแค่ 1 นาที มันจะมีการเรียกอะไรสักอย่างใน port 80 แต่ละ IP มากถึง 2800 ครั้ง ถามว่าเป็นไปได้มั้ยที่คนจะสามารถเข้ามาเรียกหน้าเว็บหรืออะไรก็ตามขนาดนี้ได้
- ทำการ block มันซ่ะด้วย iptables -A INPUT -s 125.26.30.221 -j DROP
และเพื่อให้มันทำงานอัตโนมัติ ลองเขียน Shell Script ดูนะครับ
ให้ดูอีก server อันนี้เพิ่งเปิดดูไม่เคลยเคลีย log โหดมั้ย
510505 58.8.57.90
14738 125.27.21.235
14403 125.27.24.200
12702 61.90.12.80
12666 118.173.234.168
ทำไมถึง Reload Nginx ไม่ได้ครับ ต้องแก้ยังไงครับ
ในทีสุดก็ทำได้จนได้. หลังจากทำแล้วพังมา 4 รอบ. ต้องขอขอบคุณ อ.ทุกท่านในกระทู้นี้ โดยเฉพาะ คุณ ems, น้องมีน, และเซียนอุ้ย. ลองแล้วลองอีกกว่าจะได้สุ่มเทสกับเว็บบน server ซึ่งส่วนมากเป็น joomla ใช้ได้ทั้ apache mod_rewrite และ rewrite ด้วย mod_php (นำหน้าด้วย index.php/sefurl) นี่อาจเป็นข้อดีที่พอจะมีของการ build php แบบ cli ก็ได้ผมไม่ต้องแก้อะไรให้ลูกค้าเลยใช้งานได้ตามปกติทันทีตั้งแต่สั่ง FW port ไป 85 ตอนแรกนึกว่าจะต้องมีอะไรจุกจิกให้แก้แต่ไม่มีเลย.
แต่ server ผมไม่ค่อยมีเว็บที่ใช้ static files หนัก ๆ เลยยังไม่เห็นความแตกต่างหลังจากใช้ nginx เท่าไหร่. process บน top ส่วนใหญ่เป็น httpd ตัว nginx ยังไม่มาก
เพิ่มเติมครับ
- ผมยังไม่ค่อยเข้าใจกับวัตถุประสงค์ของคำสั่ง crontab ตรง
crontab -e
* * * * * /usr/local/directadmin/scripts/nginx_task.sh
วานช่วยอธิบายหน่อยเพราะลองไม่ใส่ก็ทำงานได้ปกตินะครับ
-
ใช้ xcache ก็ใช้งานได้ปกตินะครับ. รวมถึง suhosin patch & suhosin extension ก็ใช้ร่วมได้ไม่มีปัญหาใด ๆ
-
ใครใช้ csf ก่อนสั่ง fw port ควร stop csf ก่อนนะครับ. ผมพังเพราะเรื่องนี้มา 4 รอบ. ทุกครั้งต้อง hard reboot หมด. พอสั่ง fw port แล้วค่อย start ขึ้นมาใหม่. และอย่าลืมเพิ่ม port 85 ใน tcp_in และ tcp_out ด้วยนะครับ.
ขอบคุณครับ
เออ พบปัญหาอย่างหนึ่งครับคือไม่สามารถเข้าหน้า server-status ของ apache ได้ (ขึ้น Forbidden). ดูได้แต่ nginx-status
ต้องแก่หรือเพิ่มค่าใน config ยังไงครับ
เอ่ ลองเปลี่ยน path server-status ใน httpd conf ดูครับ
ผมไม่มีปัญหานะ
ลองดูใหม่ครับ ผมก็เข้าได้บ้าง ไม่ได้บ้าง
nginx
50x Internal Server Error
สำหรับใช้ nginx กับ php / fastcgi นะครับ
และ
proxy_read_timeout 120;
proxy_connect_timeout 120;
เอาแปะไว้ครับ ^^
ขออนุญาติเอามาแปะไว้ครับ
ข้อความ เบิ้ล…
ไม่ให้มันเก็บข้อมูล access.log ทำยังไงครับ ผมลบบรรทัด access_log /var/log/nginx/access.log main; ออกจาก nginx.conf และ restart nginx แล้วมันก็ยังเก็บอยู่
#access_log /var/log/nginx/access.log main;
ใส่ # ไว้ข้างหน้าแล้วครับ restart nginx 1 รอบแล้วมาดูไฟล์ reffresh ดูเรื่อย ๆ มันก็ยังเก็บอยู่นะครับ.
access_log off;
ขอบคุณครับ สำเร็จแล้ว
ขอบคุณค่ะ กำลังหาวิธีอยู่พอดีเลยค่ะ
สุดยอดครับ แต่ลงไม่เป็น 555+
ขอบคุณมากครับ ว่าแต่ มันเร็วขึ้นเห็นได้ชัดเลยหรอครับ
มีท่านใด เคยเจออาการ โหลดรูป ต่อเพ็จเยอะๆ หลายรูปต่อหน้า
แล้ว connection wait บางรูปโหลดนานไหมครับ
ปรับ keepalive_timeout 0;
หรือ 5-10
Thx@icez
มีท่านใดพอจะเคยเจออาการ iptables forward port nginx
ชอบหาย หรือ ยกเลิกเอง กลับมา port 80 ที่ apache บ้างไหมครับ
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 85
ตอนผมสั่ง ก็ลองสั่ง iptables save แล้ว
และเขียนลงไฟล์ rule ก็แล้ว
ลองสั่ง service restart ก็แล้ว
พอใช้ไปได้ระยะ ก็กลับมาที่ port 80 เหมือนเดิม
เหมือน rule ยกเลิกไปเอง
มีท่านใดเคยเจอบ้างไหมครับ
ขอบคุณครับ