Linux server got hacked? To do’s for beginners.

Linux hack

Just got email from server provided complaining about spamming from your server? CPU usages is higher than expected? Some process toke all your memory? Or OS acting weird?

Example snippets are relevant to Debian/Ubuntu, try look for command for different linux distribution.

Change password for both root and your user. Follow stackoverflow.

Check what changed in /etc and /var in last 2 days:

find /etc -mtime -2
find /var -mtime -2

If you haven’t changed it, somebody did. Decide what to do with that changes.

Install ClamAV:

sudo apt-get install clamav
sudo freshclam
sudo apt install clamav-daemon

Search for infected files:

sudo clamscan --max-filesize=3999M --max-scansize=3999M --exclude-dir=/sys/* -i -r /

Checks for signs of a rootkit:

Install chkrootkit:

sudo apt-get install chkrootkit

Run chkrootkit:

sudo chkrootkit

You might get some false positive, don’t panic. Google.

Security vulnerabilities comes with negligence, update your OS:

sudo apt-get update && time sudo apt-get dist-upgrade

Some great links that I found:
StackExchange – How do you know your server has been compromised?

Cheers!

Manage JDKs in MacOS

java

Install JDK 9 in MacOS using Homebrew:

brew update
brew cask install java

All Java version get installed here: /Library/Java/JavaVirtualMachines lets take a look.
ls -la /Library/Java/JavaVirtualMachinesList installed JDKs in your OSX:

 $ /usr/libexec/java_home -V

You should get result like this:

Matching Java Virtual Machines (5):
 9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
 1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
 1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
 1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
 1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home

Install jenv:
brew install jenv

Set JDK by following jenv commands: http://www.jenv.be/

 

Note: Tested on macOS Sierra.

Debug HTTP calls from code using Wireshark

Wireshark Filter

Http calls from code are pretty common now a days. Sometime it is very difficult to understand when calls are failing, lot of things could go wrong. Some one them are –

  1. Server firewall might be blocking the call.
  2. My firewall could be the issue.
  3. Maybe server not accepting the call because I’m not sending right param or header.

However, one of my favourite tool to debug this kind of situation Wireshark. Install it from here. You can check this video to learn it or see tutorial online.

Once you have installed and running the application, you can separate network calls that you are making from your code using filter.

Use following filter –

ip.dst == 10.200.96.106 && http

ip.dst is the ip of destination server and http is refers to calls from browser.

Happy debugging 🙂

Attach debugger in IntelliJ with Spring Boot application

intellij idea

If you run your java application inside the IntelliJ, you can do it with the green debug button. But, if you are running the application from command line, like me, it’s the way to go –

Step 1: Run your application with debug jvm arguments.

$ mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

Step 2: Configure IntelliJ.

  • Select menu Run -> Edit Configurations
  • Create new Remote Configuration. Default configuration works with 5005 port. Change if you see fit.
  • Connect application by running (green bug icon!) Remote Configuration created on last step.

Step 3: Happy debugging 🙂

স্ক্রীন(screen) কমান্ড

আমার নিজের জন্য স্ক্রীন চিটশীট

স্ক্রীন কি?
লিনাক্স টার্মিনালের একটা প্রগ্রাম চালু করে টার্মিনাল থেকে বের হয়ে গেলেও প্রোগ্রাম বন্ধ হবে না, এমন একটা টুলস।

কি কাজে লাগে?
সার্ভারে কাজ করার সময়, অনেক সময় বিভিন্ন জিনিষ সাময়িক সময়ের জন্য চালু করে রেখে দিতে চাই।

ইন্সটলেশন

sudo apt-get update
sudo apt-get install screen

ভার্সন দেখা

Ctrl-a v

হেল্প দেখা

Ctrl-a ?

স্ক্রীনে নতুন উইন্ডো তৈরি করা

Ctrl-a c

উইন্ডো পরিবর্তন করা

Ctrl-a n

// এখানে n = 0 থেকে শুরু …

আগের উইন্ডোতে ফিরে আসা

Ctrl-a p

কতগুলা উইন্ডো আছে তা দেখা

Ctrl-a w

স্ক্রীন থেকে বের হয়ে আসা ( প্রোগ্রাম চালু থাকবে) বা ডিটাচ

Ctrl-a d

সেশনে থাকা অবস্থায় পুনরায় স্ক্রীনে ফেরত যাওয়া বা রিএটাচ

screen –r

আবার স্ক্রীনে যাওয়া
১। লিস্ট দেখা

screen –ls

২। নাম্বার দিয়ে রিএটাচ

screen –r 1835

বিস্তারিত
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-screen-on-an-ubuntu-cloud-server

Redis ডাটা স্টাকচার

Redis ডাটা স্টাকচার

রেডিসে ৫ ধরনের ডাটাস্টাকচার আছে। এই পাচঁ ধরনের ডাটা স্ট্রাকচার ঠিক মত বুঝতে পারলেই রেডিস বুঝা শেষ। 🙂

  1. স্ট্রিং (String)
  2. হ্যাশ (Hash)
  3. লিস্ট (List)
  4. সেট (Set)
  5. অর্ডার সেট (Order Set)

1. স্ট্রিং (String)

এটা সবথেকে সহজ ডাটা স্ট্রাকচার। এখানে ডাটার নাম(key) ও ডাটা মিলে এই ডাটাস্ট্রাকচার তৈরি। সেট (SET) দিয়ে ডাটা রেডিসে জমা রাখে এবং গেট(GET) দিয়ে ডাটা রেডিস থেকে বের করে।

ডাটা জমা রাখতে
set <redis-key> <value>

যেমনঃ

SET country:name "Bangladesh"

এখানে, country:name হল key এবং”Bangladesh” হল ভ্যালু বা আসল ডাটা।

ডাটা পেতে চাইলে
get <redis-key>

যেমনঃ

GETcountry:name

2. হ্যাশ(Hashes) 

এখানে স্ট্রিং এর মতই একটা কী থাকে এবং তার বিপরীতে অনেকগুলো হ্যাশ কী-ভ্যালু রাখা যায়।  ডাটা জমা রাখতে
hmset, হ্যাশ ডাটা পাওয়ার জন্য hget এবং সমস্ত ডাটা পাওয়ার জন্য hgetall ব্যাবহার করা হয়ে থাকে।

 ডাটা জমা রাখতে চাইলেঃ
hmset <redis-ky> <hash key-value> <hash key-value> <hash key-value>

যেমনঃ

HMSET user.info first_name Maruf last_name Hassan profession sw

এখানে user.info হল রেডিস কী,  first_name হল হ্যাশ কী এবংMaruf হল তার ভ্যালু। একই ভাবে last_name আরেকটা কী তার ভ্যালু হচ্ছে Hassan।

ডাটা পেতে চাইলেঃ

hget <redis-key> <hash-key>

যেমনঃ

hget user.info first_name


সমস্ত ডাটা দেখতে চাইলেঃ

hgetall <redis-key>

যেমনঃ

hgetall user.info

এই পর্ব এখানেই শেষ। পরবর্তী পর্বের লিঙ্ক এখানে পাওয়া যাবে :)

Redis – পর্ব ১

Redis কি?

redis-logoRedis হল  একটা ডাটা স্টোরেজ ইঞ্জিন। যেখানে ডাটার একটা নাম দেয়া থাকে। ডাটার নামকে বলে key এবং ডাটাকে বলা হয় value। কি-ভ্যালু ছাড়াও রেডিসে বেশ কয়েক ভাবে ডাটা রাখা যায়। তাই রেডিসকে অনেকে ডাটা স্টাকচার ইঞ্জিনও বলে থাকে।

কেন রেডিস

যদি আপনি উচ্চ ক্ষমতা সম্পন্ন এবং খুব বেশি লোড নিতে সক্ষম এমন একটা ওয়েব এপ্লিকেশন বানাতে চান তাহলে আপনার জন্য রেডিস।

  • রেডিস সব কিছু মেমরীতে নিয়ে কাজ করে
  • আমাদের প্রয়োজনীয় প্রায় সব ধরনের ডাটা স্ট্রাকচার সাপোর্ট করে
  • রেডিসকে অনেকগুলি স্লেভ সার্ভারে সেটাপ দেয়া যায়। মাস্টার-স্লেভ ক্লাস্টারিং করে।

Redis এর সুবিধা?

  • মারাত্মক দ্রুত। রেডিস প্রতি সেকেন্ড ১লক্ষ ১০ হাজার টি সেট( SET) এবং ৮১ হাজার গেট (GET) করতে পারে।
  • সব কাজ করে কম্পিটারের মেমরি(RAM) থেকে। হার্ড ডিস্ক ব্যাবহার করে শুধু ডাটা জমা রাখার কাজে।
  • প্রায় সব কাজই (atomic) এক স্থান থেকে একই সময়ে করা হয়। যার ফলে অনেকে এক সাথে কাজ করলেও সরার পরিবর্তন সবাই সাথে সাথেই পেয়ে যায়
  • রেডিসকে নানা ভাবে ব্যাবহার করা যায়। ক্যাশ হিসাবে, মেসেজিং কিউ আকারে, আবার স্বল্প সময়ের জন্য ডাটা জমা রাখার কাজে।

উবুন্টুতে রেডিস ইন্সটলেশন

$sudo apt-get update
$sudo apt-get install redis-server

তারপর নিচের কমান্ড লিখে রেডিস কনসোলে চলে যান
$redis-cli

যদি সব কিছু ঠিকঠাক থাকে তাহলে নিচের মন দেখাবে
redis 127.0.0.1:6379> 

আর আপনি ping লিখলে সে আপনাকে PONG উত্তর দিবে।

এই পর্ব এখানেই শেষ।


 

পরবর্তী পর্ব