리눅스 iptables ip 필터링
- IT/리눅스(Linux)
- 2022. 12. 19.
리눅스 커널에서 IP 패킷 필터링 프레임워크인 Netfilter와 이를 이용하기 위한 커맨드인 iptables가 있습니다.
오늘은 iptables를 이용한 IP 패킷 필터링을 해보도록 하겠습니다.
기본 원리는 IP 패킷의 헤더를 참조하여 Pass/Drop/Reject 처리를 하는 기능입니다.
iptables 패키지 설치 여부 확인
# rpm -qa | grep iptables
iptables는 기본적으로 패킷의 헤더를 보고 필터링을 진행합니다.
출발지IP, 목적지IP, TCP, UDP, ICMP, 포트 등을 확인해 줍니다.
iptables 작성 방법
iptables <옵션 예)-A> <체인> <매칭 옵션> -j <타겟>
iptables -L : 규칙 목록 출력
iptables -F : 규칙 삭제, 뒤에 INPUT, OUTPUT 등을 지정하여 체인의 규칙 삭제
iptables 옵션
- -t <테이블> : 이용할 테이블을 지정한다. 기본은 filter.
- -A <체인> : 지정하는 체인에 규칙을 추가한다.
- -m <모듈> : 매칭 모듈을 지정한다. 이 옵션 다음에 모듈별 옵션을 추가할 수 있다.(확장 매칭 모듈의 예 : addtype, conntrack, connlimit, iprange, mac, multiport, state)
- -p <프로토콜> : tcp/udp/icmp/all 중 하나를 지정한다. 기본은 all.
- -d <도착지 주소> : 도착지 주소 지정
- -s <출발지 주소> : 출발지 주소 지정
- --dport <포트> : 도착지 포트 지정. -p tcp 또는 -p udp와 함께 사용한다.
- --sport <포트> : 출발지 포트 지정. -p tcp 또는 -p udp와 함께 사용한다.
- -i <인터페이스> : 패킷이 들어오는 네트워크 인터페이스를 지정한다.
- -o <인터페이스> : 패킷이 나가는 네트워크 인터페이스를 지정한다.
- -j <타깃> : ACCEPT나 DROP 등의 타깃을 지정한다.
타깃 명령어
- ACCEPT: 패킷을 허용한다.
- DROP: 패킷을 버린다(패킷이 전송된 적이 없던 것처럼)
- REJECT: 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.(icmp-port-unreachable)
- LOG: 패킷을 syslog에 기록한다.
- SNAT --to [주소]: 소스 IP를 [변환(NAT)|NAT]한다.(공인 IP 할당하여 나가게 하기)
- DNAT --to [주소]: 목적지 IP를 변환(NAT)한다.
- RETURN: 호출 체인 내에서 패킷 처리를 계속한다.
규칙을 생성하신 후 반드시 저장 및 재시작을 해주셔야 합니다.
# service iptables save
# service iptables stop
# service iptables start
iptables 규칙 생성 예시 ex)
# iptables -A INPUT -p tcp –dport 80 -j ACCEPT
들어오는 모든 tcp 80 포트의 접근을 허용
#iptables -A INPUT -s 192.168.1.1 -p tcp –dport 80 -j DROP
출발지 192.168.1.1로 들어오는 tcp 80 포트를 차단(목적지라면 -d 옵션)
# iptables -A INPUT -s 192.168.1.0/24 -j DROP
192.168.1.0 대역의 IP 차단