나는 달리고 Debian 8.11
있고 iptables v1.4.21
.ipset v6.23, protocol version: 6
작은 호스트 하위 집합을 제외한 모든 호스트에서 특정 포트에 대한 액세스를 차단하려고 하는데 작동하지 않는 것 같습니다.
먼저 작은 IP 주소 집합을 ipset
이라는 목록 에 넣었습니다 allowed-hosts
. 그런 다음 실행 후 다음 명령을 실행합니다 sudo /sbin/iptables -F
.sudo /sbin/iptables -X
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
그러나 이 작업을 수행한 후에도 존재하지 않는 IP 주소의 클라이언트는 allowed-hosts
지정된 모든 포트에 계속 성공적으로 연결할 수 있습니다.
iptables
다른 유효한 규칙 은 없습니다 .
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
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
내가 무엇을 잘못할 수 있었나요?
미리 감사드립니다.
**고쳐 쓰다**
첫째, 아래 주석의 제안과 달리 "src"가 실제로 지정되었습니다. 위의 "...src -j ACCEPT" 줄에 나타납니다.
둘째, 이 명령에 사용한 구문은 웹 검색을 통해 찾은 iptables
문서 및 토론에 표시된 내용에서 나왔습니다 .iptables
셋째, 위의 출력을 살펴보세요 iptables -L
. 이는 source=anywhere
목록의 IP 주소에 대해 포트 간 연결이 허용되어야 함을 명확하게 나타냅니다. 이는 또한 다음 IP 주소에 대해 포트 연결을 제거해야 함을 명확하게 나타냅니다.destination=anywhere
allowed-hosts
source=anywhere
destination=anywhere
아니요allowed-hosts
목록 에 있습니다 .
적어도 그것은 iptables
나에게 말하는 것 같습니다. 그러나 allowed-hosts
내 컴퓨터는 목록에 없는 IP 주소에서 이러한 포트로의 연결을 계속 허용합니다.
또한 이 작업을 수행하면 ipset test allowed-hosts aaa.bbb.ccc.ddd
"aaa.bbb.ccc.ddd"는 IP 주소를 나타냅니다.아니요에서는 allowed-hosts
다음과 같은 출력이 올바르게 표시됩니다.
aaa.bbb.ccc.ddd is NOT in set allowed-hosts.
이렇게 하면 ipset test allowed-hosts www.xxx.yyy.zzz
"www.xxx.yyy.zzz"는 IP 주소를 나타냅니다.예에서는 allowed-hosts
다음과 같은 출력이 올바르게 표시됩니다.
www.xxx.yyy.zzz is in set allowed-hosts.
위의 출력을 보면 iptables-save
내 구성에 이러한 포트 연결이 허용되지 않을 수 있는 다른 사항이 있습니까 allowed-hosts
?
미리 다시 한번 감사드립니다.
답변1
결국 작동한다는 것이 밝혀졌습니다. 이런 허위 경보로 인해 정말 죄송합니다.
다음과 같은 이유로 작동하지 않는다고 잘못 생각했습니다.
저는 postfix
and 를 사용하고 있으며 이에 대한 인증 서비스를 dovecot
설정했습니다 .postfix
dovecot
dovecot
디버그 및 로그 메시지를 이라는 파일에 기록하도록 설정했으며 /var/log/mailclient.log
을 postfix
통해 로그하도록 구성했습니다 syslog
.
나는 그것을 깊이 생각하지 않았고 인증을 수행하는 파일이기 때문에 postfix
인증 시도로 인해 동일한 로그 파일에 항목이 나타날 것이라는 사실을 잊어 버렸습니다 .dovecot
dovecot
postfix
나는 내 규칙을 사용하여 포트 110, 143, 993 및 995를 iptables
차단 하고 포트를 차단하지 않습니다 .pop3
imap
postfix
인증을 설정한 방식에 따라 postfix
파일에는 /var/log/mailclient.log
모든 postfix
로그인 시도와 dovecot
로그인 시도에 대한 항목이 포함됩니다. 나는 이 로그 파일에서 이러한 항목을 읽을 때 별로 주의를 기울이지 않았으며 로그인 시도가 아닌 및 pop3
에 대한 로그인 시도라고 잘못 생각했습니다 . 그래서 나는 차단하지 않은 이러한 로그인 시도를 로그인 시도로 착각 했습니다 .imap
smtp
smtp
pop3
imap
내 오류를 이해한 후에는 내 로그 파일을 더 자세히 검사하고 분석했으며 이제 실제로 dovecot
내가 넣은 호스트의 작은 하위 집합에서 발생하는 파일 외에는pop3
아무것도 없다는 것을 깨달았습니다. 어떤 연결도 비둘기장에 도달하지 않습니다. imap
"허용된 호스트" ipset
목록.
그래서 iptables
위에 나열한 항목은예결국에는 잘 작동합니다.
잘못된 긍정에 대해 다시 한번 사과드립니다. 이것이 효과가 있어서 다행입니다.
어쩌면 이 질문과 토론이 미래에 나와 같은 실수를 저지를 수도 있는 누군가에게 도움이 될 수 있을 것입니다.