목차
1. 리눅스 Firewall
1-1 firewall-cmd
1-2 ZONE
1-3 ZONE - port, source
1-4 ZONE - ICMP 차단
1-5 Service
1-6 rich rule
1. 리눅스 Firewall
1-1 firewall-cmd
이전까지 구축했던 방화벽은 네트워크 방화벽으로 네트워크에 흐르는 패킷을 제어했다. 그러한 네트워크 방화벽 외에 컴퓨터마다 자신에게 들어오는 패킷을 제어하는 시스템 방화벽이 추가로 필요하다.
이때 firewall-cmd 명령을 통해 시스템 방화벽을 조작할 수 있다.
● 방화벽 실행 및 등록, 재구동
# systemctl [start|stop] firewalld.service
# systemctl [enable|disable] firewalld.service
# systemctl [is-enabled | is-active] firewalld.service
# firewall-cmd --reload : 서비스 재구동
- 방화벽은 서브로 등록되어 있으므로 데몬으로 관리된다.
- 서비스 재구동은 방화벽 관련 설정의 변경점을 즉시 적용시킨다.
- ntsysv를 점점 쓰지 않는 추세이므로 명령어 숙지가 필요하다.
● 관련 파일
- 환경 설정 파일 : /etc/firewalld/firewalld.conf
- 서비스 혹은 존 관련 파일 : /usr/lib/firewalld/services
: /usr/lib/firewalld/zones
- 환경 설정 파일을 건드릴 일은 없다.
- 각 zone에 대한 설정 내역은 /usr/lib/firewalld/zones/<zone 명>.xml(표준 서식) 파일에서 확인 가능하다.
- /usr 밑의 zone 파일들은 건드리지 않는다.
1-2 ZONE
zone은 방화벽 관련 설정을 모아놓은 일종의 정책 덩어리로, 오라클의 profile과 같다. zone을 인터페이스에 할당함으로써 활성화되며 해당 설정들이 적용된다. 존끼리 설정 충돌이 있을 수 있으므로 보통 하나의 존을 사용한다.
● 미리 제공된 zone
- block, dmz, drop, external, home, internal, public, trusted, work
- 보통 public을 이용한다.
● zone 활성화 조건
- Zone에 네트워크 인터페이스가 할당된 경우
- Zone에 소스 IP나 네트워크 범위가 할당된 경우
* 서비스나 포트가 할당된 경우 설정만 되며 활성화는 되지 않는다.
● zone 관련 옵션
# firewall -cmd [옵션]
※ 옵션
--get-zones : 목록출력
--list-all-zones : 모든 zone 내역 출력
--list-all : 활성화된 zone 내용 출력
--list-all --zone : zone 내용 출력
--get-default-zone : default 확인
--set-default-zone : default 변경. 활성화되는 존들 중 선택한다. 가장 먼저 활성화된다.
--get-active-zone : 인터페이스 별 활성화된 zone 확인
--permanent --new-zone=zone : zone 추가
--permanent --delete-zone=zone : zone 삭제
● 인터페이스 zone 할당
- 디폴트 존을 다른 존으로 교체한다.
# firewall-cmd --zone=zone --change-interface=interface
: 지정된 인터페이스의 존이 교체된다.
● zone 내용 수정
--permanent 옵션을 사용한 경우 현재 메모리에 설정을 적용시키기 위해 반드시 firewall-cmd --reload 명령이 필요하나 설정이 영구 지속된다.
--permanent 옵션을 사용하지 않은 경우 현재 메모리에 즉시 적용되나 영구적 수정이 아니므로 재부팅 시 혹은 firewall-cmd --reload 명령 시 원래 설정으로 돌아간다.
--permanent 옵션 여부 | 설정 즉시 적용 | 설정 영구 적용 |
사용 | X | O |
미사용 | O | X |
1-3 ZONE - port, source
존에 사전 정의된 서비스와 상관없는 포트나 ip를 추가/삭제하는 경우 직접 편집 명령어를 사용한다.
● 포트 추가/삭제
# firewall-cmd --permanent --zone=zone --add[remove]-port=<# of port>/<tcp|udp>
or (둘 중 하나만 적용 가능하다.)
# firewall-cmd --permanent --zone=zone --add[remove]-source=<IP> (거의 사용하지 않는다.)
- 포트번호: 8080/tcp 또는 8080-8090/tcp와 같이 번호나 범위 설정이 가능하다.
- ip와 포트 설정을 동시에 정의하는 것은 현재 불가능하다.
※ 웹 서버 방화벽 가동 초기
- 리눅스 방화벽 초기 상태는 포트 접근을 허가하지 않는다.
※ 웹 서버 방화벽 가동 이후 80번 포트 추가
- 80번 포트를 허가하여 접근을 허가한다.
- 실습 후 반드시 추가한 포트를 삭제한다.
1-4 ZONE - ICMP 차단
● ICMP block
- 리눅스 방화벽 초기 상태는 ICMP를 허용한다.
# firewall-cmd --permanent --zone=zone --add-icmp-block=<icmp type>
or
# firewall-cmd --permanent --zone=zone --remove-icmp-block=<icmp type>
- 설정 시 ICMP를 타입별로 차단한다.
# firewall-cmd --get-icmptypes
: ICMP 타입을 확인한다.
# firewall-cmd --list-icmp-blocks
: 차단된 타입을 확인한다.
※ 웹 서버 방화벽 가동 초기
※ ping 차단 및 등록 확인
- 실습 후 반드시 추가한 ICMP를 삭제한다.
1-5 Service
서비스는 방화벽의 개별 항목을 목록화해 둔 것으로 서비스를 통해 간단히 방화벽 설정 추가/삭제 등 변경이 가능하다.
서비스 자체도 생성/삭제가 가능하며 대부분 항목들은 미리 제공된다.
/usr/lib/firewalld/services/서비스명.xml 에서 서비스에 대한 설정 내용을 확인할 수 있다.
● 미리 정의된 서비스 목록 확인 및 현재 zone에 등록된 서비스 확인
# firewall-cmd --get-services
: 제공된 모든 서비스 목록 확인
# firewall-cmd --list-services [--zone=zone]
: zone에 등록된 서비스 목록 확인
● znoe에 서비스 추가/삭제
# firewall-cmd -permanent --zone=zone --add-service=<서비스명>
: zone에 서비스를 추가한다.
# firewall-cmd --permanent --zone=zone --remove-service=<서비스명>
: zone에서 서비스를 삭제한다.
※ 웹 서버 방화벽 가동 초기
- http를 통한 웹 서버 접속이 불가하다.
※ ftp, http, samba 서비스 접속이 가능하도록 수정
- cockpit과 dhcpv6-client는 필요 없는 서비스이므로 삭제한다.
- http를 통한 웹 서버 접속이 가능하다.
● 서비스 생성과 삭제
# firewall-cmd --permanent --new-service <서비스명>
: 새로운 서비스가 생성된다.
: /etc/firewalld/services/service.xml 파일이 생성된다.
- 기존의 서비스와 경로가 다르다.
# firewall-cmd --permanent --delete-service <서비스명>
: 서비스가 삭제된다.
: 시스템이 제공한 서비스는 삭제 불가하다.
● 서비스에 설정 추가
# firewall-cmd --permanent service=<서비스명> --add-port=<포트번호>/<tcp|udp>
or
# firewall-cmd --permanent service=<서비스명> --add-source-port=<포트번호>-<포트번호>/<tcp|udp>
or
# firewall-cmd --permanent service=<서비스명> --set-destination=ipv4:<ip>/<netmask>
- 보통 포트를 이용한 설정을 하며, 소스 포트 설정은 특정 서버로의 서비스를 제한하는 경우 사용된다.
- 목적지 설정은 라우터 설정이다.
● 서비스에 주석 설정
# firewall-cmd --permanent --service=<서비스명> --set-description=<주석>
or
# firewall-cmd --permanent --service=<서비스명> --set-short=<주석>
- 각각 긴 주석, 짧은 주석을 추가할 때 사용된다.
※ 오라클 서버 방화벽 가동 초기
- 오라클 서버 방화벽 가동 초기, 웹 서버에서 오라클로 접속이 불가하다.
※ 오라클 접속을 위한 서비스 생성 및 zone 등록 (오라클 서버)
- oracle 서비스 생성 및 리스너가 이용할 포트들을 추가한다. 한 번에 추가할 수 없으므로 명령어를 여러 번 입력한다.
- 웹 서버에서 오라클로 접속이 가능하다.
1-6 rich rule
리치 룰은 설정하고자 하는 방화벽 규칙이 적절히 제공되지 않을 때 직접 규칙을 적용하는 방법으로, 직관적인 설정으로 원본 주소, 목적지 주소에 따른 접근 제어, 로깅, 세밀한 액션 설정 등 다양한 규칙을 정의할 수 있다.
● rule 추가
firewall-cmd [--zone=zone] [--timeout=timeval] --add-rich-rule='rule'
- 존은 디폴트 존을 기본으로 한다.
- timeval는 s, m, h를 단위로 이용한다. 지정 시간 동안 설정이 유지된다.
: --timeout은 --permanent와 함께 사용할 수 없다.
● rule 삭제
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
● rule 확인
firewall-cmd [--zone=zone] --query-rich-rule='rule'
● rich rule의 구조
rule
family="rule family"
source
destination
service|port|protocol|icmp‐block|icmp‐type|masquerade|forward‐port|source‐port
accept|reject|drop|mark
log
audit
※ family
- IPv4 또는 IPv6로 ip 프로토콜 버전을 작성한다.
- 규칙에 sourc 나 destination을 지정하는 경우 반드시 명시적으로 지정한다.
※ source
- ip를 이용해 source를 지정한다.
: IP 주소, CIDR(Classless Inter‐Domain Routing)
: not 사용이 가능하다.
- 문법
: source [not] address="address[/mask]"
: source address="192.168.10.11"
: source address="192.168.10.0/24"
: source not address="192.168.10.99"
※ destination
- 문법
: destition [not] address="address[/mask]" |
mac="mac-address" |
ipset="ipset"
목적지를 이용한 패킷 제어는 네트워크 방화벽에서 사용하므로 여기서는 중요하지 않다.
※ port
- 단일 포트나 범위를 지정한다. tcp/udp를 지정해 주어야 한다.
- 문법
: port protocol=[tcp/udp] port=번호 혹은 범위
: port protocol=tcp port=1521
: port protocol=tcp port=1520-1600
firewall‐cmd‐‐permanent ‐‐zone=public ‐‐add‐rich‐rule='rule family="ipv4"
port protocol="tcp" port="1521" accept'
firewall‐cmd‐‐permanent ‐‐zone=public ‐‐remove‐rich‐rule='rule
family="ipv4" service name="oracle" accept'
- 두 문장 모두 오라클 접속 관련 설정이다.
- 직접 프로토콜을 지정해 설정하는 것은 좋지 않다. 서비스에 설정하여 서비스를 rule에 설정하는 것을 권장한다.
※ service
- 등록되거나 생성된 서비스를 지정한다.
- port protocol=[tcp/udp] port=## 대신 간단히 사용 가능하다.
- 문법
: service name=service
: service name="ssh"
(port protocol=tcp port=22)
※ protocol
- /etc/protocols에 사전 정의된 이름을 사용한다.
- 문법
: protocol value=<protocol>
: protocol value=igp // igrp
: protocol value=ah // Ipsec AH 헤더
※ icmp-block
icmp를 타입별로 차단할 때 사용한다.
- 문법
: icmp-block name=<icmp_type> : 지정한 타입의 icmp를 차단한다.
: icmp-block name=echo-request
: --get-icmptypes : icmp 타입을 검색한다.
rich rule로 막는 것보다 커널에서 막는 것을 권장한다.
※ log
- 방화벽 설정에 대한 접근 내용을 기록한다.
- 문법
: log [prefix=<접두어> level=<level> limit value=rate/단위]
로그에 접두어를 붙여 남긴다.
: 단위 = s(초), m(분), h(시간), d(day)
ex) 1/m : 1분에 1번만 로깅한다.
- log level
emerg: 전체 터미널에 경고 발생
alert, crit, error, warning, notice, info : 로그 정보
debug : 에러 발생 시에만 로그 발생
- log 파일
: /var/log/messages = 시스템 기본 로그가 들어간다.
: /var/log/firewalld
※ action
- 룰에 적용된 동작을 정의한다.
* accept : 연결을 허용한다.
* drop : 연결을 거부한다.
* reject : 연결을 거부한다. (로그 발생)
* mark : 패킷에 set에서 설정된 표식을 남긴다.
● rich rule - 실습
※ web 접속이 가능하도록 rich rule 추가
firewall‐cmd ‐‐permanent ‐‐zone=public ‐‐add‐rich‐rule='rule port protocol="tcp" port="80" accept'
or
firewall‐cmd ‐‐permanent ‐‐zone=public ‐‐add‐rich‐rule='rule service name="http" accept'
- 같은 동작을 하는 설정이라도 포트를 직접 설정하는 것보다 서비스명을 활용하는 것이 좋다.
※ 192.168.10.99 시스템만 ftp 접속이 가능하도록 설정
firewall‐cmd ‐‐permanent ‐‐zone=public ‐‐add‐rich‐rule='rule family="ipv4" source address="192.168.10.99" service name="ftp" accept'
- 로컬에서 사용되는 서버인 경우 출발지 주소에 따른 설정을 사용한다.
※ 192.168.10.0/24 네트워크에서 ftp 접속이 가능하도록 설정 (192.168.10.11은 제외)
firewall‐cmd ‐‐permanent ‐‐zone=public ‐‐add‐rich‐rule='rule family="ipv4" source address="192.168.10.0/24" service name="ftp" accept'
firewall‐cmd ‐‐permanent ‐‐zone=public ‐‐add‐rich‐rule='rule family="ipv4" source address="192.168.10.11" service name="ftp" drop'
- firewall-cmd는 설정 범위가 좁고 상세한 것의 우선순위가 높다. 때문에 명확한 우선순위를 파악하기 어렵다.
※ d_web 서버 rich rule 설정
이전에 구현한 d_web서버 네트워크 방화벽 설정을 참고하여 다음과 같이 rich rule만으로 시스템 방화벽 설정이 가능하다.
- rich rule로 방화벽 설정 후 service를 통한 제약은 삭제한다.
'일일 정리' 카테고리의 다른 글
보안 장비 운용, IDS(Intrusion Detection System), IDS - snort (0) | 2025.05.09 |
---|---|
리눅스 Firewall 설정 (0) | 2025.05.08 |
서버 보안 설정, FTP (0) | 2025.05.01 |
방화벽 환경 구축 (1) | 2025.04.30 |
방화벽 구축 (0) | 2025.04.29 |