2018. 2. 26. 12:27 Linux Server/etc
[기타] Iptables 설치 및 설정
[ Iptables 설치 및 설정 ]
iptables는 리눅스상에서 방화벽을 설정하는 도구입니다.
iptables는 커널상에서 netfilter 패킷필터링 기능을 사용자 공간에서 제어하는 수준으로 사용할 수 있습니다.
패킷 필터링이란 지나가는 패킷의 헤더를 보고 그 전체 패킷의 운명을 결정하는것을 말하며, 헤더에 필터링할 정보인 출발지 ip:port , 도착지ip:port 등 프로토콜 옵션등을 가지며, 데이터는 각각 전송데이터가 들어갑니다.
특정 조건을 가지고 있는 패킷에 대해 허용(ACCEPT) 및 차단(DROP)등을 지정할 수 있습니다.
특히 iptables 정책은 여러 구분으로 나눠지며 중요한 부분은 Chain입니다.
Chain INPUT : 서버로 들어오는 기본정책
- 서버를 목적지로 삼는 모든 패킷은 INPUT Chain을 통해 서버로 통과하게 된다.
Chain OUTPUT : 서버에서 나가는 기본정책
- 서버에서 생성되어 외부로 나가는 모든 패킷은 OUTPUT Chain을 통해 서버에서 나가게 된다.
Chain FORWARD : 서버에서 forwarding 되는 기본 정책
- 해당 서버가 목적지가 아닌 이 서버를 거쳐 패킷이 통과하는 Chain이다.
우분투에서 설치 방법
- 우분투에서는 iptables 가 설치되어 있지 않습니다.
우분투에서 기본적으로 ufw 라는 방화벽을 쓰며, 해당 방화벽을 disable시킨 상태에서 iptables 설치 # apt-get install iptables-persistent # cp /usr/share/netfilter-persistent/plugins.d/15-ip4tables /etc/init.d/iptables → 해당 파일 init.d에 복사 # /etc/init.d/iptables start → iptables 시작 명령어# /etc/init.d/iptables flush → iptables 종료 명령어 # update-rc.d -f iptables defaults → 부팅시 iptables 자동으로 올라오도록 설정 insserv: warning: script ‘K01iptables’ missing LSB tags and overrides insserv: warning: script ‘iptables’ missing LSB tags and overrides 위와 같은 에러가 뜰경우 아래 파일에 LSB tag값이 지정되어있지 않다는 메세지이며 상단에 아래 문구삽입 # vi /etc/init.d/iptables ### BEGIN INIT INFO # Provides: skeleton # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Example initscript # Description: This file should be used to construct scripts to be # placed in /etc/init.d. ### END INIT INFO iptables의 파일 위치 → /etc/iptables/rules.v4 해당 파일을 수정하여 룰적용을 하는 방법 및 명령어를 이용하여 룰적용을 하는 방법이 있습니다.
|
centos 6 에서 설치방법
- centos6 경우 iptables가 대부분 설치가 되어 있습니다.
# yum install -y iptables # chkconfig iptables on → 서비스를 시작프로그램에 등록합니다. # service iptables start → iptables 실행 명령어 # service iptables stop → iptables 종료 명령어 iptables의 파일위치 → /etc/sysconfig/iptables |
매치
- iptables에서 패킷을 처리할때 만족해야 하는 조건을 가리킨다. 이 조건을 만족시키는 패킷들만 규칙을 적용한다.
--source (-s) → 출발지 IP주소를 나타냄 --destination (-d) → 목적지 IP주소를 나타냄 --protocol (-p) → 특정 프로토콜과의 매칭 --in-interface (-i) → 입력 인터페이스 --out-interface (-o) → 출력 인터페이스 --state → 연결 상태와의 매칭 --string → 애플리케이션 계층 데이터 바이트 순서와의 매칭 --comment → 커널 메모리 내의 규칙과 연계되는 최대 256바이트 주석--syn (-y) → SYN 패킷을 허용하지 않는다. --fragment (-f) → 두번째 이후의 조각에 대해서 규칙을 명시한다. --table (-t) → 처리퇼 테이블 --jump (-j) → 규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시한다. --match (-m) → 특정 모듈과의 매치 |
타겟
- iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.
ACCEPT → 패킷을 받아들인다. DROP → 패킷을 버린다 (패킷이 전송된 적이 없던 것처럼) REJECT → 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다. LOG → 패킷을 syslog에 기록한다.RETURN → 호출 체인 내에서 패킷 처리를 계속한다. |
연결추적
- 내부 네트워크 상 서비스 연결 상태에 따라서 그 연결을 감시하고 제한할 수 있게 해준다. 연결 추적방식은 연결 상태를
표에 저장하기 때문에, 다음과 같은 연결 상태에 따라서 연결을 허용하거나 거부할 수 있다.
NEW → 새로운 연결을 요청하는 패킷 (ex: HTTP 요청) ESTABLISHED → 기존 연결의 일부인 패킷 RELATED → 기존 연결에 속하지만 새로운 연결을 요청하는 패킷 INVALID → 연결 추적표에서 어디 연결에도 속하지 않은 패킷 |
명령어
- iptables의 명령어
-A → 새로운 규칙을 추가한다.-D → 규칙을 삭제한다.-C → 패킷을 테스트 한다.-R → 새로운 규칙으로 교체한다.-I → 새로운 규칙을 삽입한다.-L → 규칙을 출력한다.-F → chain으로 부터 규칙을 모두 삭제한다.-Z → 모든 chain의 패킷과 바이트 카운터 값을 0으로 만든다.-N → 새로운 chain을 만든다.-X → chain을 삭제한다.-P → 기본정책을 변경한다. |
기본동작
- iptables에서의 기본동작
- 패킷에 대한 동작은 위에서 부터 차례로 각 규칙에 대해 검사하고, 규칙과 일치하는 패킷에 대하여 ACCEPT , DROP 등을 수행한다. - 규칙이 일치하고 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따라 처리하고 체인에서 추가 규칙을 무시한다. - 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy)을 수행한다. - 기본 정책은 ACCEPT , DROP 으로 설정 가능하다. - 일반적으로 기본정책은 모든 패킷에 대하여 DROP을 설정하고 특별히 지정된 포트와 IP주소등에 대해 ACCEPT를 수행하게 만든다. |
- 주의사항
기본 정책 수립에 있어서 DROP 으로 설정할 경우 원격에서 SSH를 접속하여 사용중이라면, 설정하는 순간 서버와 통신이 단절 됩니다. 그러므로 처음 기본 정책을 ACCEPT로 설정하여 SSH 설정을 마친 후 다시 기본정책을 DROP으로 변경하시길 바랍니다. |
현재 룰 상태 확인
- iptables -nL 명령어를 통해 현재 등록되어있는 룰을 확인할수 있습니다.
위 그림은 iptables -nL 명령어로 통해 확인한 방화벽 룰입니다.iptables -nL –line-numbers 로 확인시 룰셋 적용순서까지 확인이 가능합니다. |
iptables 명령어 활용
- Iptables 는 기본정책이 ACCEPT 인지 DROP 인지에 따라서 설정 방법이 다릅니다.
# iptables -P INPUT ACCEPT → INPUT 체인에 들어오는 패킷을 전부 허용 상태에서의 룰 적용 - 서버로 들어오는 패킷을 전부 허용 시킨 상태에서 DROP 정책으로 하나씩 막는 방식 입니다. # iptables -P INPUT DROP → INPUT 체인에 들어오는 패킷을 전부 드랍 상태에서의 룰 적용 - 서버로 들어오는 패킷을 전부 막은 상태에서 ACCEPT 정책으로 하나씩 허용하는 방식 입니다. |
- 초기 셋팅에 아래 내용 추가
# iptables -A INPUT -i lo -j ACCEPT - 일반적으로 많은 소프트웨어들이 localhost 어댑터와 통신이 되어야 하기때문에 필요합니다. # iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT - INPUT Chain에 접속에 속하는 패킷과 기존의 접속 부분은 아니지만 연관성을 가진 패킷을 허용하는 규칙 |
- 특정 IP 접근을 차단한다.
# iptables -A INPUT -s 115.68.27.76 -j DROP → 출발 ip가 115.68.27.76인 패킷을 차단 # iptables -A INPUT -d 115.68.27.76 -j DROP → 목적지 ip가 115.68.27.76인 패킷을 차단 |
- 특정 IP 대역대의 접근을 차단한다.
# iptables -A INPUT -s 115.68.27.0/24 -j DROP → 출발 ip의 대역이 115.68.27.0/24 인 패킷을 차단 # iptables -A INPUT -d 115.68.27.0/24 -j DROP → 목적지 ip의 대역이 115.68.27.76.0/24 인 패킷을 차단 |
- 포트 범위로 허용 및 거부
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50001:50005 -j ACCEPT - 접속패킷 포트 50001 ~ 50005 번까지 허용 # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50001:50005 -j DROP - 접속패킷 포트 50001 ~ 50005 번까지 거부 |
- 특정 IP에 대한 특정 포트허용 및 거부
# iptables -A INPUT -p tcp -s 115.68.27.76 -m state --state NEW -m tcp --dport 80 -j ACCEPT - IP 115.68.27.76에 대해 접속패킷 80번 포트를 허용 # iptables -A INPUT -p tcp -s 115.68.27.0/24 -m state --state NEW -m tcp --dport 80 -j ACCEPT - IP 115.68.27 대역에 대해 접속패킷 80번 포트를 허용 # iptables -A INPUT -p tcp -s 115.68.27.76 -m state --state NEW -m tcp --dport 80 -j DROP - IP 115.68.27.76에 대해 접속패킷 80번 포트를 거부 # iptables -A INPUT -p tcp -s 115.68.27.0/24 -m state --state NEW -m tcp --dport 80 -j DROP - IP 115.68.27 대역에 대해 접속패킷 80번 포트를 거부 |
- 인터페이스 지정
# iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT → 인터페이스 eth0 로 들어오는 80포트 허용 # iptables -A INPUT -i eth0 -p tcp –dport 80 -j DROP → 인터페이스 eth0 로 들어오는 80포트 거부 |
- 룰 적용후 저장
# /etc/init.d/iptables save → iptables의 룰을 명령어로 적용시킨 후 해당 명령어로 저장합니다. - 위처럼 하는 이유는 iptables 명령어로 룰을 적용시켰을 경우 방화벽을 재시작 하거나, 서버를 재부팅 했을 경우 룰이 저장이 되지 않고 전부 날아가기 때문입니다. |
룰에대한 설명
흰색 부분은 전부 이해되셨을 거라 생각되며, 빨간 부분에 대해서 설명을 해드리겠습니다. ① 체인 RH-Firewall-1-INPUT의 최상단에 115.68.234.244의 아이피가 DROP 되어 있기 때문에 아래의 방화벽 룰 적용에 관계없이 서버에 접근할 수 없게 됩니다. ② , ③ 룰에서 2001포트가 먼저 허용되어 있고, 그뒤에 2000~2500 번 까지 드랍정책이 설정되었기 때문에 2001포트 를 제외한 2000~2500까지 모두 드랍이 되는 정책입니다. ④ 모든 패킷을 거부하는 룰이며, 해당 룰 상단에 룰을 제외한 모든 부분을 거부해 버립니다. ⑤ 바로 위에 ④ 룰이 적용되어 있기 때문에 해당 룰이 적용되지 않습니다. |
'Linux Server > etc' 카테고리의 다른 글
[기타] 리눅스서버 사이트 이전 (1) | 2018.03.02 |
---|---|
[ 기타 ] 해킹점검 (0) | 2018.03.02 |
[기타] rsync 설치 및 사용법 (0) | 2017.08.08 |
[기타] 리눅스 시간 동기화 (0) | 2017.03.09 |
[기타] tcpdump 사용방법 (0) | 2017.01.25 |