태그 글 보관함: 원격 접속

원격 접속 상태에서 iptables 의 안전한 적용 방법

iptables 의 특성

일단 iptables 의 특성에 대해서 알아보자. iptables를 쓴다면 알아야한다…

iptables 에 입력한 내용은 바로 적용된다.
단, 시스템 재기동을 하면 디폴트 파일로 초기화 되어, 추가된 내용은 사라진다.
디폴트 파일은 우분투 18.04의 경우에는 /etc/iptables/rules.v4, /etc/iptables/rules.v6 에 저장되어 있다. 시스템에 따라서 파일 위치나 파일명이 많이 다른듯하니 자신의 시스템명으로 검색해 볼것.
즉, 이 파일들을 수정해 주지 않으면 재기동으로 인해 iptables 에 설정한 내용이 사라진다는 것.

주의할 점이 있는데 fail2ban이나 openvpn 등에서는 이 iptables 가 재기동하면 초기화 된다는걸 반영해서, 시스템 재기동 후에 iptables 에 내용을 추가하도록 스크립트가 짜여져 있다.
그래서 현재 iptables 내용을 보는 iptables -L 명령으로 확인 후, 아래 iptables 내용을 저장하는 커맨드로 그 내용을 재기동시 읽어들이는 디폴트 파일에 아무생각 없이 덮어써버리면 디폴트 파일의 내용과 fail2ban의 기동 스크립트 내용이 중복되어 iptables 에 등록되게 된다. 뭐 같은 내용이기 때문에 중복으로 되어도 딱히 문제는 없지만, 이과들은 이런거 기분이 좋지 않겠지? ㅎㅎ
그래서 그렇게 중복되는 부분이 없도록 잘 생각해서 디폴트 파일에 내용을 덮어 써야한다.

iptables 저장 방법

저장한 내용을 복원하는 방법

iptables 의 안전한 적용 방법

자, 본론인 원격 접속 상태에서 iptables 내용을 안전하게 적용하는 방법을 알아보자.

원격으로 접속했을 때도 그렇지만, 특히 클라우드의 VPS 환경이라면 실제 단말에는 접속이 불가능하고 항상 원격으로 SSH 로 접속하기 때문에, 넣는 즉시 적용되어버리는 iptables 에 잘못된 내용을 넣으면, 영영 접속을 할 수 없는 경우가 생긴다. 돌아올 길은 서버 재기동 설정이 있는 환경이라면 서버 재기동으로 디폴트 파일로 인해 iptables가 초기화 되면서 그나마 접속할 수 있게 되지만, 서버 재기동 방법이 제공되지 않거나, 어떻게 하는지 모를 경우에는 참 위험하지 않을 수 없다.

iptables-apply 커맨드를 사용하면 안전하게 iptables를 적용할 수 있다. 아래 커맨드는 iptables.conf 파일의 내용을 적용해서 30초 후까지 응답이 없을 경우 원래 iptables 의 내용으로 되돌려 준다.

실제 커맨드를 실행하면 아래와 같이 진행된다.

30초간 아무 선택을 하지 않을 경우…

그래 문제가 안생기면 리눅스가 아니지…
일단 fail2ban 에 ipset 로 설정된 세트가 제대로 반영이 안되는것 같은데, fail2ban 0.10.2 버전에서는 고쳐진 것 같은데, 이것 때문에 귀찮게 버전업하지는 않겠다.
그냥 fail2ban 재기동으로 iptables 에 fail2ban 설정이 다시 들어가니 그냥 서비스 재기동 하자.

에러는 안났지만, openvpn 의 iptables 설정도 날아가버리던데, openvpn은 서비스 재기동을 해도 iptables 설정이 살아나지 않는다. 서버 재기동 해야할듯.

어쨋든 iptables-apply 명령을 쓰면 안전하게 iptables 내용을 되돌려 준다는 것은 확인했으니, 잘 이용해 보도록 하자.

참고: Is it enough adding iptables rules without restart?

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

테라텀을 이용한 SSH 접속

이전 글에 이어서

하이퍼v에 우분투 서버를 설치하게 되면 여러가지 이유로 (하이퍼v가 설치된 컴퓨터를 포함한) 원격 컴퓨터에서 SSH 를 이용해서 서버를 관리하게 된다.
이 글에서는 SSH 접속 프로그램인 테라텀(teraterm)을 이용한 접속 방법에 대해서 설명한다.
이 글에서는 테라텀으로 접속하는 방법만을 설명하지만, 다른 접속 프로그램도 기본적으로 내용은 같다.

먼저 소스포지 사이트에서 테라텀을 다운로드 받는다.
테라텀 다운로드 링크
exe 파일을 다운로드 받아서 설치하면 된다.

SSH 접속에 필요한 정보는 아래 네가지이다.
-접속할 서버의 IP 주소
-접속할 서버의 SSH 포트
-접속할 서버에 등록 되어 있는 계정명
-계정의 패스워드

먼저 접속할 서버의 IP는 우분투 서버에서 아래의 명령으로 확인할 수 있다.

inet addr 뒤에 192.168로 시작하는 주소가 현재 우분투가 할당 받은 IP이다.

