2015/08/15

server responded no further authentication methods available حل


make sure you have proper SSH keys installed in your local computer for staring the SFTP connection to the server. If not, try adding the key or enable SSH password authentication via the section Home >> Security Center >> SSH Password Authorization Tweak in the WHM.


2015/04/15

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

مبدئياً ماهو ال Nginx ومميزاته ؟
ال Nginx يعمل كويب سيرفر خفيف جدا - بروكسى للمواقع الكبيرة والتى تعمل ب 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

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


1- نفعل SELinux
انظر
تفعيل وضبط SELinux والإستفادة من حمايتها
افتراضيا SELinux لاتحمى nginx وهو ويب سيرفر ولكن هايتم عمل دا من خلال عمل كومبايل

رمز 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


احفظ واقفل الملف

إختيارية (تطبق على أى سيرفر ): هذه خطوات أخرى لتحسين الشبكة للسيرفرات التى تتعامل بنقل ملفات كبيرة وتحتاج الى زيادة ال 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


الخطوة القادمة غير ضرورية للسيرفرات اللى ليس عليها ضغط .. لأن الافتراضى بيكون128k ودا غالبا بيكون كافى لويب سيرفر و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


دا طبعا لإلغاء ظهور نسخة السيرفر المستخدمة فى صفحات الخطأ المعروفة .

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;


لكن اذا سيرفرك به مواقع كتير مثل المنتديات والمدونات خليها 4k او 8 لأن اذا الحجم كان اكبر من القيمة هايعطيله صفحة خطأ Request Entity Too Large" (413) ده برده للعلم .

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

ايضا تعديل قيم الفصل او اغلاقه للاتصال .. وده بيحسن فى الاداء بشكل عام وبيقطع الاتصال الزائد عن الحد بيه وبيحافظ على سرعة مناسبة جدا

رمز Code:

  client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;


الخطوة السابقة التعديل على القيم فيها حسب ماتناسب احتياجات سيرفرك ( أهل مكة أدرى بشعابها )

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


بعض النقاط ايضا .. دائما يكون الويب سيرفر بيوزر بمفرده مش للرووت .. الصلاحيات ايضا لايمكن ان تدع هذا المسار بتصريحات write او اذا كان فى يوزر له بيكون المسار باسمه على سبيل المثال nginx

رمز Code:

find /nginx -user nginx



رمز Code:

find /usr/local/nginx/html -user nginx



رمز Code:

ls -l /usr/local/nginx/html/


بتدى الصلاحية بشكل عادى جدا

حذف الباك اب للملفات التى انشأت من 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 للحماية ايضا وتقليل الصلاحيات بشكل كبير من الممكن ارفقه لمن يريد .

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

تحياتى

حماية وتأمين tmp ب nodev, nosuid وجعل /tmp كملف نظام

السلام عليكم ورحمة الله وبركاته

درس حماية جديد وانا شخصياً شايفه مهم جدا .. وهو تأمين مسار tmp بالاختيارات nodev, nosuid,noexec
مسارات التخزين المؤقتة مثل /tmpاو /var/tmp او /dev/shm دول اللى بيوفروا مساحة لملفات الاختراق اللى بتوفر للمخترق المنفذ اللى يمر منه للسيرفر .

*حماية خاصة ل /tmp وجعله كملف نظام يخلى انه من الصعب جدا اختراقه

رمز PHP:

mkdir -p /root/images/
dd if=/dev/zero of=/root/images/tmpfile.bin bs=1 count=0 seek=4G


ثم

رمز PHP:

mkfs.ext4 /root/images/tmpfile.bin



رمز PHP:

mount -o loop,rw,nodev,nosuid,noexec /root/images/tmpfile.bin /tmp
chmod 1777 /tmp


الخطوة اللى فاتت .. عملنا ملف جديد اصبح ملف نظام واضفنا له الاختيارات الثلاثة
ننفذ التالى

رمز PHP:

mount -o rw,noexec,nosuid,nodev,bind /tmp /var/tmp


 

رمز PHP:

vi /etc/fstab


هانعدل على ال /tmp كالتالى

رمز PHP:

/root/images/tmpfile.bin   /tmp   ext4    rw,noexec,nosuid,nodev,bind    0 0


نضيف ايضا

رمز PHP:

/tmp /var/tmp none rw,noexec,nosuid,nodev,bind 0 0


نبحث عن السطر الخاص ب/tmp

رمز PHP:

UUID=0aef28b9-3d11-4ab4-a0d4-d53d7b4d3aa4 /tmp                    ext4    defaults        1 2


نضيف فى الاختيارات الخاصة اللى قولنا عليها يكون كالتالى

