ufw의 LIMIT 기능을 사용하여 의도하지 않은 결과를 지적하는 것이 좋습니다.
첫 번째 ufw 규칙으로 포트 22 / tcp에 블랭킷 제한을 설정했다고 가정합니다.
To Action From
-- ------ ----
[ 1] 22/tcp LIMIT IN Anywhere
...
ufw 규칙을 따르고 마지막으로 "deny (들어오는)"의 기본 정책에 따라 제한 아래에서 작동하는 모든 연결을 필터링 할 수 있다고 가정합니다.
적어도 ufw 0.35의 경우 그 가정은 틀릴 것입니다. 실제로 LIMIT IN 로직은 한계 기준에 의해 거부되지 않은 입력을 즉시 받아들입니다.
의사 코드에서 LIMIT 논리는
if CONDITION then DENY else ACCEPT
다른 ufw 규칙에는 논리가있는 것처럼 보입니다.
if CONDITION then (DENY|ACCEPT) else continue to next rule
.
나는 개인적으로 ufw LIMIT의 예기치 않은 동작이라는 것을 알았습니다. 시스템 로그 파일에서 다른 ufw 규칙에 의해 필터링되어 발생해서는 안되는 많은 포트 22 로그인 시도를 예기치 않게 발견하여 발견했습니다.
행동 확인의 세부 사항
ufw가 삽입 한 관련 iptables 코드 행은 다음과 같습니다.
-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
위 목록은
iptables -S | grep ufw-user-limit
처음 두 줄은 연속되어 ufw-user-input
있습니다.
iptables -S | grep ufw-user-input