블로그 이미지
훅크선장

카테고리

분류 전체보기 (360)
사진이야기 (23)
펭귄컴퓨팅 (120)
컴퓨터보안 (83)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

공지사항

태그목록

최근에 올라온 글

OpenWRT 18.06 버전에서 원격 관리 목적으로 SSH 포트를 하나 열어놓았더니, 온 세상에서 계속 로그인 시도를 합니다.

물론 당연히 패스워드 인증은 안하도록 설정되어 있지만, 그래도 너무 많은 시도가 있기에 그러한 무차별 대입 공격(Brute Force)를 어느정도 걸러내기 위하여, iptables 룰을 이용해보기도 하였습니다.

 

인터넷 검색을 통하면, 몇 개의 예제가 나오는데, iptables 버전이 업데이트 되면서, 몇 몇 키워드가 바뀌었습니다. 

특히 -m state, --state NEW 나 -m recent 옵션에서 에러가 나옵니다.

 

일단 -m recent 옵션을 쓰고 싶으면, kmod-ipt-conntrack-extra 와 iptables-mod-conntrack-extra 패키지가 설치되어 있어야 합니다.

다음, -m state 옵션은 -m conntrack 옵션으로 변경되었으며, --state 옵션은 --ctstate 옵션으로 이름이 변경되었습니다.

 

다음과 같은 방식으로 설정파일에 추가하면 됩니다.

※ 주의할 점은 외부에 포트를 열어주는 rule이 먼저 존재하고, 그 다음에 conntrack를 사용하는 rule 두 개를 추가해야 한다는 것입니다.

※ rule 중에서 연결을 ACCEPT 하는 유사한 설정이 두 개가 있다고 해서, 합쳐서 사용할 수 없습니다. 하나는 input 룰이고, 다른 하나는 forward 룰이기 때문인 것 같습니다. 둘이 합치게 되면, 그냥  forward 룰만 남기 때문에, input 룰이 없어서 아예 접속이 안됩니다.

 

config rule
        option target 'ACCEPT'
        option src 'wan'
        option dest_port '22'
        option name 'Allow-SSH'
        option proto 'tcp'

config rule
        option target 'ACCEPT'
        option src 'wan'
        option dest '*'
        option dest_port '22'
        option name 'SSH_CheckAccept'
        option proto 'tcp'
        option family 'ipv4'
        option extra '-m conntrack --ctstate NEW -m recent --set --name SSH --rsource'

config rule
        option src 'wan'
        option name 'SSH_CheckDrop'
        option family 'ipv4'
        option proto 'tcp'
        option dest '*'
        option dest_port '22'
        option target 'DROP'
        option extra '-m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 3 --name SSH --rttl --rsource'

 

위의 세 개 룰을 그대로 쓰셔도 됩니다. 만약  ssh 데몬 포트번호가 22번이 아니면, 그 포트번호만 고치면 바로 사용할 수 있습니다.

--name SSH 에서 SSH 라는 것은 룰셋의 이름으로 원하는 대로 바꿔서 쓰면 됩니다.

-seconds 60 --hitcount 3 부분이 중요한데, 이것은 60초 즉 1분 동안에 3번이상의 잘못된 로그인 시도가 이루어지면, 그 IP에서는 더이상 네트워크로 접근하지 못하도록 한다는 것입니다. 시간과 횟수를 잘 고려해서 설정하면 됩니다.

※ 요즘 SSH Brute Force의 양상을 보면, IP주소도 자주 바꾸고 로그인 시도도 꽤 긴 시간동안에 다시 하는 것 같아서, 설정시에 잘 고려해야 합니다. 제가 본 양상으로는 5분(300초)동안에 2번 이상의 잘못된 로그인 시도가 있으면, 바로 막는 것이 맞는 것 같았습니다.

 

참조 : https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/

 

Block SSH Brute Force Attacks with IPTables

Block ssh brute force attacks using some simple IPTables rules. This will rate-limit incoming SSH attacks and mitigate the brute force attack.

www.rackaid.com

Posted by 훅크선장
, |