Maybe a by hand solution can be:
\documentclass{article}
\usepackage{framed}
\usepackage{amsmath}
\begin{document}
\reversemarginpar{\mbox{}\smash{\rule[-1.75cm]{2pt}{0.75cm}}}%
\begin{align*}
a ={}& b \\
c ={}& d \\
e ={}& f \\
g ={}& h
\end{align*}
\end{document}
Or you can use TikZ:
\documentclass{article}
\usepackage{framed}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{tikzpagenodes}
\begin{document}
\begin{align*}
a ={}& b \\
\tikz[remember picture]\node(x-1){}; c ={}& d \\
\tikz[remember picture]\node(x-2){}; e ={}& f \\
g ={}& h
\end{align*}
\tikz[overlay,remember picture]\draw[very thick,red](current page text area.west|-x-1.north)--(current page text area.west|-x-2.south);
\end{document}
EDIT
You can play with the following code. It provides the environment alignrule
with one mandatory argument. The arguments set the line with a left bar. (comma separated)
The example:
\documentclass{article}
\usepackage{xcolor}
\usepackage{alignrule}
\usepackage{amsmath}
\begin{document}
\begin{alignrule}{2,4}
%\fboxrule=0.2cm
\begin{align*}
a ={}& b \\
c ={}& d \\
e ={}& f \\
g ={}& h
\end{align*}
\end{alignrule}
\end{document}

The code:
\NeedsTeXFormat{LaTeX2e}[1997/12/01]
\ProvidesPackage{alignrule}
[2011/06/27 v1.7a multicolumn formatting (FMi)]
\newbox\AR@savetwo
\newbox\AR@saveone
\newif\if@looptest
\newif\if@@par
\newcount\splitlinenumbers@count
\def\split@cmd{%
\@tempdimb\ht\AR@savetwo % height of original box
\advance\@tempdimb\dp\AR@savetwo
\setbox\AR@saveone\vsplit\AR@savetwo to\z@ % split it
\setbox\AR@saveone\vbox{\unvbox\AR@saveone}% recover height & depth of \AR@saveone
\setbox\@tempboxa\vbox{\copy\AR@saveone\copy\AR@savetwo}%
\advance\@tempdimb-\ht\@tempboxa
\advance\@tempdimb-\dp\@tempboxa}%
% \@tempdima: height of the first line (\AR@saveone)
\def\@addfsepht{%
\setbox\AR@saveone\vbox{\box\AR@saveone}}
\def\addskipht{%
\setbox\AR@saveone\vbox{\vskip\@tempdimb\box\AR@saveone}}
% \@tempdima: depth of the first line (\AR@saveone) + fboxsep
\def\@addfsepdp{%
\@tempdima\dp\AR@saveone
\dp\AR@saveone\@tempdima}
% \@tempdima: depth of the first line (\AR@saveone) + vertical skip
\def\@addskipdp{%
\@tempdima\dp\AR@saveone
\advance\@tempdima\@tempdimb
\dp\AR@saveone\@tempdima}
\def\split@cmd{%
\@tempdimb\ht\AR@savetwo % height of original box
\advance\@tempdimb\dp\AR@savetwo
\setbox\AR@saveone\vsplit\AR@savetwo to\z@ % split it
\setbox\AR@saveone\vbox{\unvbox\AR@saveone}% recover height & depth of \AR@saveone
\setbox\@tempboxa\vbox{\copy\AR@saveone\copy\AR@savetwo}% naive concatenation
\advance\@tempdimb-\ht\@tempboxa
\advance\@tempdimb-\dp\@tempboxa%
}% gap between two boxes
\def\printline@outrule{%
\hbox to \linewidth{%
\hskip-\fboxrule%
{\vrule \@width\fboxrule\relax}%
\box\AR@saveone%
}%
}
\def\printline@out{%
\hbox to \linewidth{%
\box\AR@saveone%
}%
}
%
\def\endalignrule{\egroup
\ifhmode\par\fi
{\noindent%
\splitlinenumbers@count\@ne%setze \splitlinenumbers@count=1
\@looptesttrue%Schleife lauft, solange @looptesttrue gilt
\baselineskip\z@%
\lineskiplimit\z@
\lineskip\z@%
\vfuzz\maxdimen% Grenzwert, ab dem die Ueberfuellung einer \vbox protokolliert wird.
\split@cmd%
\@addfsepht%
\@addskipdp%
\ifvoid\AR@savetwo % Only one line
\def\print@line{\@addfsepdp%
\vbox{%
\hrule\@height\fboxrule%
\printline@out%
\hrule\@height\fboxrule%
}%
}%
\else % More than one line
\def\print@line{%
\begingroup\edef\x{\endgroup%
\noexpand\in@{,\the\splitlinenumbers@count,}{,\AR@savelines,}}%
\x%
\ifin@
\vbox{\printline@outrule}\hfil%fstln=first line
\else
\vbox{\printline@out}\hfil%fstln=first line
\fi
\advance\splitlinenumbers@count\@ne
\loop
\split@cmd\@addskipdp\leavevmode
\ifvoid\AR@savetwo % The last line
\@looptestfalse\@addfsepdp
\begingroup\edef\x{\endgroup%
\noexpand\in@{,\the\splitlinenumbers@count,}{,\AR@savelines,}}%
\x%
\ifin@
\vtop{\printline@outrule}%
\else
\vtop{\printline@out}%
\fi
\else % 2,...,(n-1)
\begingroup\edef\x{\endgroup%
\noexpand\in@{,\the\splitlinenumbers@count,}{,\AR@savelines,}}%
\x%
\ifin@
\printline@outrule%
\else
\printline@out%
\fi
\fi
\hfil\advance\splitlinenumbers@count\@ne%
\if@looptest\repeat}%
\fi
\leavevmode\print@line\par%
}%
\endgroup\relax%
}
\def\alignrule#1{\par\relax
\addvspace{\abovedisplayskip}
\begingroup
\abovedisplayskip=\z@
\abovedisplayskip=\z@
\abovedisplayshortskip=\z@
\belowdisplayskip=\z@
\belowdisplayshortskip=\z@
\allowdisplaybreaks
\edef\AR@savelines{#1}
\setbox\AR@savetwo\vbox\bgroup
\advance\linewidth -2\fboxrule
\advance\linewidth -2\fboxsep
\hsize\linewidth\@parboxrestore
\parindent2cm\relax}
\endinput
%% Copyright (C) 2012 by Marco Daniel
%% ------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.