리눅스에서 네트워크 트래픽을 관리하는 강력한 도구로 방화벽 설정을 통해 패킷을 필터링하고 라우팅 규칙을 제어할 수 있다.
iptables의 체인은 외부에서 리눅스 시스템으로 유입되는 패킷과 리눅스 내부에서 외부로 전송되는 패킷에 대해서 접근 제어를 설정할 수 있다.
즉, 네트워크 보안을 강화하고, 서버나 클라이언트의 접근을 제어한다.
iptables [-t table] command(체인) [match][target\jump]
- I(--insert): 새로운 규칙을 Rule 맨 위 줄에 추가
- A(--append): 새로운 규칙을 Rule 맨 아래 줄에 추가
- N(--new-chain): 새로운 체인 생성
- X(--delete-chain): 체인 제거
- P(--policy): 체인 기본정책 변경
- L(--list): 체인의 규칙 상태 보기
- F(--flush): 체인 내의 모든 규칙 제거(방화벽 초기화)
- Z(--zero): 체인 내의 모든 규칙의 패킷과 바이트의 카운트를 0으로 초기화
- D(--delete): 규칙을 삭제
- R(--replace): 새로운 규칙으로 대체
- I(--insert): 체인의 가장 처음에 규칙을 추가
- E(--rename-chain): 체인의 이름을 변경
INPUT : 리눅스로 들어오는 패킷(입력 패킷)을 처리하는 체인
OUTPUT : 외부로 나가는 패킷(출력 패킷)을 처리하는 체인
FORWARD : 자신(시스템)을 통과해 다른 네트워크로 전달되는 패킷을 처리
시스템이 라우터나 게이트웨이처럼 동작할 때, 들어오는 패킷을 다른 네트워크 인터페이스로 전달하는 트래픽을 필터링하는 체인
iptables -A OUTPUT -o lo -j DROP
- -A : 맨 아래 줄에 규칙을 추가한다
- OUTPUT : 외부로 나가는 패킷에 관련된 체인
- -o lo : loopback 주소에 관련된 내용
(여기서lo는 리눅스에서 네트워크 인터페이스 중 Loopback 주소로 자기 자신의 주소로 사용되는 127.0.0.1의 주소가 할당되어 있다.)- -j DROP : 트래픽 차단
즉, loopback 인터페이스에서 출력되는 것을 모두 거부하도록 되어 ping 명령어를 통해 패킷을 보내면 모두 차단된다.
ìptables -L
위의 명령어는 iptables에 현재 설정된 기본 정책을 확인할 수 있다.
iptables -P INPUT DROP
들어오는 모든 트래픽을 기본적으로 차단하는 규칙을 설정(-P이므로 체인의 기본 정책을 바꾸는 설정이다)
iptables -D INPUT -P tcp --dport 22 -j ACCEPT
SSH 포트가 22번 포트이므로 SSH에 대해 들어오는 TCP 연결을 모두 허용한다.
iptables -D INPUT -P tcp --dport 22 -j ACCEPT
SSH에 대해 들어오는 TCP 연결을 허용한 체인을 삭제한다.
iptables -A FORWARD -s 192.168.1.0/24 -j DROP
내부 네트워크 192.168.1.0/24에서 외부로 나가는 트래픽을 차단한다.
iptables -F
iptables 규칙 초기화 및 현재 규칙 모두 삭제