How I Control My Dell PowerEdge R710's Fans Remotely with an API

Search for a command to run...

No comments yet. Be the first to comment.
How to bypass SSL pinning with an android emulator for pentesting

Learn about my experience with the Advanced Evasion Techniques and Breaching Defenses Course & the OSEP exam!

Zero Trust Network Access

Introduction Having spent a considerable amount of time immersed in web-related attacks in the AWAE labs over the last 4 months, I began to feel a sense of detachment from the realm of Active Directory (AD) exploitation and pivoting. Now that I was d...

Introduction Greetings, fellow cyber peoplez! Just wanted to give you guys some insight into my journey towards earning the Offensive Security Wireless Professional (OSWP) certification. In this blog post, I will take you through some of my experienc...


Remotely monitoring my server's temperature and controlling the fan speed accordingly has been one of the more frustrating things I had to do. But that ends today! (Kind of...) Here's how I solved that issue with Python Flask and ipmitool.
[
GitHub - ItsNee/Dell-PowerEdge-R710-Fan-Controller-API: A Simple API made with Python Flask to help manage fam speeds on the Dell PowerEdge R710 Enterprise Server
A Simple API made with Python Flask to help manage fam speeds on the Dell PowerEdge R710 Enterprise Server - GitHub - ItsNee/Dell-PowerEdge-R710-Fan-Controller-API: A Simple API made with Python Fl...
GitHubItsNee

](https://github.com/ItsNee/Dell-PowerEdge-R710-Fan-Controller-API.git)

With the help of IPMI (Intelligent Platform Management Interface) over LAN, we would be able to query power supply usage, fan speed, server health, security details, and the state of operating systems. However, I'd be using this to query the server's temperature and change the fan speed.
One small hurdle is that we have to have a machine in the same network as the server (unless you want to expose your IPMI to the WWW). This bump can be overcome with the help of a custom made API exposed out to the internet through a reverse proxy. However its highly recommended that you obscure your API endpoint to prevent malicious actors from playing around with it. This can cause some serious damage to the hardware.
[
GitHub - ItsNee/Dell-PowerEdge-R710-Fan-Controller-API: A Simple API made with Python Flask to help manage fam speeds on the Dell PowerEdge R710 Enterprise Server
A Simple API made with Python Flask to help manage fam speeds on the Dell PowerEdge R710 Enterprise Server - GitHub - ItsNee/Dell-PowerEdge-R710-Fan-Controller-API: A Simple API made with Python Fl...
GitHubItsNee

](https://github.com/ItsNee/Dell-PowerEdge-R710-Fan-Controller-API.git)
Here's the simple Python Flask API Server that I wrote. It performs 2 simple but crucial tasks.
The Flask application entirely depends on the system having the ipmitool utility. Let's go ahead and install that first
apt-get install ipmitool -y

apt-get install python3 python3-pip -y

git clone https://github.com/ItsNee/Dell-PowerEdge-R710-Fan-Controller-API.git

pip3 install -r requirements.txt

python3 api-server.py

Here's how to background the API Server.
nohup python3 api-server.py&

Here's how to kill a background process:
Find the ProcessID
ps -faux | grep api-server

Kill Process
kill -9 1085872
https://api.myserver.com/ = [Returns a welcome string]
https://api.myserver.com/get-temperature = [Returns the server's temperature]
https://api.myserver.com/set-fan-speed/ = [ variable can be adjusted by end user]


IFTTT is a free application that I make use of in order to send web requests with a tap of a widget on my phone's home screen.

Creating an applet is as easy as picking "this" and "that". In my case, I went with "If button push, send web request"



And with that, I'm able to remotely change my server's Fan Speed with a push of a button from my phone's home screen!