카테고리 글 보관함: 보안

우분투 18.04 fail2ban 설정 iptables ipset 을 사용한 밴

Update 2022/10/18
우분투 서버 22.04에서도 똑같이 적용 가능한 것을 확인.

집에 있는 서버를 사용할 때는 ssh 에 접속하는 22번 포트를 다른 포트 번호로 바꿔서 쓰거나 공유기의 포트포워딩으로 외부 1022번 포트를 내부 22번으로 연결해서 사용하거나 해서 딱히 외부에서 ssh로 무작위 대입 공격 같은건 당하지 않았다.
지금 쓰고 있는 오라클 클라우드 서버에서는 포트포워딩이 되는지도 모르겠고, 방화벽 문제도 있고 해서 ssh 디폴트값인 22번 포트를 사용하고 있는데, 얼마나 많이들 들어오는지… fail2ban을 설치하고 보니 3일 동안 밴한 IP가 천개는 가뿐히 넘었다.
방화벽을 기본 iptables 를 사용하고 있다보니, 밴한 IP 가 전부 iptables 에 저장되어서, iptables 건드리려고 하면 너무 양이 많아서 곤란해졌다.

iptables 가 비대해지면 속도도 느려지고 하니, ipset 을 설치해서 여러 IP를 세트로 묶어서 밴하도록 하자.

먼저 ipset 을 설치

fail2ban 을 설치안했으면 설치하자.

jail.local 파일을 작성 and 편집

jail.local 파일에 아래 내용을 쓴다.

[DEFAULT] 아래는 전체적으로 적용 되는 내용이고 [sshd] 는 ssh 접속에 한해서 적용되는 내용이다.
bantime 은 밴을 할 시간, findtime 은 이 시간 안에 접속 횟수가 초과 되면 밴을 한다.
ignoreip 는 밴을 하지 않을 IP 이다. 가정이라면 IP 가 바뀌기 때문에 소용이 없을테지만, 고정 IP 서버가 있다면 경유해서 접속이 가능하니 적어두면 좋다.
maxretry 는 ssh 공개키를 쓸때는 우리가 틀릴일이 없기 떄문에 0으로 설정해도 되지만, 패스워드를 입력해서 들어갈 경우에는 3이나 5정도로 여유를 두는게 좋다. 본인이 틀려서 밴 먹으면 곤란하겠지?

ipset을 사용해서 iptable로 밴을 하기 위해서 설정하는 것이 banaction 이다.
우분투 18.04 에서 ipset 을 설치하면 ipset -V 명령을 실행하면 표시 되는 프로토콜 버전이 6이기 때문에 iptables-ipset-proto6 을 사용한다. 우분투의 다른 버전이나 다른 리눅스 배포판을 사용하고 있으면 프로토콜 버전을 확인하고 설정하자. (6 이외에는 4 버전이 있다.)
banaction_allports 는 말그대로 모든 포트를 밴해버리는 설정인데, 딱히 다른 곳에서 저걸 사용하도록 설정하지 않는 이상 사용하진 않을 것이다.

jail.local 파일을 저장하고 fail2ban 서비스를 재기동하자.

기존에 iptables 에 밴 되어있는 IP가 있었다면 모두 ipset 에 옮겨서 저장되고, iptables 내용을 확인해 보면.

iptables 에는 아래와 같이 한줄만 들어가있다.

밴 당한 IP 들은 모두 ipset 에 f2b-sshd 라는 세트로 저장되어 있다. 아래 커맨드로 ipset 에 저장된 내용을 전부 확인 가능.

관련글: 우분투 서버 18.04 iptables 서버 재기동으로 초기화 되는 문제

오라클 클라우드 방화벽 설정에 대한 모든 것

오라클 클라우드에서 메인인 오라클 리눅스가 아닌 우분투를 써서 그런가 사사건건 방화벽 때문에 시간을 잡아 먹게 된다.
원인은 iptables 설정에 있는데, 알아먹기도 힘들뿐더러 서버 재기동으로 설정이 되돌아가버리고…
이 문제를 최종적으로 완전히 해결해 버리는 방법이 있다.

스택오버플로우에 있는 오라클 클라우드에서 포트80을 열고 싶어하는 질문에 대한 답변
https://stackoverflow.com/a/54810101

우분투는 기본적으로 ufw 쓰니 iptables 내용을 그냥 다 날리자.라는 내용인데.
ufw 활성화하고 오라클 클라우드 보안 목록에서 이미 다 막고 있으니 iptables 내용은 다 지워도 별 상관없을 것 같다.

현재 iptables 내용을 백업

들어오는 연결에 기본값을 허용으로 설정,
나가는 연결에 기본값을 허용으로 설정,
포워드 연결에 기본값을 허용으로 설정,
체인을 모두 삭제.

