How does your Contact Internal OWD look like
By default the internal Organization Wide Defaults for the Contact object is set to Controlled by Parent. This means that the visibility of Contact records is driven by the visibility of their associated Account. With this setup Salesforce will only allow you to create sharing rules on the Account object, and a user with Read Only or Read/Write access to an Account record will be also able to access all associated Contacts with the exact same permissions at the record level.
There could be some scenarios where you would want to drive the Contact visibility not through an Account, but just a simple Sharing Rule on the Contact itself.
Switch the Contact Internal OWD to Private
First, let’s switch to Private the internal OWD of Contact, so as its visibility is not controlled any more by the associated Account.
Once done and the sharing recalculated, you will be able to create Sharing Rules on the Contact object.
But wait, this is something you should know now…
By default, it’s not mandatory to associate an Account to a Contact
And if you don’t enforce this link, there is a very particular behaviour the following that will probably busy yourself for some hours if you are not aware of it. This consideration is described on the following Salesforce article.
A contact not linked to an account will always remain Private, regardless of your sharing model.
All your sharing rules as well as your workflow rules will not apply to Private contacts.
If you face this situation, the alternative you have is to associate these standalone Contacts to generic Accounts. Before doing this, you should carefully have in mind additional considerations depending on the volume and distribution of your Contacts through generic Accounts called data skew. Have a look here to better understand the concept and design correctly your solution.