명령어

리눅스 방화벽 상태 확인 명령어로 실행 중인지 파악하기

리눅스 시스템에서 방화벽이 구동 중인지 확인하려면 몇가지 명령어를 통해 서비스 실행 여부를 확인해야 합니다.

리눅스 방화벽 상태 확인 방법

먼저 방화벽 서비스 구동 여부는 service 또는 systemctl 명령어를 사용하여 확인할 수 있습니다. systemctl(systemd)최신 리눅스에서만 지원하기 때문에 운영체제에 따라 올바른 명령어를 사용해야 합니다.

iptables

주의: 최신 리눅스에서는 iptables가 아닌 firewalld 를 사용하는 경우가 있습니다. 하단의 명령어로 iptables.service unit not found 에러가 발생한다면 건너뛰고 firewalld 서비스를 확인합니다.

# service iptables status
또는
# systemctl status iptables

출력된 결과에서 Active의 값에 따라 구동 여부를 확인할 수 있습니다.

  • 실행 중인 경우
    Active:  active (exited)
  • 실행 중이지 않은 경우
    Active: inactive (dead)

ufw (Ubuntu에서만 해당됨)

ufw의 경우 두 가지 명령어가 있습니다.

# ufw status

이 명령어를 사용하면 간단하게 실행 여부를 확인할 수 있습니다.

  • 실행 중인 경우
    Status: active
  • 실행 중이지 않은 경우
    Status: inactive

또 다른 명령어는 위와 같습니다.

# service ufw status
또는
# systemctl status ufw

출력된 결과에서 Active의 값에 따라 구동 여부를 확인할 수 있습니다.

  • 실행 중인 경우
    Active:  active (exited)
  • 실행 중이지 않은 경우
    Active: inactive (dead)

firewalld

firewalld는 최신 리눅스에서 기본으로 구성되는 방화벽 소프트웨어입니다. firewalld가 설치되어 있다면 iptables가 비활성화 되어있을 수 있습니다.

마찬가지로 두 가지 방법이 있습니다.

# firewall-cmd --state

이 명령어를 사용하면 간단하게 실행 여부를 확인할 수 있습니다.

  • 실행 중인 경우
    not running
  • 실행 중이지 않은 경우
    running

servicesystemctl 명령어로도 확인이 가능합니다.

# service firewalld status
또는
# systemctl status firewalld

출력된 결과에서 Active의 값에 따라 구동 여부를 확인할 수 있습니다.

  • 실행 중인 경우
    Active:  active (exited)
  • 실행 중이지 않은 경우
    Active: inactive (dead)

리눅스 방화벽 규칙 확인 방법


이제 실행 중인 방화벽에서 어떠한 규칙이 사용되고 있는지 확인해보도록 하겠습니다. root 권한을 사용해야 될 수도 있습니다.

iptables로 확인

# iptables -L [chain [rulnum]]

대략적인 결과는 아래와 같습니다.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere             ctstate INVALID
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
FORWARD_direct  all  --  anywhere             anywhere            
FORWARD_IN_ZONES_SOURCE  all  --  anywhere             anywhere            
FORWARD_IN_ZONES  all  --  anywhere             anywhere            
FORWARD_OUT_ZONES_SOURCE  all  --  anywhere             anywhere            
FORWARD_OUT_ZONES  all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere             ctstate INVALID
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
OUTPUT_direct  all  --  anywhere             anywhere            

Chain FORWARD_IN_ZONES (1 references)
target     prot opt source               destination         
FWDI_public  all  --  anywhere             anywhere            [goto] 
FWDI_public  all  --  anywhere             anywhere            [goto] 

... (생략)

전체 규칙 리스트 -L 옵션만 붙이면 되지만, 결과가 많아지기 때문에 특정 체인(INPUT, OUTPUT, FORWARD 등)의 값을 입력하거나 grep 을 사용하여 원하는 프로토콜 이름으로만 검색해볼 수 있습니다.

# iptables -L INPUT
또는
# iptables -L | grep ssh

ufw로 확인

ufw는 간단한 명령어로 확인이 가능합니다. 위에서 입력했던 ufw status 명령어로 현재 열려있는 포트 확인이 바로 가능합니다. 내용이 없을 경우 규칙이 설정되지 않았다는 의미입니다.

root@myServer:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
177/udp                    ALLOW       Anywhere                  
6000:6010/tcp              ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
177/tcp                    ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)             
177/udp (v6)               ALLOW       Anywhere (v6)             
6000:6010/tcp (v6)         ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
177/tcp (v6)               ALLOW       Anywhere (v6)

firewalld로 확인

firewalldfirewall-cmd 명령어를 사용하여 규칙을 추가하거나 확인할 수 있습니다.

firewalld는 다양한 zone을 가지고 있습니다. 각 zone에 대한 규칙을 지정할 수 있고 일반적으로 public 으로 zone이 기본 지정되어 있습니다. 아래 명령어로 확인이 가능합니다.

# firewall-cmd --get-default-zone
public

public zone에 대한 방화벽 규칙을 확인하려면 아래 명령어를 사용합니다. 먼저 알려진 서비스로 규칙을 추가하였다면 –list-services 옵션을 붙여 확인할 수 있습니다.

# firewall-cmd --zone=public --list-services 
ssh dhcpv6-client smtp

방화벽 규칙을 추가할 때 알려진 서비스가 아닌 임의 포트 규칙을 사용함으로서 특정 포트를 추가했다면, 아래 명령어로 허용된 포트를 확인할 수 있습니다.

public zone에 대해 허용되고 있는 포트를 확인하려면 –list-ports 옵션을 붙여서 사용할 수 있습니다. –zone 옵션을 붙이지 않으면 모든 zone에 대한 정책을 보여줍니다.

# firewall-cmd --zone=public --list-ports
22/tcp 80/tcp 3360/tcp 21/tcp
JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

1개월 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

7개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

9개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

9개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

9개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

9개월 ago