First I would advise against your filtering approach, which is the "Frequency Sampling" method of filtering (if you are using multiplying your FFT by a target response directly) which has poor performance and efficiency. (The frequency sampling approach will provide your exact solution at your FFT bin centers only, and then a lot more ripple in between vs the algorithms I suggest below.) However if you need to be in the frequency domain anyway, and are multiplying by the FFT of your desired filter coefficients, this would be ok as long as you are properly dealing with the circular convolution involved.
Also I would use a real filter unless you are intentionally trying to get an asymmetric spectrum response (meaning positive and negative spectrums are differrent, which implies a complex signal-- given that is what you are trying to avoid then there is no reason to use a complex filter).
To implement a real filter, with a real signal and a real output, consider using either the Parks-McClellan or Least Squares algorithms, with design tools readily available in Matlab, Octave and Python, and then implement your filter as an FIR filter in the time domain.
If you need to implement filtering in the frequency domain, you can force it to be a real filter by ensuring that the filter is conjugate symmetric; for an FFT the 0 bin is the center (DC value), and then the samples from 1 to N/2-1 should be conjugate symmetric to the samples from N/2 to N-1; where sample 1 is the conjugate of sample N-1, sample 2 is conjugate of sample N-2 etc...
conv
orfilter
commands. $\endgroup$