All of the sites you listed use SSL to protect their users’ security.
The only way you can really do what you want is to require your users to configure their browser with the Mikrotik as a web proxy. (not a transparent proxy, but explicitly configure it).
Then you can set access rules in the http proxy settings and block outbound http from the proxy users with a filter rule.
Instead of a src-address you can replace it with src-address-list.
I don’t think it works when there is embedded content on sites.
I think the best thing to do is to set an untangle box. Its what I would do. Users won’t get suspicious if they don’t see you fiddling on their computers.
The problem with using content=xxxxxx to block websites is that the sites hemanguib wants to block all use SSL. The content match cannot see inside the encrypted session to catch that text. Of course if the user just types “facebook.com” into their browser, it will block this request, but if the user types https://facebook.com then they’re going to be successfully liking kitten videos shortly thereafter. If their browser’s homepage is set to https://facebook.com or they’re using a bookmark, the chances are pretty good that they’ve bookmarked the ssl version.
Of course, you could specify port 80 on the content=xxxxxxx rule if you only want it to block the web.
(HIGHLY recommended - because inspecting up to layer 7 on all connections is really going to tax the router)
Of course you would either need to redirect http to the proxy via dstnat chain in firewall
/ip firewall nat
add chain=dstnat protocol=tcp dst-port=80 action=redirect
… or else simply block http(s) connections in the firewall filters, and force the clients to have a proxy setting in their browser. This way is the only way to filter SSL-enabled websites.