iptables?
리눅스 커널 방화벽이 제공하는 테이블과 이를 저장하는 체인, 규칙들을 구성할 수 있게 하는 응용 프로그램
테이블
- filter, nat, mangle, raw 네가지가 있으며, default는 filter임
체인
- PREROUTING : 패킷이 라우팅되기 이전에 거쳐가는 체인
- INPUT : 로컬에서 로컬으로 향하는 모든 패킷이 거쳐가는 체인
- FORWARD : 라우팅이후 로컬이 아닌 모든 패킷이 거쳐가는 체인
- OUTPUT : 외부로 나가는 패킷이 거쳐가는 체인
- POSTROUTING : 시스템에서 외부로 보내지기 직전에 거쳐가는 체인
액션
- A(APPEND) : 정책 추가
- I(INSERT) : 정책 삽입
- D(DELETE) : 정책 삭제
- R(REPLACE) : 정책 교체
- F(FLUSH) : 모든 정책 삭제
- P(POLICY) : 기본 정책 설정
- L(LIST) : 정책 나열
매치
- s : 출발지 (도메인, IP주소, 넷마스크 값을 이용하여 표기)
- d : 목적지
- p : 프로토콜 (tcp, udp, icmp... 대소문자 구분하지 않음)
- i : 입력 인터페이스
- o : 출력 인터페이스
- sport : 출발지 포트
- dport : 목적지 포트
- j : 매치된 패킷을 처리할 규칙 지정
타겟
- ACCEPT : 패킷을 허용
- DROP : 패킷을 버림
- REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송 (icmp-port-unreachable)
- LOG : 패킷을 syslog에 기록한다.
- SNAT --to (주소) : 소스 IP를 변환 (NAT)
- DNAT --to (주소) : 목적지 IP를 변환 (NAT)
- RETURN : 호출 체인 내에서 패킷 처리를 계속함
- REDIRECT --to (주소) / --to-port (포트번호) : 리디렉션
80 포트로 들어오는 연결을 8080포트로 리디렉션
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080