SSH 포트번호는 sshd_config 파일에 적혀있다.

테라텀을 실행한다.
호스트명에 서버의 IP를, TCP 포트#에 포트 번호를 입력하고, 서비스는 SSH를 선택하고 확인/OK 버튼을 누른다.

여기서 우분투 서버의 로그인 프롬프트가 나오면 성공이다. 계정명과 패스워드를 입력하면 된다.

접속이 안될 경우에는 우분투 서버에서 netstat로 설정된 포트가 제대로 열려 있는지 확인해 본다.

sshd_config 파일에 설정된 포트가 1022일때 아래와 같은 줄이 나와야한다.

1022가 아니라 22로 나울때는 ssh 서비스가 제대로 재기동 되지 않았거나 sshd_config 파일에서 설정한 내용이 제대로 반영되지 않은 경우이니 설정을 확인해 봐야한다.

외부에서 접속 했을 경우에는 공유기의 방화벽으로 포트가 막혀 있을 가능성이 가장 큰데, 공유기 설정 화면에서 포트 포워딩이나 포트 맵핑으로 포트를 열어주면 된다.

우분투 서버 14.04 LTS SSH 접속 설정

하이퍼v(hyper-v)에 우분투 서버를 설치하면 가상머신접속 화면에서는 한글이 깨지게 된다.
그럴때는 테라텀(teraterm) 등의 SSH 접속 프로그램으로 서버에 접속해서 사용하면 되는데, 서버는 항상 켜두고 원격에서 접속해서 서버를 관리하는게 여러모로 편리하니 SSH 접속 설정을 해 두는 것이 좋다.
이 글에서는 SSH 접속을 위한 설정을, 다음 글에서 테라텀을 이용한 접속에 대해서 설명해 보겠다.

SSH 설치

openssh 는 우분투 서버 설치 마지막에 선택해서 설치하면 편리한데, 설치하지 않았다면 아래 명령으로 설치 할 수 있다.

SSH 포트번호 변경

SSH 는 기본적으로 22번 포트를 사용하게 되어 있다.
웹서버나 FTP 서버로 사용하기 위해서 외부에 공개할 서버의 경우에는 SSH 의 기본 포트번호인 22번 포트로 공격해 오는 일이 많기 때문에 SSH 의 포트번호를 임의의 포트번호로 변경하는 것이 좋다.

openssh 데몬의 설정 파일을 편집한다.

예를 들어 포트번호를 1022번으로 변경할 경우에는 아래와 같이 바꾼다.

그리고, 보안을 위해서 root 계정으로 로그인을 금지하라는 글이 많은데 우분투 서버에서 openssh 설치시 기본적으로 아래와 같은 설정으로 금지 되어있으므로 신경 안써도 된다.

내용을 설명하자면, without-password는 패스워드를 입력한 root 계정 로그인을 허가하지 않는다는 말인데, 공개키를 만들어서 접속하는 방법으로는 root 계정 로그인을 허가하겠다는 설정이다. 공개키를 만들지 않으면 당연히 접속이 불가능하기 때문에 실질적으로 root 계정은 접속이 불가능해진다.

설정 파일을 저장하고 빠져 나와서 ssh 서비스를 재기동한다.

netstat 로 설정된 포트가 제대로 열려 있는지 확인해 본다.

sshd_config 에서 설정한 포트가 1022일때 아래와 같은 줄이 나와야한다.

다음 글에서는 테라텀으로 SSH 접속하는 방법에 대해서 설명해 보겠다.

포스트그레스 원격으로 접속하기 우분투 서버 14.04 LTS

환경
Ubuntu Server 14.04 LTS

PostgreSql 설치

apt-get install postgresql-9.3

pgadmin3는 GUI툴이니 서버 버전 우분투에는 설치하지 않는다.
설치후 아래 명령으로 PostgreSql 콘솔로 진입한다.

sudo -u postgres psql postgres

새로운 패스워드를 설정한다.

\password postgres

콘솔에서 나가기

\q

초기 상태에서는 로컬에서 밖에 접속 할 수 없다.
원격으로 pgAdmin등으로 접속하기 위해서는 아래와 같은 설정이 필요하다.

먼저 pg_hda.conf에 접속 가능한 원격지 컴퓨터의 아이피를 등록한다. 여기에 등록해 두지 않으면 접속이 거부 된다.

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

제일 아래 추가

host all all <서버에접속할원격PC의IP주소>/32 md5

예를 들어 원격 컴퓨터의 아이피가 192.168.0.3일때,

host all all 192.168.0.3/32 md5

다음은 서버 아이피 주소를 등록한다.

sudo vi /etc/postgresql/9.3/main/postgresql.conf

제일 아래 추가

listen_addresses = 'localhost,<PostgreSql가설치된PC의IP주소>'

예를 들어서 포스트그레스가 설치된 서버의 아이피가 192.168.0.2일때라면 아래와 같이 쓴다.

listen_addresses = 'localhost,192.168.0.2'

PostgreSql 서비스 재시작

sudo service postgresql restart

이제 원격지 컴퓨터에서 접속해 보자.