2017-03-16 3 views
-1

제 리눅스 서버에서 IPtables를 사용하여 24 시간 동안 특정 포트에 액세스하는 IP를 금지하고 싶습니다. 이를 위해, 나는 다음의 iptables 규칙을 사용 로그에서iptables가 x 시간 동안 IP를 차단하지 못합니까?

# Check if IP is on banlist, if yes then drop 
-A INPUT -m state --state NEW -j bancheck 
-A bancheck -m recent --name blacklist --rcheck --reap --seconds 86400  -j LOG --log-prefix "IPT blacklist_ban: " 
-A bancheck -m recent --name blacklist --rcheck --reap --seconds 86400  -j DROP 

# PUT IPs on banlist 
-A banlist -m recent --set --name blacklist -j LOG --log-prefix "IPT add_IP_to_blacklist: " 
-A banlist -j DROP 

# Ban access to these ports 
-A INPUT -p tcp -m multiport --dports 23,25,445,1433,2323,3389,4899,5900 -j LOG --log-prefix "IPT syn_naughty_ports: " 
-A INPUT -p tcp -m multiport --dports 23,25,445,1433,2323,3389,4899,5900 -j banlist 

을, 나는이 작동하는지 확인할 수 있습니다

Mar 13 02:12:23 kernel: [39534099.648488] IPT syn_naughty_ports: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=29768 DF PROTO=TCP SPT=65315 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 02:12:23 kernel: [39534099.648519] IPT add_IP_to_blacklist: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=...4 LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=29768 DF PROTO=TCP SPT=65315 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 02:12:26 kernel: [39534102.664136] IPT blacklist_ban: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=4724 DF PROTO=TCP SPT=65315 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 

그러나 로그도 보여 그냥 2시간 나중에 같은 IP가 다시 내 시스템에 액세스합니다. 체인 "bancheck"을 통해 처음부터 오른쪽으로 차단되는 대신 IP는 포트에 액세스 할 수 있으며, 결과적으로 "banlist"에 다시 입력됩니다 (두 경우 모두 대상 포트가 동일한 포트 25 임). 내가 바로의 iptables 규칙을 이해하면

Mar 13 04:35:59 kernel: [39542718.875859] IPT syn_naughty_ports: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=4533 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 04:35:59 kernel: [39542718.875890] IPT add_IP_to_blacklist: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=4533 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 04:36:02 kernel: [39542721.880524] IPT blacklist_ban: IN=eth0 OUT= MAC=... DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=12505 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 04:36:08 kernel: [39542727.882973] IPT blacklist_ban: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=48 TOS=0x00 PREC=0x00 TTL=113 ID=29092 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 

는하지만, 그것은는 24 시간 이내에입니다만큼, 처음 몇 줄에서 차단, 아래로 얻을 수 없을해야한다는 지금까지의 iptables 규칙 세트 다시 포트 규칙을 위반하는 것으로 판명되고 다시 "금지 목록"을 작성합니다.

내가 잘못했거나 규칙이 작동하는 방식을 잘못 이해합니까?

+0

규칙이 실제로 작동하는지 테스트 해 보았습니까? 원격 서버 또는 위치에서 서버에 액세스하려고 시도하는 것처럼 자신을 차단 해보십시오. 블록이 활성화되어있는 동안 계속해서 서버에 액세스 할 수 있습니다. –

+0

예, 작동했는데, 차단되었으며 내 IP가 위에 표시된 것처럼 로그에 표시됩니다. – anz21

답변

0

내 서버에서 ssh를 예를 들어 작업

iptables -X black 
iptables -N black 
iptables -A black -m recent --set --name blacklist -j DROP 

iptables -X ssh 
iptables -N ssh 
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP 
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh 

iptables에

당신의 설정과 비교해 -N과의 iptables 체인을 생성하고 주목할만한 차이가 있는지 확인하는 것을 잊지 마십시오.

더 우아한 해결책은 iptables에 결합 ipset 사용하는 것입니다 : 세트를 작성하고 항목을 추가 할 때 모든 세트 유형이 선택 제한 시간 매개 변수를 지원

타임 아웃. create 명령의 timeout 매개 변수 값은 새 항목의 기본 시간 초과 값 (초)을 의미합니다. 타임 아웃을 지원하는 세트가 작성되면 동일한 timeout 옵션을 사용하여 항목을 추가 할 때 기본값이 아닌 시간 초과 값을 지정할 수 있습니다. 0 제한 시간 값은 항목이 영구적으로 세트에 추가되었음을 의미합니다. 이미 추가 된 요소의 시간 초과 값은 -exist 옵션을 사용하여 요소를 읽음으로써 변경 될 수 있습니다. 예 :

ipset create test hash:ip timeout 300 
ipset add test 192.168.0.1 timeout 60 
ipset -exist add test 192.168.0.1 timeout 600 
+0

감사합니다. – anz21

+0

귀하의 게시물에 IP가 "검은 색"사슬로 전송 된 장소와 방법이 표시되지 않습니다. 포트 SSH에 액세스하고자하는 IP가 체인 "ssh"에 보내지는 것을 이해하고 있습니까? 어디에서 금지됩니까? 금지에 대한 더 이상의 기준은 분명하지 않습니까? 따라서 포트 SSH에 액세스하려는 IP는 24 시간 동안 금지됩니까? – anz21

관련 문제