원격 접속 상태에서 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 서버 재기동으로 초기화 되는 문제

댓글 남기기