رمز PHP:

UUID=0aef28b9-3d11-4ab4-a0d4-d53d7b4d3aa4 /tmp                    ext4    defaults,nodev,nosuid,noexec        1 2


نضيفهم ايضا ل /dev/shm
نبحث عن

رمز PHP:

tmpfs                   /dev/shm                tmpfs   defaults        0 0


نغير انها تكون

رمز PHP:

tmpfs                   /dev/shm                tmpfs   defaults,nodev,nosuid,noexec        0 0


ايضا نحمى التمب ونضيف السطر التالى

رمز PHP:

/tmp /var/tmp none rw,noexec,nosuid,nodev,bind 0 0


نحفظ ونقفل الملف
دلوقتى نفعل الاختيارات من غير مانعمل ريبوت للسيرفر نفذ التالى :

رمز PHP:

mount -o rw,noexec,nosuid,nodev,bind /tmp/ /var/tmp/
mount -o remount,noexec,nosuid,nodev /tmp
mount -o remount,noexec,nosuid,nodev /dev/shm


ونأكد اللى عملناه بالتالى

رمز PHP:

mount
mount | less
mount | egrep --color -w '^(tmpfs|/tmp)|/tmp'


بعض النقاط :
nodev - عدم ترجمة الرموز اوحجب الادوات الخاصة بملف النظام
noexec - عدم السماح بتنفيذ اى مر مباشرة بملف النظام المنشأ
nosuid - الغاء فاعلية محدد المستخدم او المجموعة

لكم تحياتى

كيفية الترقية من MySQL الى استخدام MariaDB بدون مشاكل

السلام عليكم ورحمة الله وبركاته

قد أعلنت العملاقة ريدهات بأنه من بداية الاصدار RHEL7 سوف يتم استخدام MariaDB بدلا من MySQL في وجود صدمة ل Oracle اللى كانت بتعتمد كتير جدا بالاتفاق مع ريدهات على استخدامها ل MySQL .

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

أيضا لابد ان يكون تم التحديث لنسخة ال MySQL
MariaDB تعمل بنفس الاصدار الى 5.5 .. بمعنى عندك نسخة الداتابيز 5.2 يبقى تنزلها MariaDB 5.2

انا هافترض ان الكل محدث الى 5.5 .

*- ناخد باك اب من كل قواعد البيانات الموجودة عندنا .. وهانحفظها فى نفس المسار اللى موجودين فيه

رمز PHP:

mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql


هايطلب الباسورد بعدها ندخله ونكمل

رمز PHP:

service mysqld stop
chkconfig mysqld off


الامر هايعمل نسخة من ملف /etc/my.cnf باسم /etc/my.cnf.rpmsave

رمز PHP:

yum remove mysql* mysql-server mysql-devel mysql-libs



رمز PHP:

rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm



رمز PHP:

yum --enablerepo=remi-test --disablerepo=remi install compat-mysql55


نجهز متطلبات MariaDB حتى يتم التركيب بدون مشاكل او أخطاء

رمز PHP:

vi /etc/yum.repos.d/mariadb.repo


نضع داخله

رمز PHP:

# MariaDB 5.5 CentOS repository list
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


نحفظ ونقفل الملف .. ثم تحديث النظام

رمز PHP:

yum update


ثم نبدا تركيب MariaDB

رمز PHP:

yum install MariaDB-devel MariaDB-client MariaDB-server -y


ننفذ التالى لتشغيل الخدمة مرة اخرى

رمز PHP:

service mysql start
chkconfig mysql on


هانعمل باسورت لرووت MySQL

رمز PHP:

/usr/bin/mysql_secure_installation


هاتمشى مع الخطوات .. بتغيير الباسورد وحذف داتا بيز test واليوزر anonymous ايضا.. والغاء دخول الرووت من خارج السيرفر ( اختيارى) لحد فى النهاية هانوصل للرسالة

رمز Code:

All done!  If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!


نسترجع اعداداتنا تانى

رمز PHP:

cp /etc/my.cnf.rpmsave /etc/my.cnf


هانعمل overwrite

نسترجع القواعد تانى

رمز PHP:

mysql -u root -p < backupdatabase.sql


ثم

رمز PHP:

service mysql restart


كده نبقى رقينا واستفدنا بخدمة لسيرفر داتابيز كويس .. ندخل نشيك على القواعد

رمز PHP:

mysql -u root -p



رمز PHP:

MariaDB [(none)]> show databases;



رمز PHP:

MariaDB [(none)]> status;



رمز PHP:

MariaDB [(none)]> use dbname;


تحياتى للجميع

