firewalld 는 Redhat 7까지는 백엔드로 iptables, 8버전이후로는 nftables 프레임워크를 사용하여 방화벽 설정한다. 그래서 Redhat 7버전에서 iptables 명령어로 확인하면 firewall-cmd에서 설정한 정보를 확인할수 있으나 Redhat 8 이상 버전에서 iptables로 확인하면 firwall-cmd 에서 설정한 정보가 표시되지 않는다. Redhat 8 이상버전에서는 nftables(nft command) 로 firwalld 설정을 볼수가 있다.
[1]. firewall-cmd 서비스 시작
> systemctl start firewalld
> systemctl status firewalld
[2]. firewall-cmd ZONE 관리
1. Default Zone 설정 정보
> firewall-cmd --list-all
2. Zone 리스트
> firewall-cmd --get-zones :
3. 모든 Zone의 설정 정보
> firewall-cmd --list-all-zones
4. Default Zone 정보
> firewall-cmd --get-default-zone
5. active Zone 리스트
> firewall-cmd --get-active-zones
6. Default Zone 설정
> firewall-cmd --set-default-zone=<ZONE>
7. Default Policy 수정
> firewall-cmd --permanent [--zone=zone] --set-target={default | ACCEPT | DROP | REJECT} : default target은 REJECT
8. firewall-cmd 가 저장 또는 참조하는 파일 및 디렉토리
firewall 명령으로 추가한 정책은 /etc/firewalld/ 폴더내에 .xml파일로 저장되어있다.
firewall-cmd --permanent 옵션으로 지정 했을 경우 firewall-cmd --reload 로 해야만 적용됨
--permanent 옵션 없이 했을 경우 바로 적용됨, 이때 --reload 옵션을 사용하면 이전 설정값으로 돌아감
[3]. Service /Port 관리
- 사전 정의된 서비스 이름, /usr/lib/firewalld/services/ 디렉토리에 정의되어 있음, vi 로 편집가능(편집후 firewall-cmd --reload 실행 필요)
- 추가로 정의한 서비스는 /etc/firewalld/services 폴더에 저장됨
1. 서비스 목록
> firewall-cmd --get-services :
2. 서비스의 상세 내역 확인
> firewall-cmd --info-service=<SERVICE>
3. 서비스 생성
> firewall-cmd --new-service=<SERVICE> --permanent
4. 서비스 요소 추가
> firewall-cmd --service=LISTENER --add-port=1521/tcp --permanent
5. Zone에 서비스 추가 / 삭제
> firewall-cmd --zone=<ZONE> --add-service=LISTENER --permanent
> firewall-cmd --zone=<ZONE> --remove-service=LISTENER --permanent
6. 포트 추가 및 삭제
firewall-cmd --zone=<ZONE> --add-port=10000-20000/tcp --permanent
firewall-cmd --zone=<ZONE> --remove-port=10000-20000/tcp --permanent
[4]. rich-rule
- rich-rule 은 priority 가 없음.
- rich-rule 은 source,destination,port등 멀티 조합 가능
1. rich-rule 추가
> firewall-cmd --zone=<ZONE> --add-rich-rule="rule family=ipv4 source address=192.168.219.200 port port=22 protocol=tcp accept" --permanent
2. rich-rule 삭제
> firewall-cmd --zone=<ZONE> --remove-rich-rule="rule family=ipv4 source address=192.168.219.200 port port=22 protocol=tcp accept" --permanent
firewall-cmd --reload
[5]. ipset 설정
1. ipset type 리스트
> firewall-cmd --get-ipset-types
2. ipset 리스트
> firewall-cmd --get-ipsets
3. ipset 생성
> firewall-cmd --new-ipset=whitelist01 --type=hash:net --option=family=inet --permanent
4. ipset 정보
> firewall-cmd --info-ipset=whitelist01
5. ipset 삭제
> firewall-cmd --delete-ipset=whitelist01 --permanent
6. ipset에 element 추가
> firewall-cmd --zone=<ZONE> --ipset=whitelist01 --add-entry=192.168.219.0/24 --permanent
6. ipset에 element 삭제
> firewall-cmd --zone=<ZONE> --ipset=whitelist01 --remove-entry=192.168.219.0/24 --permanent
7. ipset 적용 예
> firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source ipset=whitelist01 port port=22 protocol=tcp accept" --permanent
8. 파일로부터 ipset 생성
- 파일로 부터 읽어 들이기(기존 ipset에 추가, 기존 element가 있을 경우, 기존꺼는 덮어쓰고, 신규부분만 추가됨 )
cat > whitelist.txt <<EOL
192.168.0.2
192.168.0.3
192.168.1.0/24
192.168.2.254
EOL
firewall-cmd --ipset=test --add-entries-from-file=whitelist01 --permanent
firewall-cmd --reload
[6]. source, port 연산
> firewallcmd --list-all
----- zone -------------------
sources: ipset:whitelist01
services: ssh
ports: 8080/tcp
--------------------------------
- zone의 정보가 위와 같을 경우, sources 는 의미가 없음, null 상태와 동일
- 해당 정책은 ssh, 8080에 대해 모든 ip에서 접속 가능
- source 와 port를 조합하기 위해서는 rich rule 을 사용해야함
예)특정 IP에 대해서만 ssh 를 허용하고자 한다면 service(or port) 를 제거후 rich-rule에서 source 와 service(또는 port)를 이용하여 제어 사용
2. 잘못된 표현, 기본 firewalld 는 서비스(or port)에 대해서만 제어
> firewall-cmd --zone= --add-source=ipset:whitelist01 --permanent
'운영체제 > Unix & Linux' 카테고리의 다른 글
ssh single command에서 awk 사용법 (0) | 2024.04.23 |
---|---|
grep, sed 정확하게 일치하는 문자열 다루기 (0) | 2024.03.31 |
iptables 명령어 (0) | 2024.03.13 |
Openssh 서버 ACL 설정 (0) | 2024.03.07 |
[Solaris] /tmp 파일시스템 크기 조정 (0) | 2024.02.23 |