iptables not blocking access via ports?

I’m running Debian 8.11 with iptables v1.4.21 and ipset v6.23, protocol version: 6.

I’m trying to block access to certain ports for all but a small set of hosts, but it doesn’t seem to be working.

First of all, I put a small list of IP addresses into an ipset list called allowed-hosts. Then, after running sudo /sbin/iptables -F and sudo /sbin/iptables -X, I issue the following commands:

sudo /sbin/iptables -I INPUT -p tcp -m multiport --destination-port 110,143,993,995 -j DROP
sudo /sbin/iptables -I INPUT -p tcp -m multiport --destination-port 110,143,993,995 -m set --match-set allowed-hosts src -j ACCEPT

However, even after doing this, clients from IP addresses that are not present allowed-hosts are still successfully connecting to all of the named ports.

There are no other iptables rules in effect.

Here are the results of sudo /sbin/iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             multiport dports pop3,imap2,imaps,pop3s match-set allowed-hosts src
DROP       tcp  --  anywhere             anywhere             multiport dports pop3,imap2,imaps,pop3s

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

And here are the results of sudo /sbin/iptables-save

# Generated by iptables-save v1.4.21 on Wed Jun  8 11:53:09 2022
*security
:INPUT ACCEPT [16777464:2727427757]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun  8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun  8 11:53:09 2022
*raw
:PREROUTING ACCEPT [21444955:3000669583]
:OUTPUT ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun  8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun  8 11:53:09 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Jun  8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun  8 11:53:09 2022
*mangle
:PREROUTING ACCEPT [21444955:3000669583]
:INPUT ACCEPT [21444952:3000669415]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18889599:33356814491]
:POSTROUTING ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun  8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun  8 11:53:09 2022
*filter
:INPUT ACCEPT [2130649:527089827]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4465281:1887206637]
-A INPUT -p tcp -m multiport --dports 110,143,993,995 -m set --match-set allowed-hosts src -j ACCEPT
-A INPUT -p tcp -m multiport --dports 110,143,993,995 -j DROP
COMMIT
# Completed on Wed Jun  8 11:53:09 2022

What might I be doing incorrectly?

Thank you in advance.

**UPDATE**

First of all, "src" indeed is being specified, contrary to what was suggested in the comment below. It appears in the "… src -j ACCEPT" line, above.

Secondly, the syntax of these iptables commands that I am using comes from what is shown both in the iptables docs and in discussions that were found via web searches.

Thirdly, look above at the iptables -L output. This clearly shows that connections to the ports should be accepted from source=anywhere to destination=anywhere for the IP addresses in the allowed-hosts list. This also clearly shows that connections to the ports should be dropped from source=anywhere to destination=anywhere for the IP addresses that are not in the allowed-hosts list.

At least that’s what iptables seems to be telling me. However, connections to these ports from IP addresses that are not in the allowed-hosts list are still being accepted on my machine.

Also, if I do ipset test allowed-hosts aaa.bbb.ccc.ddd, where "aaa.bbb.ccc.ddd" represents an IP address which is not in allowed-hosts, I properly get this following output:

aaa.bbb.ccc.ddd is NOT in set allowed-hosts.

And if I do ipset test allowed-hosts www.xxx.yyy.zzz, where "www.xxx.yyy.zzz" represents an IP address which is in allowed-hosts, I properly get this following output:

www.xxx.yyy.zzz is in set allowed-hosts.

Looking at the output from iptables-save, above, what else in my configuration could be causing these connections to ports not in allowed-hosts to be accepted?

Thank you again, in advance.

Asked By: HippoMan

||

It turns out that this is working, after all. I am very, very sorry for the false alarm.

I incorrectly thought that it wasn’t working properly for the following reason …

I am using both postfix and dovecot, and I have set up postfix to use dovecot to perform its authentication services.

I have set up dovecot to write its debug and logging messages to a file called /var/log/mailclient.log, while postfix is configured to log via syslog.

I wasn’t thinking clearly, and forgot about the fact that postfix‘s authentication attempts would also cause entries to appear in this same dovecot log file, given that dovecot is the one that is performing this postfix authentication.

I am only using my iptables rules to block pop3 and imap (ports 110, 143, 993, and 995), and I am not blocking postfix‘s ports.

Given this way in which I set up postfix authentication, there are entries in that /var/log/mailclient.log file for all of the postfix login attempts, as well as for the dovecot login attempts. I was not paying attention well when reading those entries in this log file, and I mistakenly thought that they were login attempts for pop3 and imap, instead of smtp login attempts. Therefore, I mistook these smtp login attempts (which I am not blocking) for pop3 and imap login attempts.

Once I understood my error, I more carefully examined and analyzed my dovecot log file, and I now realize that indeed, none of the pop3 nor imap connections are coming to dovecot, except for those which originate from the small subset of hosts which I have put into my "allowed-hosts" ipset list.

Therefore, the iptables entries that I have listed above are indeed working properly, after all.

Once again, I apologize for my false alarm, and I’m just glad that this is working.

Perhaps this question and discussion could help someone else in the future who might make the same mistake as I made.

Answered By: HippoMan
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.