"Iptables"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
잔글 (→관리자 가이드) |
잔글 |
||
(같은 사용자의 중간 판 7개는 보이지 않습니다) | |||
35번째 줄: | 35번째 줄: | ||
:*기동 종료 : service iptables start, stop, restart | :*기동 종료 : service iptables start, stop, restart | ||
− | ==사용자 가이드== | + | == 사용자 가이드 == |
+ | <pre>iptables -L | ||
+ | iptables --append INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump ACCEPT | ||
+ | iptables --append INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump REJECT | ||
+ | |||
+ | iptables --delete INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump ACCEPT | ||
+ | iptables --delete INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump REJECT</pre> | ||
+ | 참고 문헌 | ||
+ | |||
+ | *http://yyman.tistory.com/entry/Linux-43%EA%B0%95-%EB%B0%A9%ED%99%94%EB%B2%BD-IPv4-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-%EA%B7%9C%EC%B9%99IPtables | ||
+ | |||
+ | |||
+ | |||
*방화벽 설정 명령어 | *방화벽 설정 명령어 | ||
+ | |||
setup | setup | ||
system-config-securitylevel | system-config-securitylevel | ||
*iptables 정책 | *iptables 정책 | ||
+ | |||
:*설정된 정책은 위에서부터 차례로 적용이 되기 때문에 순서에 주의 하여야 한다. | :*설정된 정책은 위에서부터 차례로 적용이 되기 때문에 순서에 주의 하여야 한다. | ||
− | Chain INPUT | + | |
− | Chain FORWARD : 서버에서 포워딩 하는 정책 | + | Chain INPUT : 서버로 들어오는 정책 |
− | Chain OUTPUT | + | Chain FORWARD : 서버에서 포워딩 하는 정책 |
− | Chain RH-Firewall-1-INPUT : 방화벽 설정이 적용되는 정책 | + | Chain OUTPUT : 서버에서 나가는 정책 |
+ | Chain RH-Firewall-1-INPUT : 방화벽 설정이 적용되는 정책 | ||
*iptables 명령 | *iptables 명령 | ||
+ | |||
iptables -L #--- 설정된 정책 확인 | iptables -L #--- 설정된 정책 확인 | ||
#--- 정책 추가(ACCEPT), 차단(DROP) | #--- 정책 추가(ACCEPT), 차단(DROP) | ||
54번째 줄: | 70번째 줄: | ||
:*특정 IP의 서버 접근 차단 방법 | :*특정 IP의 서버 접근 차단 방법 | ||
+ | |||
iptables -A INPUT -s 61.247.209.81 -j DROP | iptables -A INPUT -s 61.247.209.81 -j DROP | ||
− | iptables -A INPUT -s 61.247.209.0/24 -j DROP | + | iptables -A INPUT -s 61.247.209.0/24 -j DROP<font face="sans-serif, Arial, Verdana, Trebuchet MS"><span style="white-space: normal;"> |
+ | |||
+ | </span></font> | ||
+ | |||
+ | == 관리자 가이드 == | ||
+ | |||
+ | === 규칙 설정 === | ||
+ | |||
+ | SNAT (Source NAT) : 내부에서 외부 접속시 Source를 Private IP를 Public IP로 변환<br/>MASQUERADE : 게이트웨이 장치가 패킷의 출발지 IP주소를 사설IP 주소에서 자신에게 할당된 공인IP 주소로 바꿔서 인터넷으로 보내는 과정 | ||
+ | |||
+ | DNAT (Destination NAT) : 외부에서 내부 접속시 Destination을 Public IP에서 Private IP로 변환 | ||
+ | |||
+ | *tables (-t ~) : 특정한 정책에 따라 Chain을 모아 놓은 것 | ||
+ | **filter : 허가된 접근을 허용하고 허가되지 않은 접근을 차단 | ||
+ | **nat : Packet의 주소 변환 규칙을 정의 | ||
+ | ***PREROUTING | ||
+ | ***POSTROUTING | ||
+ | **mangle | ||
+ | **raw | ||
+ | |||
+ | *chain (사슬) : 제어 규칙을 정의하는 기본 단위 | ||
+ | |||
+ | :*INPUT : Host로 들어오는 패킷 | ||
+ | :*OUTPUT : Host에서 나가는 패킷 | ||
+ | :*FORWARD : Host를 지나가는 패킷 | ||
− | + | *match : 패킷을 처리할 때 만족해야 하는 조건 | |
− | * | ||
− | * | + | :*--source (-s) : 출발지 IP |
− | :* | + | :*--sport : 출발지 Port |
− | :* | + | :*--destination (-d) : 목적지 IP |
− | :* | + | :*--dport : 목적지 Port |
+ | :*--protocol (-p) : 프로토콜 (tcp, udp) | ||
+ | :*--in-interface (-i) : 입력 인터페이스 (eth0, eth1) | ||
+ | :*--out-interface (-o) : 출력 인터페이스 (eth0, eth1) | ||
+ | :*--state : 연결 상태 (NEW, ESTABLISHED, RELATED, INVALID) | ||
+ | :*--string : 애플리케이션 계층의 데이터 바이트 순서와 매핑 | ||
+ | :*--comment : 주석 (최대 256 바이트) | ||
+ | :*--syn (-y) : SYN 패킷을 허용하지 않음 | ||
+ | :*--fragment (-f) : 두번째 조각부터 적용하는 규칙 | ||
+ | :*--table (-t) : 처리할 테이블 | ||
+ | :*--jump (-j) : 패킷 처리 방식 정의 (ACCEPT, DROP, REJECT, LOG, RETURN, MASQUERADE) | ||
+ | :*--match (-m) : 특정 모듈과 매핑 (state, tcp, multiport) | ||
− | * | + | *target : ACCEPT (허용), DROP (삭제), REJECT (거부), LOG (syslog 기록), RETURN (패킷 처리 계속) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | *Connection Tracking : 연결 추적 |
− | |||
:*NEW (새 연결 요청), ESTABLISHED (기존 연결), RELATED (기존 연결내 새 연결), INVALID | :*NEW (새 연결 요청), ESTABLISHED (기존 연결), RELATED (기존 연결내 새 연결), INVALID | ||
*command | *command | ||
− | :*--append (-A) : 규칙 추가 | + | |
− | :*--delete (-D) | + | :*--append (-A) : 규칙 추가 |
− | :*--check (-C) | + | :*--delete (-D) : 규칙 삭제 |
− | :*--replace (-R) | + | :*--check (-C) : 패킷 테스트 |
− | :*--insert (-I) | + | :*--replace (-R) : 새로운 규칙으로 교체 |
− | :*--list (-L) | + | :*--insert (-I) : 규칙 삽입 |
− | :*--flush (-F) | + | :*--list (-L) : 규칙 조회 |
− | :*--zero (-Z) | + | :*--flush (-F) : chain의 모든 규칙 삭제 |
− | :*--new (-N) | + | :*--zero (-Z) : 패킷과 바이트 카운트 값을 0으로 초기화 |
− | :*--delete-chain (-X) : chain 삭제 | + | :*--new (-N) : 새로운 chain 생성 |
− | :*--policy (-P) | + | :*--delete-chain (-X) : chain 삭제 |
+ | :*--policy (-P) : 기본 정책 변경 | ||
+ | |||
+ | iptables -t nat -L #--- nat 테이블에 정의되어 있는 규칙을 조회 | ||
+ | iptables -t -A POSTROUTING -o eth0 -j MASQUERADE | ||
+ | iptables -P INPUT DROP #--- INPUT 기본 정책을 DROP으로 변경 | ||
+ | iptables -A INPUT -i eth1 -j ACCEPT #--- INPUT에 규칙 추가 | ||
iptables -L | iptables -L | ||
iptables -nL | iptables -nL | ||
104번째 줄: | 145번째 줄: | ||
iptables -L -v | iptables -L -v | ||
− | |||
− | |||
− | |||
− | |||
− | *[http://webdir.tistory.com/170 CentOS : 방화벽 설정 - iptables, 2013.7] | + | === 백업과 복구 === |
+ | <pre>#--- 백업 | ||
+ | #--- /etc/sysconfig/iptables 파일에 저장 된다. | ||
+ | service iptables save | ||
+ | # iptables-save > /etc/iptables.rules</pre><pre /> | ||
+ | #--- 룰 초기화 | ||
+ | |||
+ | #--- 룰 초기화시 서버에 접속이 되지 않습니다. | ||
+ | |||
+ | iptables -F | ||
+ | |||
+ | #--- 복구 | ||
+ | |||
+ | cat /etc/sysconfig/iptables | iptables-restore | ||
+ | |||
+ | #iptables-restore /etc/iptables.rules | ||
+ | |||
+ | == 참고 문헌 == | ||
+ | |||
+ | *[[Ip6tables|Ip6tables]] | ||
+ | |||
+ | *[http://webdir.tistory.com/170 CentOS : 방화벽 설정 - iptables, 2013.7] | ||
*[http://nizistyle.tistory.com/1 리눅스 방화벽 설정 - iptables] | *[http://nizistyle.tistory.com/1 리눅스 방화벽 설정 - iptables] | ||
*[http://edgar.tistory.com/entry/iptables-%EC%84%A4%EC%A0%95 iptables 설정, 2009.2] | *[http://edgar.tistory.com/entry/iptables-%EC%84%A4%EC%A0%95 iptables 설정, 2009.2] | ||
− | + | *http://linuxstory1.tistory.com/39 | |
− | [[Category:오픈소스]] | + | [[Category:오픈소스|Category:오픈소스]]<br/>[[Category:Linux|Category:Linux]]<br/>[[Category:Network|Category:Network]] |
− | [[Category:Linux]] | ||
− | [[Category:Network]] |
2017년 2월 2일 (목) 12:40 기준 최신판
Linux IPv4 환경에서 방화벽 서비스를 제공하는 iptables를 정리한다.
- 홈페이지 : http://netfilter.org/projects/iptables/
- 다운로드 : http://netfilter.org/projects/iptables/downloads.html
- 라이센스 : GPL 2.0
- 플랫폼 : Linux
설치 가이드
- iptables 설치
- Ubuntu에 root로 로그인한다.
- sudo apt-get install iptables
- 설치 정보
- 설치 폴더 :
- 환경 폴더 :
- 데이터 폴더 :
- 기동 종료 :
- 서비스 확인 :
- 로그 정보 :
CentOS용 설치 가이드
- CentOS에 iptables 설치
- Linux는 기본적으로 iptables를 방화벽으로 사용 한다.
yum list | grep iptables yum install iptables service iptables on chkconfig iptables on chkconfig --list | grep tables
- 설치 정보
- 설치 폴더 :
- 실행 파일 : /sbin/
- 환경 파일 : /etc/sysconfig/iptables
- 기동 종료 : service iptables start, stop, restart
사용자 가이드
iptables -L iptables --append INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump ACCEPT iptables --append INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump REJECT iptables --delete INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump ACCEPT iptables --delete INPUT --source 175.115.92.0/24 --match tcp --protocol tcp --dport 22 --jump REJECT
참고 문헌
- 방화벽 설정 명령어
setup system-config-securitylevel
- iptables 정책
- 설정된 정책은 위에서부터 차례로 적용이 되기 때문에 순서에 주의 하여야 한다.
Chain INPUT : 서버로 들어오는 정책 Chain FORWARD : 서버에서 포워딩 하는 정책 Chain OUTPUT : 서버에서 나가는 정책 Chain RH-Firewall-1-INPUT : 방화벽 설정이 적용되는 정책
- iptables 명령
iptables -L #--- 설정된 정책 확인 #--- 정책 추가(ACCEPT), 차단(DROP) iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
- 특정 IP의 서버 접근 차단 방법
iptables -A INPUT -s 61.247.209.81 -j DROP
iptables -A INPUT -s 61.247.209.0/24 -j DROP
관리자 가이드
규칙 설정
SNAT (Source NAT) : 내부에서 외부 접속시 Source를 Private IP를 Public IP로 변환
MASQUERADE : 게이트웨이 장치가 패킷의 출발지 IP주소를 사설IP 주소에서 자신에게 할당된 공인IP 주소로 바꿔서 인터넷으로 보내는 과정
DNAT (Destination NAT) : 외부에서 내부 접속시 Destination을 Public IP에서 Private IP로 변환
- tables (-t ~) : 특정한 정책에 따라 Chain을 모아 놓은 것
- filter : 허가된 접근을 허용하고 허가되지 않은 접근을 차단
- nat : Packet의 주소 변환 규칙을 정의
- PREROUTING
- POSTROUTING
- mangle
- raw
- chain (사슬) : 제어 규칙을 정의하는 기본 단위
- INPUT : Host로 들어오는 패킷
- OUTPUT : Host에서 나가는 패킷
- FORWARD : Host를 지나가는 패킷
- match : 패킷을 처리할 때 만족해야 하는 조건
- --source (-s) : 출발지 IP
- --sport : 출발지 Port
- --destination (-d) : 목적지 IP
- --dport : 목적지 Port
- --protocol (-p) : 프로토콜 (tcp, udp)
- --in-interface (-i) : 입력 인터페이스 (eth0, eth1)
- --out-interface (-o) : 출력 인터페이스 (eth0, eth1)
- --state : 연결 상태 (NEW, ESTABLISHED, RELATED, INVALID)
- --string : 애플리케이션 계층의 데이터 바이트 순서와 매핑
- --comment : 주석 (최대 256 바이트)
- --syn (-y) : SYN 패킷을 허용하지 않음
- --fragment (-f) : 두번째 조각부터 적용하는 규칙
- --table (-t) : 처리할 테이블
- --jump (-j) : 패킷 처리 방식 정의 (ACCEPT, DROP, REJECT, LOG, RETURN, MASQUERADE)
- --match (-m) : 특정 모듈과 매핑 (state, tcp, multiport)
- target : ACCEPT (허용), DROP (삭제), REJECT (거부), LOG (syslog 기록), RETURN (패킷 처리 계속)
- Connection Tracking : 연결 추적
- NEW (새 연결 요청), ESTABLISHED (기존 연결), RELATED (기존 연결내 새 연결), INVALID
- command
- --append (-A) : 규칙 추가
- --delete (-D) : 규칙 삭제
- --check (-C) : 패킷 테스트
- --replace (-R) : 새로운 규칙으로 교체
- --insert (-I) : 규칙 삽입
- --list (-L) : 규칙 조회
- --flush (-F) : chain의 모든 규칙 삭제
- --zero (-Z) : 패킷과 바이트 카운트 값을 0으로 초기화
- --new (-N) : 새로운 chain 생성
- --delete-chain (-X) : chain 삭제
- --policy (-P) : 기본 정책 변경
iptables -t nat -L #--- nat 테이블에 정의되어 있는 규칙을 조회 iptables -t -A POSTROUTING -o eth0 -j MASQUERADE iptables -P INPUT DROP #--- INPUT 기본 정책을 DROP으로 변경 iptables -A INPUT -i eth1 -j ACCEPT #--- INPUT에 규칙 추가 iptables -L iptables -nL iptables -nL --line-numbers iptables -L -v
백업과 복구
#--- 백업 #--- /etc/sysconfig/iptables 파일에 저장 된다. service iptables save # iptables-save > /etc/iptables.rules
- --- 룰 초기화
- --- 룰 초기화시 서버에 접속이 되지 않습니다.
iptables -F
- --- 복구
cat /etc/sysconfig/iptables | iptables-restore
- iptables-restore /etc/iptables.rules