Можно грубо с помощью iptables.
eth0 -- внешний интерфейс(интернет)
eth1 -- внутренний интерфейс(локальная сеть)
Замените на свои интерфейсы.
Блокируем форвардинг по умолчанию
iptables -P FORWARD DROP
Разрешаем новые соединения из сети на порты почты и веба
iptables -A FORWARD -i eth1 -o eth0 -p tcp -m state --state NEW,ESTABLISHED -m multiport --dports 25,80,110,143,443 -j ACCEPT
Разрешаем на возврат пакетов уже установленных соединений
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
Блокируем ненужные сайты.
iptables -A FORWARD -i eth1 -o eth0 -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
iptables -A FORWARD -i eth1 -o eth0 -m string --string "odnoklasniki.ru" --algo kmp --to 65535 -j DROP
На счет блокировки сайтов лучше прокси, бо это грубый и неправильный метод.