관리 메뉴

IT창고

리눅스 iptables 기초 본문

보안/Security

리눅스 iptables 기초

방구석여포 2018. 6. 17. 13:13

2017/10/15 - [서버운영/Linux] - 리눅스 iptables에서 iptables에 대해 간단히 알아봤습니다.


이번에는 iptables에 대해 좀 더 자세히 알아보도록 하겠습니다.

리눅스에서 방화벽 규칙 확인은 iptables -nL --line-numbers 명령어로 확인이 가능합니다.



iptables에서 기본적인 filter테이블입니다. -t 옵션으로 테이블을 지정하지 않는다면 filter테이블로 설정됩니다.

iptables의 테이블은 filter , nat, mangle, raw 테이블이 있습니다.

filter는 패킷 필터링에 사용되는 기본값인 테이블이고 nat는 출발지, 목적지 IP 주소와 포트번호를 변환하는 NAT에서 사용되는 테이블입니다. 그외에 mangle는 패킷 헤더의 특별한 갱신에 사용되는 테이블이고 raw는 연결을 추적하지 않는 패킷의 처리에 사용되는 테이블입니다.


iptables 명령어의 옵션들을 살펴보겠습니다.

 옵션

 설명

 -A

지정한 체인의 마지막에 규칙 추가 

 -D

 지정한 체인의 규칙 삭제

 -P

 지정한 체인의 정책을 변경

 -L [체인]

iptables 테이블의 규칙 리스트 표시 

 -N [체인]

 지정한 이름으로 사용자 정의 체인 생성

 -X

 지정한 사용자 정의 체인 삭제

 -I [규칙]

 번호를 지정해 규칙을 삽입

 -F [체인]

 지정한 체인의 모든 규칙을 삭제

 -t

 iptables의 테이블을 지정

 -v

 테이블의 상세한 내용을 표

 -n

 테이블의 내용을 숫자 값으로 표시 

 -line-number

 규칙의 번호를 표시


iptables의 체인에 대해 알아보겠습니다.


 체인

설명 

 INPUT

호스트에 들어온 패킷 

 OUTPUT

 로컬 호스트에서 만들어진 패킷

 FORWARD

 호스트를 통과하는 패킷

 PREROUTING

 들어오는 패킷을 변환

 POSTROUTING

 나가는 패킷을 변환



iptables의 대상(Target)에 대해 알아보겠습니다.


 대상

설명 

 ACCEPT

 허용

 DROP

 파기

 REJECT

 거부

 MASQUERADE

 출발지 IP와 포트번호를 자동변환

 SNAT

 출발지 IP 주소 변환

 DNAT

 목적지 IP 주소 변환

 LOG

 로그 출력


iptables의 규칙에 대해 알아보겠습니다.


 규칙

설명 

 -s 출발지

 출발지 IP 주소

 -d 목적지

 목적지 IP 주소

 --sport

 출발지 포트 번호

 --dport

목적지 포트 번호 

 -j

 사용할 대상(Target)

 -p 프로토콜

 프로토콜 지정(tcp, udp, all 등)

 -i 인터페이스

 입력 네트워크 인터페이스(eth0, ppp0 등)

 -o 인터페이스

 출력 네트워크 인터페이스

 -m state --state 상태

 패킷의 상태(NEW,ESTABLISHED,RELATED,INVALID)



iptables를 사용하기 위한 많은 명령어 옵션들을 확인할수있습니다.

기본 규칙들을 삭제하고 기본정책을 DROP으로 바꾼 후에 새롭게 규칙을 새워 보겠습니다

외부와 ping테스트를 해보겠습니다.


정책을 기본적으로 ACCEPT로 되어있는데 OUTPUT 체인을 신경쓸필요없이 INPUT, FORWARD 체인을 DROP 정책으로 기본값 설정으로 되어있으면 규칙이 없을 경우 해당되지 않는 패킷은 안으로 들어오가나 다른곳으로 변환 시켜주지 않게 됩니다.


현재 테스트PC는 두개로 R리눅스가 라우터역활을 하며 A리눅스가 R리눅스에 네트워크가 연결이 되어 외부로 네트워크가 연결되어있는 상태입니다.



iptables -t filter -F 명령어로 iptables의 filter테이블의 모든 규칙을 삭제하고 ssh접속을 위한 규칙하나만 넣었습니다.

그 상태에서 ping테스트를 위해 icmp 패킷이 들어올수있도록 규칙을 정의 했습니다. -A옵션으로 해당 체인을 설정하고 -p옵션으로 들어오게할 프로토콜을 설정합니다 ping테스트를 위해 icmp패킷을 설정하고 목적지IP를 현재 설정된 A리눅스의 IP를 설정하고 -j 옵션의 해당 대상을 설정했습니다. 규칙의 세부 설정은 세세하게 규정할수록 더욱 강력한 규칙이되어 보호하게 됩니다.


편하게 iptables -A INPUT -p icmp -j ACCEPT로 설정해도 ping테스트는 문제가 없지만 조건을 더욱 부여하게 되면 그만큼 보안성이 좋아지게 되며 이런 규칙의 설정은 1번에 가까울수록 먼저 해당 규칙을 우선합니다. 


예를 들어  iptables -A INPUT -p icmp -j ACCEPT 규칙이 1번 설정으로 되고 2번 설정으로 iptables -t filter -A INPUT -p icmp -d 10.10.10.10 -j ACCEPT 를 설정하게 되면 1번 규칙에서 이미 해당 조건이 성립되기 때문에 2번 설정을 확인안하고 넘어가게 됩니다. 즉 목적지 IP로 설정된 곳이 아니더라도 icmp패킷을 받을수있게 됩니다.

'보안 > Security' 카테고리의 다른 글

리눅스 PAM1  (0) 2018.06.24
리눅스 iptables 심화  (0) 2018.06.24
리눅스 서버 보안3  (0) 2018.06.16
리눅스 서버 보안2  (0) 2018.06.14
리눅스 서버 보안 1  (0) 2018.06.13
Comments