Your problem here has nothing to do with the ports you are using. You did follow all of the correct steps involved with setting up your ports on your router/modem and your firewall.
Your problem is that you gave your friend your local IP, not your public IP.
You see, your device (in this case your computer) is connected to your router, which sets up a local connection. When multiple devices are connected to the router this is called a LAN, or Local Area Network. Each device connected to the network will have a unique IP, for example:
Device 1 will be: 192.168.1.1
Device 2 will be: 192.168.1.2
Device 3 will be: 192.168.1.3
And so on and so forth.
But this does not allow your friend to connect to your computer. Unless they are on the same network as you, their machine will have no way of finding yours. What you are looking for is your public IP.
It is very easy to find, simply go to google.com and search 'what is my ip' like so:
After your ports are all set up, have your friend connect to the IP show by google (mine is asterisked out). This should solve your problem.
EDIT:
Having been told that this is not the problem, I have an edit.
This problem is not caused by issues with ports or your router/modem. This problem is caused by what is called FEEDBACK, or network feedback.
Network feedback happens when a signal coming from inside a routers system is directed out of thw router, and then right back into it. Since the server is local to your computer, you ought ti be able to use your local IP adress. However, your friend wont be able ro connect with your public IP adress, due to network feedback.
I have actually had this problem before, so this ought to be an easy fix. If your friend is on the same network as yourself, you should just use the LAN function on your minecraft. If not, there is no reason connecting to your public ip from another loc action shouldn't work. Ill try and find some references asap, but I hope this solves your problem.
Best Answer
It sounds like you don't have port forwarding set up properly on your router. Merely opening ports through your firewall isn't enough, you're router has to know where to send data coming through a particular port, thus port forwarding. The difference between opening a port in your firewall and port forwarding is this:
Opening port in firewall:
What this does is allow your computer to accept connections through which ever port you open. This would equate to opening a particular door or window to you house so that someone could get in.
Port Forwarding:
Port Forwarding is where you tell your router to route all the data coming in through a certain port to a particular IP on your local network (usually looks something like 192.168.1.xxx) This would equate more to giving someone the instructions to find your house as opposed to opening a door or window for them.
Both are necessary, the data has to know where you computer is on your network and have the door opened so that it can be received by your computer.
A Website you may find helpful is THIS.
That website has instructions on how to port forward for a wide range of diferent router makes and models.
Hope this helps you out!