المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : خطوات حماية NGINX هامة وزيادة الأمان (كويب سيرفر SERVER) وتحسين الشبكة



romaissa
11-02-2013, بتوقيت غرينيتش 02:20 AM
السلام عليكم ورحمة الله وبركاته

مبدئياً ماهو ال Nginx ومميزاته ؟
ال Nginx يعمل كويب سيرفر SERVER خفيف جدا - بروكسى للمواقع الكبيرة والتى تعمل ب Apache - بروكسى لل E-Mail ايضا .. يعمل على كل الأنظمة ( Unix-Linux-Mac OS X- Microsoft Windows -Solaris) ,, يستخدم بالمواقع الكبرى مثل Wordpress - sourceforge ...

زى اى برنامج له اعدادات وملفات اساسية

مسار الإعدادات
رمز Code:
/usr/local/nginx/conf/
ملف الكونفج الخاص به
رمز Code:
/usr/local/nginx/conf/nginx.conf
مسار اللوج
رمز Code:
/usr/local/nginx/logs/
يستخدم ال Nginx HTTP بورت 80
يستخدم ال Nginx HTTPs بورت 443

الخطوات التالية لزيادة الأمان والحماية وتقليل نسبة الخطورة على الويب سيرفر SERVER:


1- نفعل SELinux
انظر
تفعيل وضبط SELinux والإستفادة من حمايتها (http://www.dzbatna.com/t2310702/)
افتراضيا SELinux لاتحمى nginx وهو ويب سيرفر SERVER ولكن هايتم عمل دا من خلال عمل كومبايل
رمز Code:
yum -y install selinux-policy-targeted selinux-policy-devel
رمز Code:
cd /opt wget 'http://garr.dl.sourceforge.net/project/selinuxnginx/se-ngix_1_0_10.tar.gz'
نفك الضغط
رمز Code:
tar -zxvf se-ngix_1_0_10.tar.gz
رمز Code:
cd se-ngix_1_0_10/nginx make
رمز Code:
/usr/sbin/semodule -i nginx.pp
- نقفل السيستم
رمز Code:
getsebool -a | less getsebool -a | grep off getsebool -a | grep o
هانشوف الاعداد اللى يكون on نخليه off ده طبعا لإختيارك أيضاً


2- تقوية الشبكة وتحديد الصلاحيات بقدر الإمكان من خلال ملف sysctl.conf
رمز Code:
vi /etc/sysctl.conf
ضبط الإعدادات كالتالى :
رمز Code:
# Avoid a smurf attack net.ipv4.icmp_echo_ignore_broadcasts = 1 # Turn on protection for bad icmp error messages net.ipv4.icmp_ignore_bogus_error_responses = 1 # Turn on syncookies for SYN flood attack protection net.ipv4.tcp_syncookies = 1 # Turn on and log spoofed, source routed, and redirect packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # No source routed packets here net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Turn on reverse path filtering net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Make sure no one can alter the routing tables net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # Don't act as a router net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # Turn on execshild kernel.exec-shield = 1 kernel.randomize_va_space = 1 # Tuen IPv6 net.ipv6.conf.default.router_solicitations = 0 net.ipv6.conf.default.accept_ra_rtr_pref = 0 net.ipv6.conf.default.accept_ra_pinfo = 0 net.ipv6.conf.default.accept_ra_defrtr = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.dad_transmits = 0 net.ipv6.conf.default.max_addresses = 1 # Optimization for port usefor LBs # Increase system file descriptor limit fs.file-max = 65535 # Allow for more PIDs (to reduce rollover problems); may break some programs 32768 kernel.pid_max = 65536 # Increase system IP port limits net.ipv4.ip_local_port_range = 2000 65000 # Increase TCP max buffer size setable using setsockopt() net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 87380 8388608 # Increase Linux auto tuning TCP buffer limits # min, default, and max number of bytes to use # set max to at least 4MB, or higher if you use very high BDP paths # Tcp Windows etc net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_window_scaling = 1
احفظ واقفل الملف

إختيارية (تطبق على أى سيرفر SERVER ): هذه خطوات أخرى لتحسين الشبكة للسيرفر SERVERات التى تتعامل بنقل ملفات كبيرة وتحتاج الى زيادة ال Buffer لأن الذاكرة دائما ( TCP) تحسب تلقائى من ذاكرة النظام ككل وغالباً بتكون قليلة .




ازاى نعرف القيم المحددة للارسال والاستقبال وتغيير هذه الاعدادات لتوفير سرعة افضل للشبكة ككل .. كالتالى :

معرفة حجم الذاكرة المخصصة ككل
رمز Code:
cat /proc/sys/net/ipv4/tcp_mem
معرفة اقصى كمية من الممكن أن تستقبل (ذاكرة)
رمز Code:
cat /proc/sys/net/core/rmem_default cat /proc/sys/net/core/rmem_max
معرفة أقصى كمية من الممكن ان ترسل
رمز Code:
cat /proc/sys/net/core/wmem_default cat /proc/sys/net/core/wmem_max
الخطوة القادمة غير ضرورية للسيرفر SERVERات اللى ليس عليها ضغط .. لأن الافتراضى بيكون128k ودا غالبا بيكون كافى لويب سيرفر SERVER وphp وخلاص ومفيش ضغط .. التعديل دا هايزيد استهلاك الذاكرة لذا اكتفى بالخطوة السابقة باعدادات ملف sysctl.conf كما هى .

رمز Code:
echo 'net.core.wmem_max=12582912' >> /etc/sysctl.conf echo 'net.core.rmem_max=12582912' >> /etc/sysctl.conf
ايضا هانحتاج لزيادة الحجم الأدنى والبداية والأقصى بالبايت
رمز Code:
echo 'net.ipv4.tcp_rmem= 10240 87380 12582912' >> /etc/sysctl.conf echo 'net.ipv4.tcp_wmem= 10240 87380 12582912' >> /etc/sysctl.conf
ايضا يمكن تفعيل window scaling وده بيكون اختيار لتوسيع نافذة النقل
رمز Code:
echo 'net.ipv4.tcp_window_scaling = 1' >> /etc/sysctl.conf
تفعيل ايضا التالى
رمز Code:
echo 'net.ipv4.tcp_sack = 1' >> /etc/sysctl.conf
لا نستفيد ايضا بان TCP يعمل كاش لاتصالات مقفولة للفترات .. لان الكاش فى الحالات دى له اتجاهين والغرض من الكاش معروف ان لما الاتصال يتم مرة اخرى يستخدم اللى موجود بالفعل من اول مرة اتصل وتم عمل الكاش له ودا المفروض فى المجمل بيسرع الاداء .. ولكن فى معظم الأوقات بيسبب ضعف فى اداء الشبكة بشكل كبير ... لذلك انا اوقفه
رمز Code:
echo 'net.ipv4.tcp_no_metrics_save = 1' >> /etc/sysctl.conf
الآن اعادة تحميل الاعدادات
رمز Code:
sysctl -p
اذا حبيت تشوف التعديلات
رمز Code:
tcpdump -ni eth0
3- نرجع لل NGINX ونلغى الموديولات الغير مطلوبة
رمز Code:
./configure --without-http_autoindex_module --without-http_ssi_module make make install
اذا تحب تلغى اكثر ضيف مع اول سطر
نفذا التالى وشوف ايه الموديولات اللى تحب تفعيلها او تعطيلها ونفذ
رمز Code:
./configure --help | less
تقدر تعمل كومبيل الان له لكن قبل ذلك اضف ذلك فى nginx.conf
رمز Code:
server_tokens off
دا طبعا لإلغاء ظهور نسخة السيرفر SERVER المستخدمة فى صفحات الخطأ المعروفة .

4- التحكم فى الهجمات الفلوو المتكرر
رمز Code:
vi /usr/local/nginx/conf/nginx.conf
عدل الخيارات التالية كما تريد او كما تراها
رمز Code:
client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;
لكن اذا سيرفر SERVERك به مواقع كتير مثل المنتديات والمدونات خليها 4k او 8 لأن اذا الحجم كان اكبر من القيمة هايعطيله صفحة خطأ Request Entity Too Large" (413) ده برده للعلم .

الاختيار الرابع بيساعد فى المكافحة ضد العناكب السيئة وال DoS

ايضا تعديل قيم الفصل او اغلاقه للاتصال .. وده بيحسن فى الاداء بشكل عام وبيقطع الاتصال الزائد عن الحد بيه وبيحافظ على سرعة مناسبة جدا
رمز Code:
client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10;
الخطوة السابقة التعديل على القيم فيها حسب ماتناسب احتياجات سيرفر SERVERك ( أهل مكة أدرى بشعابها )

5- تحديد وغلق الاتصالات من اى بى واحد لبورت 80 لفترة اذا تكرر 15 مرة فى فترة بلغت 60 ثانية
رمز Code:
/sbin/iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set /sbin/iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 15 -j DROP service iptables save
* دائما راجع ملفات اللوج وتظل متابع دائما
رمز Code:
grep "/login.php??" /usr/local/nginx/logs/access_log grep "...etc/passwd" /usr/local/nginx/logs/access_log egrep -i "denied|error|warn" /usr/local/nginx/logs/error_log
بعض النقاط ايضا .. دائما يكون الويب سيرفر SERVER بيوزر بمفرده مش للرووت .. الصلاحيات ايضا لايمكن ان تدع هذا المسار بتصريحات write او اذا كان فى يوزر له بيكون المسار باسمه على سبيل المثال nginx
رمز Code:
find /nginx -user nginx
رمز Code:
find /usr/local/nginx/html -user nginx
رمز Code:
ls -l /usr/local/nginx/html/
بتدى الصلاحية بشكل عادى جدا

حذف الباك اب buckup للملفات التى انشأت من vi او اى محرر اخر
رمز Code:
# find /nginx -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*' # find /usr/local/nginx/html/ -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*'
اذا اردتم ايضا شل سكربت به بعض اوامر iptables للحماية ايضا وتقليل الصلاحيات بشكل كبير من الممكن ارفقه لمن يريد .

بالنهاية اتمنى الإفادة القصوى لاخوتى .. اغلب هذه الاعدادات تتطلب مستوى جيد من الخبرة وكلها مستقاة من عدة مواقع ومواضيع لدى رايت مشاركتها افضل .

تحياتى IA.




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى