Explanation as suggested by @Ignasi
When you use the options below=of somenode et similia provided by the positioning library, e.g. when you create a node by
\node[below left=of A.south east] (B) {some text};
you are basically positioning a specific anchor (implicitly north east, through the explicit option below left=of) of the node you are creating (B), with respect to a specific anchor (explicitly south east) of an already existing node (A).
NOTE If no anchor is specified for the existing node then the anchor "opposite" to the one chosen for the new node is chosen (e.g. below left=of A] specifies the north east anchor for B, so south west is chosen for A; it has the same effect of below left=of A.south west).
Obviously the distance between the nodes' anchors you use in relative positioning can be set through node distance. In the following figure (with the code to generate it attached) I graphically explain the preceding words. Setting node distance=0 (and removing all gray nodes) produces your attempt on the left and the desired result on the right.

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\tikzset{server rack/.style={
draw,
minimum height=7.5mm,
minimum width=10.7mm}}
\tikzset{network rack/.style={
draw,
minimum height=7.5mm,
minimum width=12mm}}
\begin{document}
\begin{tikzpicture}[node distance=2cm]
\node[server rack] (A) at (.5,4) {A};
\node[network rack] (B) [below=of A] {B};
\node[network rack] (C) [below=of B] {C};
\draw[|<->|, gray] (A.south) -- (B.north) node[at start, anchor=north west, inner ysep=0] {\tiny \verb|A.south|}
node[midway, anchor=west, inner ysep=0] {\tiny \verb|(B) [below=of A]|'s effect}
node[midway, above, rotate=180, inner ysep=2pt, sloped] {\tiny \verb|node distance|}
node[at end, anchor=south west, inner ysep=0] {\tiny \verb|B.north|};
\draw[|<->|, gray] (B.south) -- (C.north) node[at start, anchor=north west, inner ysep=0] {\tiny \verb|B.south|}
node[midway, anchor=west, inner ysep=0] {\tiny \verb|(C) [below=of B]|'s effect}
node[midway, above, rotate=180, inner ysep=2pt, sloped] {\tiny \verb|node distance|}
node[at end, anchor=south west, inner ysep=0] {\tiny \verb|C.north|};
\node[server rack] (A) at (5,4) {A};
\node[network rack] (B) [below left=of A.south east] {B};
\node[network rack] (C) [below=of B] {C};
\draw[|<->|, gray] (A.south east) -- (B.north east) node[at start, anchor=north west, inner ysep=0] {\tiny \verb|A.south|}
node[midway, anchor=west, inner ysep=0] {\tiny \verb|(B) [below left=of A.south east]|'s effect}
node[midway, above, inner ysep=2pt, sloped] {\tiny \verb|node distance|}
node[at end, anchor=south west, inner ysep=0] {\tiny \verb|B.north|};
\draw[|<->|, gray] (B.south) -- (C.north) node[at start, anchor=north west, inner ysep=0] {\tiny \verb|B.south|}
node[midway, anchor=west, inner ysep=0] {\tiny \verb|(C) [below=of B]|'s effect}
node[midway, above, rotate=180, inner ysep=2pt, sloped] {\tiny \verb|node distance|}
node[at end, anchor=south west, inner ysep=0] {\tiny \verb|C.north|};
\end{tikzpicture}
\end{document}
Actual answer

This is the solution you're looking for, I think.
- No change is needed to the first block, since... it's the first one! :D
- Since the third block is equal in size to the second one, no change is needed either.
- The second block: it should be positioned on the left of the right (i.e. west) side of the first block.
The code becomes
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{server rack/.style={
draw,
anchor=north west,
minimum height=7.5mm,
minimum width=10.7mm}}
\tikzset{network rack/.style={
draw,
anchor=north west,
minimum height=7.5mm,
minimum width=12mm}}
\begin{document}
\begin{tikzpicture}[node distance=0mm]
\draw[step=6mm,gray,very thin] (0,0) grid (4.2,4.2);
\node[server rack] (C17) at (1.33,3) {C17};
\node[network rack] (D17) [below left=of C17.south east] {D17}; % <-- modified line
\node[network rack] (E17) [below=of D17] {E17};
%\draw[thick,red] (2.4,3) -- (2.4,0);
\end{tikzpicture}
\end{document}