iptables 필터링 규칙 설정하기
이전 포스팅에서 iptables의 기본적인 읽는 방법을 설명했습니다. 이번 포스팅에서는 자주 사용되는 옵션을 포함한 iptables 명령어를 통해 패킷 필터링 규칙을 설정하는 방법을 자세히 알아보겠습니다. 주로 INPUT Chain을 기준으로 설명하겠습니다.
출발지 기준
iptables -A INPUT -s 10.10.10.10 -j DROP
- -s: 출발지를 의미합니다. 이 경우, 출발지가 10.10.10.10인 패킷을 처리합니다.
- -A INPUT: INPUT Chain에 추가하는 명령입니다.
- -j DROP: 해당 패킷을 버리겠다는 의미입니다.
이 명령어는 출발지가 10.10.10.10인 모든 패킷을 차단합니다.
목적지 기준
iptables -A INPUT -d 10.10.10.10 -j DROP
- -d: 목적지를 의미합니다. 이 경우, 목적지가 10.10.10.10인 패킷을 처리합니다.
이 명령어는 목적지가 10.10.10.10인 모든 패킷을 차단합니다.
프로토콜 기준
iptables -A INPUT -p tcp -j ACCEPT
- -p: 패킷의 프로토콜을 지정합니다. 이 경우, TCP 프로토콜을 사용하는 패킷을 처리합니다.
- -j ACCEPT: 해당 패킷을 허용하겠다는 의미입니다.
이 명령어는 INPUT Chain으로 들어오는 TCP 패킷을 허용합니다.
포트번호 기준
iptables -A INPUT --dport 80 -j DROP
- --dport: 목적지 포트를 의미합니다. 이 경우, 목적지 포트가 80인 패킷을 처리합니다.
이 명령어는 INPUT Chain으로 들어오는 목적지 포트가 80인 모든 패킷을 차단합니다.
인터페이스 지정
iptables -A INPUT -i eth0 -j DROP
- -i: 패킷이 들어오는 인터페이스를 지정합니다. 이 경우, eth0 인터페이스로 들어오는 패킷을 처리합니다.
이 명령어는 eth0 인터페이스로 들어오는 모든 패킷을 차단합니다. -o 옵션은 OUTPUT Chain에서 사용되며, INPUT Chain에서는 필요하지 않습니다.
패킷 입력 이해하기
INPUT Chain은 컴퓨터의 NIC(Network Interface Card)로 들어오는 패킷을 처리합니다. 패킷이 랜카드로 들어온다는 것은 외부에서 해당 패킷이 전송되었다는 의미입니다. 따라서 "입력"이라는 용어는 랜카드에 들어오는 패킷을 설명하는 것입니다.
- INPUT Chain에서는 -i 옵션만 사용됩니다.
- OUTPUT Chain에서는 -o 옵션만 사용됩니다.
3 핸드쉐이킹
TCP 프로토콜에서 클라이언트와 서버 간의 통신을 설정하기 위한 과정인 3 핸드쉐이킹에 대해서도 알아보겠습니다. 이 과정은 통신 준비가 되었는지 서로 확인하는 과정입니다.
- C ——— syn ———▷ S: 클라이언트가 서버에 동기화 요청을 보냅니다.
- C ◁—— syn ack —– S: 서버가 클라이언트에게 동기화 요청을 수락하는 응답을 보냅니다.
- C ——— ack ———▷ S: 클라이언트가 서버의 응답을 확인합니다.
마무리
이번 포스팅에서는 iptables를 사용한 패킷 필터링 규칙 설정 방법에 대해 자세히 설명했습니다. 이를 통해 네트워크 보안을 강화하고, 필요한 패킷만 허용할 수 있는 방법을 이해할 수 있습니다. 다음 포스팅에서는 더 복잡한 규칙을 예로 들어 추가 설명할 예정입니다.