int s0/1 has the same acl in and out.
Also, you should consider adding a log entry at the end of each acl:
access-list 101 deny udp any any eq 137
access-list 101 deny udp any any eq 138
access-list 101 deny udp any any eq 139
access-list 101 deny udp any any eq 389
access-list 101 deny tcp any any eq 389
access-list 101 permit tcp any any eq 80
access-list 101 permit tcp any any eq 25
access-list 101 permit tcp any any eq 110
access-list 101 permit tcp any any eq 143
access-list 101 permit tcp any any eq 443
access-list 101 permit ip any any
access-list 101 deny ip any any log
access-list 102 deny udp any any eq 137
access-list 102 deny udp any any eq 138
access-list 102 deny udp any any eq 139
access-list 102 permit ip any any
access-list 102 deny ip any any log
This way you will be able to see any traffic that is being blocked. It is also handy to do a show access-list x every now and again - the router will show you stats on how many times each acl entry has been matched - this will give you an idea of which entries are redundant.
Consider using CBAC (Context Based Access Control) if you router supports it. Try ip inspect ? in the global configuration mode - if it recognises it the CBAC is supported (requires firewall feature set). CBAC will modify your acls as traffic passes through the router.
If your router does not support CBAC, the you could add:
access-list 102 permit tcp any any established
to allow packets with the established flag on. This is dangerous as it can potentially allow hackers through by spoofing an established packet.
In general, my philosophy is to deny everything except traffic that is absolutely necessary. Typically, an inbound acl for a server might look like:
access-list 101 permit tcp any x.x.x.x eq 80
access-list 101 permit tcp any x.x.x.x eq 443
access-list 101 permit tcp any x.x.x.x eq 25
access-list 101 permit tcp any x.x.x.x range 20 21
access-list 101 permit udp any x.x.x.x eq 53
access-list 101 permit ip any any log
This allows http, https, smtp, ftp and dns to your server (respectively), everything else is denied and logged.
I personally never use any as the destination in an acl - it is risky and you should know what the IP addresses are anyway...
You could start with:
access-list 102 deny ip any any log
for your outbound and watch what gets blocked and modify your acl accordingly.
Also consider using a syslog server inside your network (like
and add the following commands:
logging x.x.x.x
logging trap info
where x.x.x.x is the IP address of your syslog server. This way you can see all of the attacks on your router long term.
HTH,
Michael.