تفعيل وضبط SELinux والإستفادة من حمايتها


السلام عليكم ورحمة الله وبركاته

SELinux هى اداة حماية لكيرنل بتحجم المدى المسموح لدخول الملفات من البرامج وتحديد أى فعل مناسب

SELinux لها ثلاث حالات :

- SELINUX=enforcing ( تطبيق قوانين SELinux مباشرة بدون تحذير او انظار )
- SELINUX=permissive (تطبيق قوانين SELinux ولكن تظهر تحذير بذلك )
- SELINUX=disabled ( الغاء تفعيل SELinux بالكامل )

قبل كل شىء .. خد باك اب من اى تعديل هاتعمله فى أى شىء


1- تركيب ملحقات ال SELinux

رمز Code:

yum install policycoreutils setroubleshoot


2- تشغيل SELinux فى وضع permissive

رمز Code:

vi /etc/selinux/config


نحدث البيانات كالتالى

رمز Code:

SELINUX=permissive
SELINUXTYPE=targeted


احفظ الملف واقفله ونعمل ريبوت للسيرفر

3- نتأكد ان SELinux لم تتعارض مع شىء ولم توقف شىء

رمز Code:

grep "SELinux is preventing" /var/log/messages


المفروض مايطلع معك أى أخطاء ومن الأفضل ان يتم عمل Relabel للملفات بالنظام ككل

الأوامر التالية لعمل relabel
- لاسترجاع اوامر الحماية الافتراضية ل /home

رمز Code:

restorecon -Rv -n /home


نفذ ايضا

رمز Code:

 touch /.autorelabel
reboot


4- تفعيل وضع enforcing

رمز Code:

vi /etc/selinux/config


التعديل لتكون

رمز Code:

SELINUX=enforcing


* نتأكد من عدم الغاء تفعيل SELinux من ال Grub loader

رمز Code:

egrep -i 'selinux=0|enforcing=0' /boot/grub/grub.conf


اذا وجدت السطور التالية تحذفها وتحفظ الملف وتعمل ريبوت

رمز Code:

selinux=0 or enforcing=0


للتأكد من التفعيل

رمز Code:

sestatus


مثال على النتيجة

رمز Code:

SELinux status:                 enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted


كيف أعرف قائمة بالبورتات المفتوحة ؟

رمز Code:

semanage port -l
semanage port -l | less
##لو عاوز تشوف بورت معين وليكن 80###
semanage port -l | grep -w 80


كيفية فتح بورت 8181

رمز Code:

semanage port -a -t http_port_t -p tcp 8181


كيف أعرف الخدمات الغير محمية ؟؟

رمز Code:

ps -eZ | egrep "initrc" | egrep -vw "ps|tr|egrep|awk|bash" | tr ':' ' ' | awk '{ print $NF }'


SELinux اداة معقدة لكنها مهمة .. ممكن تاخد وقت فى تصليح الأخطاء لكن بالتعامل الجيد ممتازة

بعض الأدوات للتعرف على المشاكل

رمز Code:

ps -Z -p 
ls -Z fn اسم الملف
ausearch
restorecon
semodule
audit2allow
Log files: /var/log/audit/audit.log and /var/log/setroubleshoot/setroubleshootd.log



التحويل من CentOS الى CloudLinuX مع السى بانل


السلام عليكم ورحمة الله وبركاته

CloudLinux سيستم ممتاز بيمتاز بالأمان والاداء العالى .. الغالبية يستخدمه لأغراض حماية عالية
CloudLinux سيستم مدفوع على عكس CentOS يجب الحصول على ترخيص لتشغيله بشكل دائم على السيرفر .. له دعم هائل من ريدهات .. تحديثات مستمرة
له العديد من الامكانيات .. LVE - CageFS -ApacheModule
يدعم ايضا ال Xen - KVM - VMWare

بعد الحصول على الترخيص للاى بى من السى بانل

رمز PHP:

/usr/local/cpanel/cpkeyclt



رمز PHP:

/usr/local/cpanel/bin/cloudlinux_system_install -k


نعمل ريبووت للسيرفر

رمز PHP:

reboot


ثم كومبايل للاباتشى من جديد

رمز PHP:

 /usr/local/cpanel/scripts/easyapache --build


كده انتهينا

لو بترخيص مباشر من كﻻود لينكس
https://cln.cloudlinux.com/clweb/buy.html

رمز PHP:

wget http://repo.cloudlinux.com/cloudlinux/sources/cln/cpanel2cl



رمز PHP:

sh cpanel2cl -k <key>


استبدل <key> برقم ترخيصك

رمز PHP:

reboot



رمز PHP:

/scripts/easyapache --build