- 기본 동작
패킷에 대한 동작은 위에서부터 차례로 각 규칙에 대해 검사하고, 그 규칙과 일치하는 패킷에 대하여 타겟에 지정한 ACCEPT, DROP등을 수행합니다. 규칙이 일치하고 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따리 처리하고 체인에서 추가 규칙을 무시합니다. 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy)이 수행됩니다. 기본 정책은 policy ACCEPT, policy DROP 으로 설정할 수 있습니다. 일반적으로 기본정책은 모든 패킷에 대해 DROP을 설정하고 특별히 지정된 포트와 IP주소등에 대해 ACCEPT를 수행하게 만듭니다.
- iptables 설치
1) 설치
# rpm -qa | grep iptables
iptables-1.4.7-9.el6.x86_64 iptables-ipv6-1.4.7-9.el6.x86_64 (ipv6용) # yum -y install iptables (설치) |
2) 설치 상태 확인
# chkconfig –list
netconsole 0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제 network 0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제 |
3) 서비스 시작프로그램 등록 및 시작
# chkconfig iptables on (시작프로그램 등록)
# service iptables start (서비스 시작) |
- iptables 설정 (CentOS 6.4 기준)
1) 기본 설정
기본 정책 변경
규칙에 명시되지 않은 패킷에 대한 처리를 어떻게 할 것 인지에 대한 기본정책을 수립합니다.
# iptables -P INPUT REJECT // INPUT 체인에 대한 기본 정책을 REJECT로 변경
# iptables -P INPUT ACCEPT // OUTPUT 체인에 대한 기본정책을 ACCEPT로 변경 # iptables -P FORWAD DROP // FORWAD 체인에 대한 기본정책을 DROP으로 변경 |
체인에 정의된 모든 규칙 삭제
# iptables -F
# iptables -F INPUT // INPUT 체인의 모든 규칙 삭제 # iptables -F OUTPUT // OUTPUT 체인의 모든 규칙 삭제 # iptables -F FORWAD // FORWAD 체인의 모든 규칙 삭제 |
iptables 설정 변경 값 저장 및 서비스 재시작
[저장]
# service iptables save [재시작] # service iptables stop # service iptables start |
- INPUT 체인
localhost 인터페이스에 들어오는 모든 패킷을 허용하는 규칙 생성합니다. 서버의 서비스를 위해 서버의 S/W와 localhost 어댑터와의 통신은 모두 허용하는 것이 일반적인 설정입니다.
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT # iptables -L ( INPUT 체인에 규칙이 생성된 것이 확인됨 ) Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all — anywhere anywhere |
INPUT 체인
state 모듈과 매치되는 연결상태가 ESTABLISHED, RELATED인 패킷에 대해 허용 규칙 생성합니다. INPUT 체인 접속에 속하는 패킷 (응답 패킷을 가진 것)과 기존의 접속은 아니지만 연관성을 가진 패킷 ( ICMP 에러나 ftp데이터 접속을 형성하는 패킷)을 허용하는 규칙입니다.
# iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all — anywhere anywhere ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED |
2) 포트별 규칙 생성 및 삭제
기본명령 | 기능 | 체인 | 출발지 IP | 목적지 IP | 프토토콜 | 포트 | 매칭 | 동작 |
iptables | -A (추가) | INPUT | -s | -d | -p | –dport | -j | ACCEPT |
-D (삭제) | OUTPUT | tcp | 0~65535 | DROP | ||||
-I (삽입) | FORWAD | udp | REJECT | |||||
icmp |
- 규칙의 생성의 예시
iptables -A INPUT -p tcp –dport 80 -j ACCEPT |
외부에서 모든 목적지의 tcp/80 포트로의 접근을 허용합니다.
iptables -A INPUT -d 192.168.10.10 -p tcp –dport 22 -j DROP |
외부 모든 출발지에서 내부 192.168.10.10 목적지 서버의 tcp/80 포트로의 접근을 차단합니다.
iptables -A INPUT -s 222.111.222.111 -d 192.168.10.10 -p tcp –dport 53 -j ACCEPT |
222.111.222.111 출발지 에서 내부 192.168.10.10 목적지 서버의 tcp/53번 포트로의 접근을 허용합니다.
iptables -A OUTPUT -s 192.168.10.10 -d 222.222.222.222 -p tcp –dport 80 -j ACCEPT |
내부IP 192.168.10.10에서 222.222.222.222 목적지 IP로 tcp/80번 포트로의 접근을 허용합니다.
- 규칙의 삽입
일반적으로 방화벽의 규칙은 위에서 아래의 순서로 적용되기 때문에 순서가 매우 중요하며, 실제로 정책 추가 만큼 삽입도 자주 이용되는 생성 방식입니다.
iptables -I INPUT 1 -s 111.111.111.111 -p tcp –dport 2000 -j ACCEPT |
INPUT 체인의 1번째 위치에 출발지 111.111.111.111에서 내부 모든 목적지의 tcp/2000를 오픈하는 규칙입니다.
- 규칙의 삭제
# iptables -D INPUT 4 |
4번째 라인의 규칙을 삭제합니다.
# iptables -D INPUT -p –dport 443 -j ACCEPT |
INPUT 체인에 내부 모든 서버의 tcp/443을 허용한 정책을 삭제합니다.
- iptables 출력
# iptables -L // 기본 출력
# iptables -nL // 상세한 네트워크 정보까지 모두 출력 # iptables -nL –line-numbers // 룰셋의 적용 순서 까지 확인 # iptables -L -v // 적용된 룰셋을 통한 인입 패킷 및 bytes 출력 |