반응형

iptables 방화벽 개요


 

  

테이블 (table)

: 각 테이블 마다 기능이 다르고 사용자의 용도에 따라 알맞은 테이블을 선택하면 된다.

filter

패킷을 필터링 할때 사용됨

 

nat

패킷의 방향이나 주소를 변경

 

mangle

패킷의 상태를 변경

 

raw

패킷이 커널에 의해 처리되기 전에 필터링

∗ 기본적으로 서버에 대한 접근제한은 filter 테이블에서 이뤄진다. ( 본 문서는 filter 테이블을 기준으로 설명한다)

 

 

 체인 (chain)

INPUT : 외부에서 서버로 들어오는 연결에 대한 필터링

OUTPUT : 서버에서 외부로 나가는 연결에 대한 필터링

FORWARD : 외부에서 들어온 연결이 다시 외부로 향하는 연결에 대한 필터링

∗ 위 체인은 filter 테이블에 포함되어 있으며 필요에 따라 별도의 체인을 생성 할 수 있다. (본 문서는 INPUT 체인 기준으로 설명한다)

  

 

그리고 몇가지 문법들로 구성되는데 자주 사용되는것들은 아래와 같다

-p [프로토콜 번호]

-s [출발지 아이피]

-d [목적지 아이피]

--sport [출발지 포트번호]

--dport [목적지 포트번호]

-j ACCEPT : 허용

-j DROP : 차단

-m [모듈이름] : iptables에서 확장모듈을 사용할 때 사용

 ∗ 위 옵션들만 알고 있으면 서버에 대한 간단한 접근 정책 설정은 무난히 진행 할 수 있다.

 

 

방화벽 실행 및 중지 스크립트

#실행

$ /etc/init.d/iptables start

 

#중지

$ /etc/init.d/iptables stop

 

#재시작

$ /etc/init.d/iptables restart

∗ 시작, 재시작은 아래 파일 경로 (/etc/sysconfig/iptables 파일 설정을 가지고 와서 정책으로 로드한다) 

  

 

iptables 정책 파일 위치

  • /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

∗ iptables 명령으로 하나하나 정책을 추가하거나 삭제하는 방법과 위 파일을 수정한 다음 iptables 재시작하는 방법 2가지가 있다.

 

 

만약 리눅스 서버에 네임서버가 운영 중이라면 아래와 같이 설정하면 된다.

  • vi /etc/sysconfig/iptables (파일 내용 추가)

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT (라인 추가)
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

∗ 파일 수정후 iptables 재시작 스크립트 (/etc/init.d/iptables restart) 를 실행하면 적용된다.

 

 

iptables 는 정책이 순차적으로 필터링 되는데 일반적으로 위에서 아래 방향으로 패킷이 지나간다고 생각하면 된다.

위 예제에서는 제일 마지막 정책은 모든 패킷을 차단하는 정책이다.

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

∗ 일반적으로는 위쪽에는 방화벽 허용 정책을 아래쪽에는 차단하는 정책을 배치시킨다.

 

 

방화벽 재시작

$ /etc/init.d/iptables restart
iptables: 방화벽 규칙 적용 중: [ OK ]

 

 

방화벽 정책 파일을 잘못수정하거나 문법이 틀린경우 열번호와 함께 에러를 출력한다.

$ /etc/init.d/iptables start
iptables: 방화벽 규칙 적용 중: Bad argument `123123123123123'
Error occurred at line: 26
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
                                                                                    [실패]

∗ 위와 같이 26번째 라인 에러 발생시에는 그 앞뒤 전후 라인 정책들도 같이 확인하는것이 좋다.

 

: 문법적으로 틀린 부분과 라인번호를 출력해주므로 사용하자는 에러 메세지를 참고하여 재수정하고 iptables 다시 시작한다.

 

 

방화벽 설정을 위해서는 서비스 포트 번호를 알아야 하는데 리눅스 서버에서는 아래 파일에서 확인 가능하다.

  • cat /etc/services

......

http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
http 80/sctp # HyperText Transfer Protocol
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5

......

 

 

ex) 서버의 ssh 접근을 특정 아이피 (192.168.0.1) 에서만 접근 가능하도록 한다면 아래와 같은 정책을 만들수 있다.

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

 

 

iptables 는 방화벽 정책을 적용하고 실제로 패킷이 차단하는지 다른서버나 외부에서 테스팅을 해야 한다.

실제로 문법은 틀린게 없지만 옵션 등의 문제로 인해 차단 정책을 하고 나서 외부에서 접근이 되는 경우도 종종 발생하기 때문이다.

 

 

NOTE

방화벽 설정을 잘못 하는 경우 서버와의 연결이 끊어져서 접속이 안되는 경우가 발생한다.

 

반응형

'컴퓨터 & 프로그래밍' 카테고리의 다른 글

우분투 리눅스 APACHE PHP MYSQL 설치/삭제  (0) 2017.12.29
우분투 UFW  (0) 2017.12.28
리눅스 SWAP SIZE 변경  (0) 2017.12.28
우분투 80 포트 이용  (0) 2017.12.28
blicoin-cli 명령어  (0) 2017.12.18
Posted by 얀웬리
:
BLOG main image
여행 맛집 소소한 일상 선물옵션 투자 재테크 잡다한 이야기 by 얀웬리

공지사항

카테고리

전체분류 보기 (75)
온라인 페이먼트 (3)
FX (Foreign Exchange) (2)
여행 & 맛집 (9)
코인 가상화폐 투자 (1)
해외 사이트 소개 (5)
음악 & 영상 (0)
선물 & 옵션 (2)
컴퓨터 & 프로그래밍 (30)
블로그 관리 (3)
소소한 일상 (3)
잡다한 이야기 (5)
함께 웃어요^^ (1)
건강 (0)
독도 - Dokdo Islands (4)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :