iptables
패킷에 대한 동작은 위에서부터 차례로 각 규칭에 대해 검사하고 그 규칙과 일치하는 패킷에 대하여 타겟에 지정한 ACCEPT, DROP 등을 수행한다.
규칙이 일치하고 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따라 처리하고 체인에서 추가 규칙을 무시한다. 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy)이 수행된다.
기본 정책은 policy ACCEPT, policy DROP 으로 설정할 수 있다.
일반적으로 기본 정책은 모든 패킷에 대해 DROP 설정하고 특별히 지정된 포트와 IP 주소 등에 대해 ACCEPT 를 수행하게 만든다.
iptables 설정
1) 기본 설정
규칙에 명시되지 않은 패킷에 대한 처리를 어떻게 할 것 인지에 대한 기본 정책을 수립
$ iptables -P INPUT REJECT // INPUT 체인에 대한 기본 정책을 REJECT로 변경
$ iptables -P INPUT ACCEPT // OUTPUT 체인에 대한 기본정책을 ACCEPT로 변경
$ iptables -P FORWAD DROP // FORWAD 체인에 대한 기본정책을 DROP으로 변경
chain에 정의된 모든 규칙 삭제
$ iptables -F
$ iptables -F INPUT // INPUT 체인의 모든 규칙 삭제
$ iptables -F OUTPUT // OUTPUT 체인의 모든 규칙 삭제
$ iptables -F FORWARD // FORWARD 체인의 모든 규칙 삭제
iptables 설정 변경 값 저장 및 서비스 재시작
[저장]
$ service iptables save
[재시작]
$ service iptables stop
$ service iptables start
INPUT 체인
localhost 인터페이스에 들어오는 모든 패킷을 허용하는 규칙을 생성
서버의 서비스를 위해 서버의 sw와 localhost 어댑터와의 통신은 모두 허용하는 것이 일반적인 설정
$ iptables -A INPUT -i lo -j ACCEPT
#state 모듈과 매치되는 연결 상태가 ESTABLISHED, RELATED 인 패킷에 대해 허용 규칙 생성한다.
# INPUT 체인 접속에 속하는 패킷(응답 패킷을 가진것)과 기존의 접속은 아니지만 연관성을 가진 패킷(ICMP 에러나 FTP 데이터 접속을 형성하는 패킷)을 허용하는 규칙
$ iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
2) 포트별 규칙 생성 및 삭제
기본명칭 | 기능 | 체인 | 출발지 IP | 목적지 IP | 프로토콜 | 포트 | 매칭 | 동작 |
iptables | -A (추가) | INPUT | -s | -d | -p | -dport | -j | ACCEPT |
-D (삭제) | OUTPUT | tcp udp icmp |
0 ~ 65535 | DROP | ||||
-I (삽입) | FORWARD | REJECT |
1. 규칙 생성 예시
# 외부에서 모든 목적지의 tcp/80 포트로의 접근을 허용
$ iptables -A INPUT -p tcp –dport 80 -j ACCEPT
# 외부 모든 출발지에서 내부 192.168.10.10 목적지 서버의 tcp/80 포트로의 접근을 차단
$ iptables -A INPUT -d 192.168.10.10 -p tcp –dport 22 -j DROP
# 222.111.222.111 출발지 에서 내부 192.168.10.10 목적지 서버의 tcp/53번 포트로의 접근을 허용
$ iptables -A INPUT -s 222.111.222.111 -d 192.168.10.10 -p tcp –dport 53 -j ACCEPT
# 내부IP 192.168.10.10에서 222.222.222.222 목적지 IP로 tcp/80번 포트로의 접근을 허용
$ iptables -A OUTPUT -s 192.168.10.10 -d 222.222.222.222 -p tcp –dport 80 -j ACCEPT
2. insert rule
# INPUT 체인의 1번째 위치에 출발지 111.111.111.111에서 내부 모든 목적지의 tcp/2000를 오픈
$ iptables -I INPUT 1 -s 111.111.111.111 -p tcp –dport 2000 -j ACCEPT
3. drop rule
# 4번째 라인의 규칙을 삭제
$ iptables -D INPUT 4
4. print rule
# iptables -L // 기본 출력
# iptables -nL // 상세한 네트워크 정보까지 모두 출력
# iptables -nL –line-numbers // 룰셋의 적용 순서 까지 확인
# iptables -L -v // 적용된 룰셋을 통한 인입 패킷 및 bytes 출력
5. edit rule
$ vi /etc/sysconfig/iptables
$ service iptables restart