글 수 369
▒ Doly의 CentOS7 강좌30 12. 네트워크 보안설정 12.2 iptables 서비스 (1/3)
CentOS7 조회 수 662 추천 수 0 2015.06.09 20:27:02▒ Doly의 CentOS7 강좌30 12. 네트워크 보안설정 12.2 iptables 서비스 (1/3)
#################################################
작성자 : 정우영
작성일 : 2015.05.15
대상 OS : CentOS7 x86_64
완성될 서적 : Doly의 센트OS(CentOS)7 구축 관리 실무 (2016년 1월-->수정됨ㅠㅠ)
본 강좌를 기반으로 서적을 집필합니다. 연재강좌가 마무리되고 몇달 후면 서적이 나오겠죠? CentOS7은 서적도 없지만 강좌도 많이 부족하네요. 리눅스 서버를 10년 넘게 구축하고 관리하고 컨설팅하면서 꼭 필요한 부분과 알아야 할 부분들을 꼼꼼히 체크하면서 강좌를 써보려합니다. 강좌중 오탈자가 있거나 설명이 부족하고 잘못된 경우 doly골뱅이superuser.co.kr으로 메일한통 부탁드립니다. 강좌가 수정되면 더 많은 분들께 도움이 될것이라 생각하고 강좌를 기반으로 집필될 서적또한 완성도가 높아지지 않을까 생각합니다.
#################################################
12.2. iptables 서비스
firewalld는 분명 CentOS7의 아주 혁신적인 기능중의 하나이다. 하지만 필자는 본 서적을 집필하면서 인터페이스가 편리 하나 많은 부분에서 부족함을 느꼈다. 특히 소스IP를 명시하는 부분이 명확하지 않다. 방화벽의 기본은 출발지 IP, 프로토콜, 포트 도착지 IP, 프로토콜, 포트를 기본으로 방화벽 규칙을 만들어간다. 하지만, firewalld는 출발지 IP와 목적지 IP에 대한 정의가 명확하지 않다. 리눅스 스킬이 중급 이상이라면 이러한 이유로 firewalld 서비스를 제거하고 예전 iptables 서비스로 돌아가길 권장하고 싶다.
지금부터는 CentOS6까지 사용하던 iptables 서비스 설정 방법에 대해 알아보도록 하자.
12.2.1. firewalld를 내리고 iptables 서비스 올리기
CentOS7부터는 firewalld가 기본으로 활성화 된다. firewalld를 사용하지 않고 CentOS6 이하의 방법으로 방화벽을 사용하기 위해서는 firewalld를 비활성화, 정지하고 iptables를 활성화, 시작해야 한다. 다음과 같이 콘솔창에서 작업해 보자.
먼저 systemctl명령어를 사용하여 firewalld를 비활성화 시킨다. 여기서 비활성화 시킨다는 것은 시스템 시작시 자동으로 시작되지 않게 하기 위함이다.
~]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
다음으로 firewalld 서비스를 종료시키자.
~]# systemctl stop firewalld
이제는 iptables 서비스를 활성화 시켜보자.
~]# systemctl enable iptables
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
다음으로 iptables 서비스를 시작시켜보자.
~]# systemctl start iptables
12.2.2. 방화벽 GUI(system-config-firewall) 설정
firewalld를 사용하지 않는다고 GUI인터페이스를 포기할 필요는 없다. CentOS6까지 사용하던 방화벽 GUI 프로그램(system-config-firewall)을 설치해서 사용하면 된다. system-config-firewall는 firewalld의 GUI인터페이스인 firewall-config와 비슷하다.
먼저 system-config-firewall을 설치해 보자.
~]# yum install system-config-firewall
yum을 이용하여 system-config-firewall패키지를 설치한다.
실행위치 : 프로그램 > 잡다 > 방화벽
(2개가 보일 것이다. 2개 중 아래 화면을 보여주는 것을 선택한다.)
또는 터미널 창에서 system-config-firewall 입력
다음과 같은 화면을 볼 수 있다.
처음 실행하면 위와 같은 경고창이 나타난다. 방화벽 룰을 설정하는 파일 /etc/sysconfig/iptables 파일이 존재하지 않아 발생하는 것으로 확인(O)을 클릭하여 넘어간다.
웹서버를 운영하기 위해 HTTP, HTTPS 포트를 허용하는 방법에 대해 알아보자.
위 그림과 같이 좌측 상단 신뢰하는 서비스를 선택하고 우측에 SSH, WWW(HTTP), 보안 WWW(HTTPS)를 선택한다. 상단에 적용을 클릭하여 방화벽을 적용한다.
방화벽 오픈 여부 확인을 위해 다른 리눅스 컴퓨터에서 다음과 같이 확인해 보자.
~]# nmap 192.168.0.201 -p 443,80,22,25
Starting Nmap 5.21 ( http://nmap.org ) at 2015-03-30 20:40 KST
Nmap scan report for 192.168.0.201
Host is up (0.00041s latency).
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp closed http
443/tcp closed https
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
nmap명령어를 방화벽 설정 내역을 확인할 수 있다. 22/tcp(SSH)는 오픈된 것이 확인되고, 25/tcp(SMTP)는 filtered되었다. 웹서비스 포트 80/tcp(HTTP), 443/tcp(HTTPS)는 방화벽에서 차단된 것은 아니지만 닫혀 있다고 나타난다. 상태에 대해 설명하면 다음과 같다.
12.2.2.1. 포트 및 프로토콜 직접 추가
앞에서 다뤘던 서비스를 이용하여 방화벽을 관리하기도 하지만, 미리 정의된 서비스의 포트를 변경하는 경우 또는 정의되지 않은 서비스의 포트를 오픈하기 위해서는 직접 포트 및 프로토콜을 정의하여 오픈해야 한다.
VNC접속을 위해 포트 및 프로토콜을 직접 추가해 보도록 하자.
위 그림과 같이 좌측 메뉴 중에서 그 외의 포트를 선택하고 우측 추가(A)버튼을 클릭한다. 위 그림과 같이 직접 포트를 추가할 수 있는 창이 나타나고, 사용자 정의를 선택하고 다음과 같이 입력하자.
“포트/포트 범위:” 5900-5910
“프로토콜:” tcp 선택
과 같이 설정한다. 이는 TCP 5900~5910포트로 서버에 들어오는 패킷을 허용한다는 것이다.
설정 완료 후 상단에 적용버튼을 클릭하여 설정된 규칙을 적용시킨다.
12.2.2.2. 마스커레이딩(Masquerading)
리눅스 시스템을 인터넷 공유 목적의 라우터 기능을 사용하기 위해 마스커레이딩 기능을 활성화 시킨다.
마스커레이딩을 사용하기 위해 공인망, 사설망 네트워크 구성을 미리 해 두어야 한다.
위 그림과 같이 좌측 메뉴 중에서 마스커레이딩(Masquerading)을 선택하고 우측 탭에서 장치를 선택한다.
설정 완료 후 상단에 적용버튼을 클릭하여 설정된 규칙을 적용시킨다.
12.2.2.3. 포트 포워딩(port forwarding)
앞에서 마스커레이딩 설정으로 인터넷 공유 라우터를 설정한 경우 외부에서 공인IP로 접속되는 연결에 대해서 포트에 따라 내부 서버로 연결시킬 수 있는 포트 포워딩 기능을 사용할 수 있다.
또, 시스템으로 들어오는 포트를 포워딩하여 로컬의 다른 포트로 포워딩할 수 있다. 시스템의 각 서비스들은 보안을 위해 일반 사용자 권한으로 서비스를 실행하기를 권장한다. 예를 들어 Tomcat은 JSP 컨테이너이면서 웹서버 기능을 가지고 있다. Tomcat은 일반 사용자 계정으로 실행할 것을 권장한다. 하지만, HTTP기본포트 80을 사용할 경우 root권한이 아니면 80포트를 Bind할 수 없다. 이러한 경우 포트포워딩을 사용하여 80포트로 접속되는 패킷을 로컬의 8080(Tomcat의 기본 HTTP 포트)포트로 포워딩 시킴으로 root권한 없이 80포트를 사용하여 웹서비스를 할 수 있다.
80포트로 접속되는 패킷을 8080포트로 포워딩 설정해 보자.
위 그림과 같이 좌측 메뉴 중에서 포트 포워딩을 선택하고 우측에서 추가(A)버튼을 클릭하여 추가한다.
소스
인터페이스 : eth+
프로토콜 : tcp
포트: 80
수신지
로컬 포트 포워딩 체크
포트: 8080
으로 설정한다. 설정완료 후 확인(O)을 클릭한다.
설정된 내역을 다음과 같이 확인할 수 있다.
설정 완료 후 상단에 적용버튼을 클릭하여 설정된 규칙을 적용시킨다.
12.2.2.4. ping 응답 하지 않기
시스템의 네트워크 상태를 확인하기 위해 ping명령어를 이용하여 응답 테스트를 한다. ping은 네트워크 확인을 위해 유용하게 사용되지만, 악의적으로 패킷크기를조절하여 네트워크의 과다한 트래픽을 유발하기도 한다. 이러한 공격을 차단하기 위해 ping에 대해 응답하지 않도록 설정하는 경우가 있다.
다음은 ICMP 프로토콜 중 ping에 대해 응답하지 않게 설정하고 있다.
위 그림과 같이 좌측 메뉴 중에서 ICMP필터를 선택하고 우측 에코 요청(핑)에 체크한다.
설정 완료 후 상단에 적용버튼을 클릭하여 설정된 규칙을 적용시킨다.
이상으로 30번째 강좌를 마무리 합니다. CentOS7의 firewalld가 마음에 들지 않는다면 예전 방식으로 iptables를 사용해 보았습니다. 퇴근하고 집에가는 것이 당연한 것이 아니고 책을 쓰기 위해 컴퓨터 앞에 앉는 것이 당연해지고 있네요ㅠㅠ. 열심히 뛰는 도리(Doly)였습니다.^^
#################################################
* 본 강좌는 언제든 갱신될 수 있으며, 원글은 www.linux.co.kr 강좌>리눅스>Doly의 연재강좌 에서 수정됩니다.
* 본 강좌의 일부 또는 전체를 인용하실 경우, 반드시 출처를 밝혀 주시기 바랍니다.
* 수정이력 :
2015.5.15(금): 스승의 날에 최초작성