이걸 다 하지는 말고, 웹서버나 FTP 서버 같은 경우는 보통 들어오는 연결만 허용하면 되니, 들어오는 연결만 모두 허용하도록 기존 설정을 다 지우면 될듯하다.

만약에 설정을 다 지우더라도 vpn 같은걸 설치한 경우는 포워드 설정에도 관련이 있으니 백업한 파일에서 찾아서 되돌리도록.

OUTPUT 나가는 쪽 설정에는 오라클 관련한게 많이 들어있던데 지울 경우에는 오라클 인스턴스 정보 같은게 제대로 안나올 수도 있으니 안지우는게 좋을듯.

관련글: 오라클 클라우드 프리티어로 이사
우분투 서버 18.04 iptables 서버 재기동으로 초기화 되는 문제

우분투 서버 18.04 iptables 서버 재기동으로 초기화 되는 문제

오라클 클라우드는 우분투 서버 방화벽 서비스로 ufw 가 아니라 iptables 를 사용하고 있다.
아마도 다른 리눅스 배포판에서도 공통으로 쓸 수 있는 iptables 로 간단하게 설정하기 위해서 그런것 같은데, 덕분에 이것저것 문제가 생기네.

업데이트 적용으로 우분투 서버를 재기동하고나니 웹서버 접속이 안되서 왜 그러나 했더니, 열어두었던 http, https 포트가 다시 막혀서 그런 것이었다.

iptables 설정 내용 확인

여기 분명히 설정했었던 내용이 사라져 있어서 검색.
이것저것 거친 후에 결론은 /etc/iptables/rules.v4 파일의 내용으로 iptables 설정이 저장/로드 되니 이 파일에 설정 내용을 저장하라는 것.

현재 iptables 설정 내용을 저장하는 방법. (지워진 내용을 다시 추가한 다음에 실행할 것.)
백업하고 하자.

내 경우에는 sudo 를 썼는데도 퍼미션 디나이드가 떠서 루트로 바꾼 후에 저장했다.

이제 서버 재기동해도 저장된 내용이 잘 살아있는걸 볼 수 있다.

혹시 iptables-save 명령이 없으면 iptables-persistent 를 설치.

기타

openvpn-install.sh 로 openvpn을 설치하면 iptables에 이것저것 내용을 추가하는 서비스가 설치된다.

매번 서버 재기동할 때마다 추가되니 현재 iptables 내용을 rules.v4 파일에 저장했으면 서비스는 끄자.

관련 글: 오라클 클라우드 방화벽 설정에 대한 모든 것

DB서버 외부에서 안전하게 접속하는 방법. DBeaver로 SSH 터널링 접속

2022/10/14 Update. 우분투 22.04 LTS 시대 기준 DBeaver 22.2.2버전에서는 암호화 알고리즘 ed25519을 사용할 때 SSH 터널 설정 화면 아래에 Advanced Setting -> Implementation를 SSHJ로 선택해야 한다.
그리고, Putty접속용의 .ppk파일이 아니라 오리지널 개인키를 써도 된다.

보통 유동 IP를 사용하는 집에서는 mysql/mariadb나 Postgresql 서버에 접속하기 위해서 외부 접속 설정을 모든 IP에 대해서 허용해야한다.
SSH 같은 경우는 공개키 접속 방식으로 개인키 파일이 털리지 않는한은 절대로 접속이 불가능하게 되지만, DB 서버의 경우는 아이디/패스워드가 전부이기 떄문에 외부 접속을 열어두기가 아무래도 꺼림칙하다.

그래서 공개키 접속을 사용한 SSH 터널링으로 DB 서버에 접속하면 훨씬 안전하게 접속 할 수 있는데, 이미 공개키 방식으로 SSH 접속을 하고 있다면 설정은 별로 어려울 것도 없다.
DBeaver 등의 SSH 터널링을 지원하는 DB 툴로
DB 접속 호스트는 localhost 를 지정하고
포트, 아이디/패스워드등 나머지는 그대로.

SSH 터널링 설정을 들어가서 DB 서버의 IP 주소, SSH 유저 아이디, SSH 인증 방식을 공개키 방식으로 하고 개인키 파일을 지정하면 끝.

문제 해결

ssh-keygen으로 생성한 파일을 넣으면 이런 에러가…

DBeaver에서는 개인키 파일을 ssh-keygen으로 만든걸 썼더니 에러를 뿜어서 Putty 접속용으로 변환된 .ppk 파일을 등록하니 잘 접속 된다.
접속이 안되서 또 애꿋은 방화벽 탓을 하다가 발견… 메시지가 방화벽과 전혀 관계가 없는데도 방화벽 탓을 하게 된다.

그리고, 마지막으로.
SSH 터널링으로 접속이 잘 될 경우에는 잊지 말고 반드시 DB의 외부 접속 허용 설정을 끌 것.

ssh 공개키/개인키 접속하는 방법 참고 https://storycompiler.tistory.com/112