2swan
[Linux] iptables 사용방법 ex) 특정 포트 차단 본문
iptables : 윈도우 방화벽과 같이 대부분의 리눅스에 포함되어 있는 기본적인 방화벽
firewlld 사용 중지
CentOS 경우 iptables 셋팅을 도와주는 firewalld 라는 패키지가 존재한다.
ACtive : inactive (dead)로 표시되어야 정상적으로 중지 처리된 것
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl status firewalld
기본으로 정의되는 테이블 및 체인 목록
FILTER 테이블 : 특정 패킷을 차단하냐 허용하냐를 정하는 기본 테이블. 테이블을 지정하는 옵션인 -t 옵션을 사용하지 않을 경우 기본적으로 이 테이블에 설정된다.
*FILTER 테이블의 기본 체인 목록
INPUT : 외부에서 서버쪾으로 들어오는 패킷들에 적용되는 체인
OUTPUT : 내부에서 생성된 패킷들이 외부에 나갈 때 적용되는 체인
FORWARD : INPUT ↔ OUTPUT 체인으로 이동하는 도중에 적용되는 체인
NAT 테이블 : 새로 연결되는 패킷이 발견될 때 적용됨. IP와 포트드을 NAT할 때 사용하는 테이블
NAT 테이블의 기본 체인 목록
PREROUTING : 패킷이 들어오기 바로 직전에 적용됨
INPUT : 외부에서 생성된 패킷이 라우팅 되기 직전에 적용됨
OUTPUT : 내부에서 생성된 패킷이 라우팅 되기 직전에 적용됨
POSTROUTING : 패킷이 외부로 나가기 바로 직전에 사용됨
iptables 저장하기
iptables는 재부팅할 때 초기화가 진행된다
이를 방지하기 위해 저장을 해두었다가 부팅시에 다시 불러오도록 설정 해야 한다.
해당 설정을 위해서 iptables-services 라는 패키지를 설치 해주어야 한다.
이후 저장이 필요할 때 'service iptables save' 를 입력 해주면 된다.
# yum install iptables-services -y
# systemctl enable iptables
# systemctl start iptables
# service iptables save
iptables 초기화
방화벽 정책을 잘못 설정 했을 때 초기화 하는 방법
# iptables -Z
# iptables -X
# iptables -F
옵션 설명
-Z --zero [체인[규칙숫자]]
패킷숫자 카운트나 용량 카운트등에 대한 내용을 0으로 초기화 한다. 특정 체인이나 특정 체인의 특정 규칙을 적을 수 있고 적지 않는 경우 모두 초기화
-X --delete-chain [체인]
사용자 정의 체인을 삭제함. 삭제하기 위해서는 해당 체인에 어떠한 규칙도 있어서는 안됨. 체인을 적지 않은 경우 모든 체인에 대해서 시도함.
-F --flush [체인]
선택된 체인의 모든 규칙을 날림. 만약 체인을 적지 않은 경우 모든 체인의 모든 규칙을 날림
iptables로 기본 정책 설정하기
# iptables -L
각 체인에 policy ACCEPT 표기되어 있는 부분이 기본 정책이다.
기본 정책이란 위에서 설정한 모든 정책을 지나고도 어떠한 정책에도 해당되지 않는 패킷은 어떻게 처리 할지에 대한 정책이다.
기본적으로 모두 Accept로 설정 되어 있다.
기본 정책의 경우 INPUT 체인의 맨 마지막 정책에서 REJECT all -anywhere anywhere 로 설정되어 모든 프로토콜을 사용하는 모든 출발지/도착지 주소를 가진 패킷에 대해서는 Reject로 거부 처리를 해준 모습이 보인다.
기본 정책 변경
# iptables -P INPUT DROP
# iptables -L
기본 생성된 체인에 대한 기본 정책을 정한다. ex) ACCEPT, DROP, RETURN
DROP : 허용 정책으로 허용되지 않은 패킷에 대해서 모두 DROP
ACCEPT : 비허용한 패킷외에 모두 ACCEPT
기본 정책을 DROP or REJECT로 두었을 때 반드시 설정해야 하는 정책
# iptables -A INPUT -m state --state RElATED,ESTABLISHED -j ACCEPT
# iptables -L
INPUT 체인의 기본 정책을 DROP or REJECT로 설정 했을 경우 RELATED 상태 및 ESTABLISHED 상태의 패킷은 모두 허용 해줘야 한다.
RELATED의 비슷한 용도를 가진 패킷에는 ftp 로그인 이후 FTP 파일 전송에 관련한 패킷과 같은 것들을 말한다. 각각 해당하는 패킷은 아니지만 그것과 비슷한 용도를 가진 패킷과 이미 연결 완료되어 통신중이 패킷을 의미한다.
특정 포트만 접근 허용/차단 하기
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
위와 같이 입력하면 tcp 22번 포트만 허용할 수 있다.
반대로 차단을 원한다면 ACCEPT를 DROP로 변경해주면 된다.
# iptables -A INPUT -p udp --dport 44 -j ACCEPT : UDB 44번 포트만 허용한다.
여러 포트를 한번에 허용하고자 한다? TCP 포트 22번 부터 25번까지 모두 허용
# iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT
그 외에 -s 옵션을 통해 출발지 주소를 적어주면 특정 IP 주소에서 올때 라는 조건도 걸 수 있다.
192.168.0.10 ip를 가진 대상이 TCP 22번 포트로 접근해 올 경우 허용
# iptables -A INPUT -s 192.168.0.10 -p tcp --dport 22 -j ACCEPT
# iptables -nL
192.168.0.10 IP 말고도 prefix를 지정하여 대상을 정하는 것 또한 가능
# iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
특정 IP 주소 및 대역대 허용
# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
# iptables -nL
특정 IP 차단 :
iptables -A INPUT -s 192.168.0.10 -j DROP
특정 IP 허용 :
iptables -A INPUT -s 192.168.0.10 -j ACCEPT
ip 대역 차단 (아이피/서브넷마스크) :
iptables -A INPUT -t filter -s 192.168.0.10/24 -j DROP
설정 전체 삭제 :
iptables -F
특정 포트에 대한 접속 모두 차단 :
iptables -A INPUT -p TCP --dport 8443 -j REJECT --reject-with tcp-reset
웹 접속 차단
iptables -A INPUT -s 192.168.0.10 -p tcp --dport 8443 -j DROP
특정 IP의 8443 포트 접속 차단 :
iptables -A INPUT -p TCP --dport 8443 -s 192.168.0.10 -j REJECT
192.168.0.10 서버에서 자신이 사용하는 8443 포트에 대한 접근을 차단
iptables -A INPUT -p TCP --dport 8443 -j REJECT
'Linux > CentOS' 카테고리의 다른 글
[Linux] CentOS ISO 릴리즈 버전 확인 (0) | 2025.05.08 |
---|---|
[Linux] root 계정 ssh 접근 제한 (0) | 2025.05.02 |
[Linux] 패스워드 강제로 변경 (0) | 2025.04.10 |
df 명령어 사용 시 tmpfs 숨기기 (0) | 2025.01.21 |