본문으로 바로가기


안녕하세요, SATAz입니다.

이번 포스팅은 IPTables에 대해서 소개드리는 첫 번째 내용입니다.




시스템 엔지니어로 일하다보면 방화벽이라는 존재는 필수불가결한 존재라는 것을 뼈저리게 느끼게 됩니다.

사실상 방화벽이란 것이 독립적인 장비를 하나 마련하는 것이 최고의 방법이기는 하지만,

방화벽을 전~혀 사용하지 않으시는 것 보다는, IPTables라도 사용하시는 것을 권고드립니다.


집에서 컴퓨터 사용하시는데 윈도우 방화벽을 끄는 것 보다 켜는 것이 보안상으로 이로운 것과 같다고 보시면 됩니다.



1. IPTables에 대한 간단 설명.

 IPTables는 Netfilter Project라는 곳에서, C언어로 만들어진 패킷 필터링 서비스입니다.

 직접적인 패킷필터링은 리눅스 커널의 Netfilter 라는 모듈에서 담당을 하며, IPTables는 Rule(룰)을 관리하는 역할을 합니다.


2. 기본적인 IPTables의 체인

 IPTables에서는 체인별로 방화벽 룰을 관리합니다.

1) INPUT Chain : 외부->서버 내부로 들어오는 패킷들을 필터링합니다.

2) OUTPUT Chain : 서버 내부->외부로 나가는 패킷들을 필터링합니다.

3) FORWARD Chain : 자신을 통과하는 모든 패킷들을 필터링합니다. (브릿지 인터페이스 구성에서 사용됩니다.)


3. IPTables 설치 방법 1 - CentOS/RHEL 7



#IPTables 설치를 위한 환경


- 테스트 머신 : VMware WorksStation 12 Player

- 운영체제 : CentOS/RHEL 7 - 64bit ( Minimal 설치 )

- 메모리 : 2GB





CentOS 6버전까지는 기본 방화벽을 iptables로 사용했지만,

CentOS 7버전에서는 기본 방화벽을 firewalld로 사용합니다. iptables를 위해 firewalld 서비스를 중지해주실 필요가 있습니다.

따라서 아래의 명령어로 firewalld를 비활성화합니다.


# firewalld 비활성화 명령어

#firewalld 비활성화 명령어


[root@localhost /]# systemctl stop firewalld

[root@localhost /]# systemctl mask firewalld

Created symlink from /etc/systemd/system/firewalld.service to /dev/null.


# firewalld 상태 확인 명령어

[root@localhost /]# systemctl status firewalld

● firewalld.service

   Loaded: masked (/dev/null; bad)

   Active: inactive (dead) since 토 2017-06-24 14:05:25 KST; 26s ago

 Main PID: 509 (code=exited, status=0/SUCCESS)


 6월 24 13:49:09 localhost.localdomain systemd[1]: Star...

 6월 24 13:49:15 localhost.localdomain systemd[1]: Star...

 6월 24 14:05:24 localhost.localdomain systemd[1]: Stop...

 6월 24 14:05:25 localhost.localdomain systemd[1]: Stop...

Hint: Some lines were ellipsized, use -l to show in full.



yum 패키지 매니저를 통해서 iptables 서비스를 설치합니다.


# iptables 서비스 설치

[root@localhost /]# yum install iptables-services


/etc/sysconfig/iptables 설정 샘플파일의 내용입니다.


# 샘플 설정파일 내용

[root@localhost /]# view /etc/sysconfig/iptables


# sample configuration for iptables service

# you can edit this manually or use system-config-firewall

# please do not ask us to add additional ports/services to this default configuration

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT


iptables 서비스의 구동 상태를 확인합니다.


# iptables 구동 상태 확인

[root@localhost /]# systemctl status iptables

● iptables.service - IPv4 firewall with iptables

   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)

   Active: active (exited) since 토 2017-06-24 13:57:02 KST; 12min ago

 Main PID: 2156 (code=exited, status=0/SUCCESS)

   CGroup: /system.slice/iptables.service


 6월 24 13:57:01 localhost.localdomain systemd[1]: Starting IPv4 firewall with iptables...

 6월 24 13:57:02 localhost.localdomain iptables.init[2156]: iptables: Applying firewall rul...]

 6월 24 13:57:02 localhost.localdomain systemd[1]: Started IPv4 firewall with iptables.

Hint: Some lines were ellipsized, use -l to show in full.


샘플 설정파일의 내용이 적용된 iptables의 상태를 아래의 명령어로 확인합니다.


# 샘플 설정에 의한 방화벽 룰셋 확인

[root@localhost /]# systemctl enable iptables

Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

[root@localhost /]# systemctl start iptables

[root@localhost /]# iptables -nL

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22

REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination    



4. IPTables 설치 방법 2 - CentOS/RHEL 6



#IPTables 설치를 위한 환경


- 테스트 머신 : VMware WorksStation 12 Player

- 운영체제 : CentOS/RHEL 6 - 64bit ( Minimal 설치 )

- 메모리 : 2GB



CentOS6 버전의 경우 기본적으로 iptables가 설치되어있습니다. CentOS7의 경우 firewalld 서비스를 기본적으로 사용하지만, CentOS6에서는 iptables 기본입니다.







댓글을 달아 주세요