문서 보기이전 판역링크맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. {{tag>[linux firewall iptables netfilter]}} ====== iptables ====== 리눅스 커널에 내장된 netfilter라는 리눅스 커널 모듈을 통하여 실제로 필터링 동작. ==== Chain 체인 ==== 개발 정책의 방향성에 따라 구분한 그룹 * ''INPUT'': 서버로 유입되는 트래픽 구간 * ''OUTPUT'': 서버에서 나가는 트래픽 구간 * ''FORWARD'': 서버를 통과하는 트래픽 구간 ==== Table 테이블 ==== 체인을 역할별로 구분한 그룹 * **Filter Table**: 방화벽의 기본 기능인 패킷을 허용하거나 차단하는데 사용 * NAT Table: IP를 변환하는 NAT 기능을 위한 테이블 * Mangle Table: 주로 패킷 헤더의 TOS, TTL 값을 변경 * Raw Table: 연결 추적 시스템에서 처리하면 안되는 패킷 표시 * Security Table: 필수접근제어 네트워크 규칙. SELinux와 같은 보안 모듈에서 구현. filter 테이블 이후에 호출 ==== Match 매치 ==== 제어하려는 패킷의 상태 또는 정보 값의 정의. 정책에 대한 조건 ==== Target 타깃 ==== Match와 일치하는 패킷에 대한 처리 방식 * ''ACCEPT'': 패킷을 정상적으로 처리 * ''DROP'': 패킷을 폐기 * ''REJECT'': 패킷을 폐기 및 차단응답 메시지 전송 * ''LOG'': 패킷을 syslog에 기록 ===== CLI ===== <code bash> iptables -L # 조회 </code> * ''<color #c3c3c3>**iptables**</color> <color #22b14c>[<switches>...]</color>'' * ''<color #22b14c>**-L**</color>'', ''<color #22b14c>**--list**</color>'': 정책보기 * ''<color #22b14c>**-v**</color>'': : 통과하는 패킷과 바이트 수 확인 * ''<color #22b14c>**-S**</color>'', ''<color #22b14c>**--list-rules**</color>'': 실제 정책(인터페이스 포함) 보기 * ''<color #22b14c>**-F**</color>'', ''<color #22b14c>**--flush**</color>'': 정책 모두 삭제 * ''<color #22b14c>**-F**</color>'', ''<color #22b14c>**--zero**</color>'': 패킷 카운트 초기화 * ''<color #22b14c>**-Z**</color> <color #7092be>chain</color>'', ''<color #22b14c>**--append**</color> <color #7092be>chain</color>'': 정책추가 (<color #7092be>chain</color>: 정책을 추가할 체인. eg.''INPUT'', ''OUTPUT'', ...) \\ ''<color #22b14c>**-D**</color> <color #7092be>chain</color>'', ''<color #22b14c>**--delete**</color> <color #7092be>chain</color>'': 정책삭제 (<color #7092be>chain</color>: 정책을 삭제할 체인. eg.''INPUT'', ''OUTPUT'', ...) \\ ''<color #22b14c>**-R**</color> <color #7092be>chain</color>'', ''<color #22b14c>**--replace**</color> <color #7092be>chain</color>'': 정책교체 \\ ''<color #22b14c>**-C**</color> <color #7092be>chain</color>'', ''<color #22b14c>**--check**</color> <color #7092be>chain</color>'': 정책확인 (<color #7092be>chain</color>: 정책을 확인할 체인. eg.''INPUT'', ''OUTPUT'', ...) \\ ''<color #22b14c>**-I**</color> <color #7092be>chain</color> <color #7092be>line</color>'', ''<color #22b14c>**--insert**</color> <color #7092be>chain</color> <color #7092be>line</color>'': 특정 라인에 정책추가 (<color #7092be>chain</color>: 정책을 추가할 체인. eg.''INPUT'', ''OUTPUT'', ...) (<color #7092be>line</color>: 정책을 삽입할 줄번호) * ''<color #22b14c>**-i**</color> <color #7092be>interface</color>'', ''<color #22b14c>**--in-interface**</color> <color #7092be>interface</color>'': 입력 인터페이스 지정. (<color #7092be>interface</color>) \\ ''<color #22b14c>**-o**</color> <color #7092be>interface</color>'', ''<color #22b14c>**--out-interface**</color> <color #7092be>interface</color>'': 출력 인터페이스 지정. * ''<color #22b14c>**-p**</color> <color #7092be>protocol</color>'', ''<color #22b14c>**--protocol**</color> <color #7092be>protocol</color>'': 프로토콜 지정. (<color #7092be>protocol</color>: 프로토콜 명 또는 포트번호) * ''<color #22b14c>**--sport**</color> <color #7092be>port</color>'': 출발지 포트 지정(<color #7092be>port</color>: 포트번호) \\ ''<color #22b14c>**--dport**</color> <color #7092be>port</color>'': 목적지 포트 지정 * ''<color #22b14c>**-s**</color> <color #7092be>ip</color>'', ''<color #22b14c>**--source**</color> <color #7092be>ip</color>'': 출발지 IP 지정(<color #7092be>source</color>: IP. ''127.0.0.1'', ''127.0.0.1/24'' ) \\ ''<color #22b14c>**-d**</color> <color #7092be>ip</color>'', ''<color #22b14c>**--destination**</color> <color #7092be>ip</color>'': 목적지 IP 지정 * ''<color #22b14c>**--state**</color> <color #7092be>state</color>'': 연결 상태와 매치(<color #7092be>state</color>: 연결 상태) * ''<color #22b14c>**--string**</color>'': 애플리케이션 계층 데이터 바이트 순서와 매치 * ''<color #22b14c>**--comment**</color> <color #7092be>comment</color>'': 커널 메모리 규칙과 연계되는 최대 256바이트 주석(<color #7092be>comment</color>: 주석) * ''<color #22b14c>**-y**</color>'', ''<color #22b14c>**--syn**</color>'': SYN 패킷 불허 * ''<color #22b14c>**-f**</color>'', ''<color #22b14c>**--fragment**</color>'': 두 번째 이후의 조각 규칙 명시 * ''<color #22b14c>**-t**</color> <color #7092be>table</color>'', ''<color #22b14c>**--table**</color> <color #7092be>table</color>'': 테이블 지정(<color #7092be>table</color>: 처리될 테이블) * ''<color #22b14c>**-m**</color> <color #7092be>module</color>'', ''<color #22b14c>**--module**</color> <color #7092be>module</color>'': 특정 모듈과의 매치 * ''iprange'': ip 범위 지정 * ''<color #22b14c>**--src-range**</color> <color #7092be>iprange</color>'': 출발지 IP 지정(<color #7092be>iprange</color>: IP. ''127.0.0.1-127.0.0.2'' ) \\ ''<color #22b14c>**--dst-range**</color> <color #7092be>iprange</color>'': 목적지 IP 지정 * ''multiport'': 포트 범위 지정 * ''<color #22b14c>**--sports**</color> <color #7092be>ports</color>'': 출발지 포트 지정(<color #7092be>ports</color>: 포트범위. ''start:end'', ''1,2,3'') \\ ''<color #22b14c>**--dports**</color> <color #7092be>ports</color>'': 목적지 포트 지정 * ''<color #22b14c>**-j**</color> <color #7092be>target</color>'', ''<color #22b14c>**--jump**</color> <color #7092be>target</color>'': 타깃 지정(<color #7092be>target</color>: ''ACCEPT'', ''DROP'', ''REJECT'', ''LOG'') * ''ACCEPT'' * ''DROP'' * ''REJECT'' * ''LOG'': 로그 기록 * ''<color #22b14c>**--log-level**</color> <color #7092be>level</color>'': 로깅 수준 설정(<color #7092be>level</color>: 로깅 레벨) * ''<color #22b14c>**--log-prefix**</color> '<color #7092be>prefix</color>' '': 로깅시 접두어 설정(<color #7092be>prefix</color>: 로깅시 접두어 설정) * ''<color #22b14c>**-P**</color> <color #7092be>chain</color> <color #7092be>target</color>'', ''<color #22b14c>**--policy**</color> <color #7092be>chain</color> <color #7092be>target</color>'' : 기본 정책 변경 * ''<color #22b14c>**-N**</color> <color #7092be>chain</color>'', ''<color #22b14c>**--new**</color> <color #7092be>chain</color>'' : 새로운 체인 추가 * ''<color #22b14c>**-X**</color> <color #7092be>chain</color>'', ''<color #22b14c>**--delete-chain**</color> <color #7092be>chain</color>'' : 체인 삭제 * ''<color #c3c3c3>**iptables**</color> <color #22b14c>**-A**</color> <color #7092be>INPUT</color> <color #22b14c>**-p**</color> <color #7092be>tcp</color> <color #22b14c>**--dport**</color> <color #7092be>80</color> <color #22b14c>**-j**</color> <color #7092be>ACCEPT</color>'': HTTP 정책 추가 * ''<color #c3c3c3>**iptables**</color> <color #22b14c>**-D**</color> <color #7092be>INPUT</color> <color #22b14c>**-p**</color> <color #7092be>tcp</color> <color #22b14c>**--dport**</color> <color #7092be>80</color> <color #22b14c>**-j**</color> <color #7092be>ACCEPT</color>'': HTTP 정책 삭제 * ''<color #c3c3c3>**iptables**</color> <color #22b14c>**-C**</color> <color #7092be>INPUT</color> <color #22b14c>**-p**</color> <color #7092be>tcp</color> <color #22b14c>**--dport**</color> <color #7092be>80</color> <color #22b14c>**-j**</color> <color #7092be>ACCEPT</color>'': HTTP 정책 확인 * ''<color #c3c3c3>**iptables**</color> <color #22b14c>**-I**</color> <color #7092be>INPUT</color> <color #7092be>5</color> <color #22b14c>**-p**</color> <color #7092be>tcp</color> <color #22b14c>**--dport**</color> <color #7092be>80</color> <color #22b14c>**-j**</color> <color #7092be>ACCEPT</color>'': HTTP 정책을 5번째 줄에 추가 ==== 결과화면 ==== ++++ Example | <code text> Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere CNI-FORWARD all -- anywhere anywhere /* CNI firewall plugin rules */ Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain CNI-ADMIN (1 references) target prot opt source destination Chain CNI-FORWARD (1 references) target prot opt source destination CNI-ADMIN all -- anywhere anywhere /* CNI firewall plugin admin overrides */ ACCEPT all -- anywhere 172.16.16.12 ctstate RELATED,ESTABLISHED ACCEPT all -- 172.16.16.12 anywhere Chain DOCKER (1 references) target prot opt source destination Chain DOCKER-ISOLATION-STAGE-1 (1 references) target prot opt source destination DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere RETURN all -- anywhere anywhere Chain DOCKER-ISOLATION-STAGE-2 (1 references) target prot opt source destination DROP all -- anywhere anywhere RETURN all -- anywhere anywhere Chain DOCKER-USER (1 references) target prot opt source destination RETURN all -- anywhere anywhere </code> ++++ * ''<color #ff7f27>**ACCEPT**</color>'': 허용 정책 * ''<color #ff7f27>**DROP**</color>'' * ''<color #ff7f27>**REJECT**</color>'': 패킷 차단 이유를 출발지에 전달 * ''<color #7092be>**state** {state}</color>'' * ''NEW'': 신규 세션 * ''RELATED'': 연계를 위하여 연결(eg. FTP) * ''ESTABLISHED'' * ''<color #7092be>**tcp**</color>'' * ''<color #7092be>**dpt:**{service}</color>'' : 목적지 서비스명 지정 * ''<color #7092be>**reject-with**</color>'': REJECT 시 사유 추가 * ''icmp-host-prohibited'' ===== Installation ===== ++++ yum (iptables-services) | <konsole root> yum install iptables-services </konsole> ++++ ===== files ===== * [[linux:file:etc:sysconfig:iptables|/etc/systconfig/iptables]]: 영구 정책 관리 * [[linux:file:var:log:message]]: 방화벽 로그 /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/linux/cli/iptables.txt 마지막으로 수정됨: 2023/12/30 03:08저자 writer