firewalld
- 방화벽을 관리하기 위한 기본 방법으로 CentOS7에서는 firewalld를 사용한다.
- firewalld는 하위 수준 iptables, ip6tables 및 ebtables명령을 사용하여 Linux 커널 netfilter 하위 시스템을 관리한다.
- firewalld 영역의 기본 구성
영역 이름 |
기본 구성 |
trusted(변경불가) |
모든 패킷 허용 |
block(변경불가) |
모든 패킷을 거부(reject)하고 있지만, 내부에서 외부로의 반환 패킷은 허용 |
drop(변경불가) |
내부로 들어 오는 모든 패킷 폐기(drop), 외부로의 연결만 허용 |
dmz |
내부로 들어오는 패킷은 거부(reject), 외부로의 연결 허용, ssh 같은 사전 정의된 서비스는 허용 |
external |
내부로 들어오는 패킷은 거부(reject), 외부로의 연결 허용, ssh 같은 사전 정의된 서비스는 허용, IP 마스커레이딩 활성화 |
internal |
내부로 들어오는 패킷은 거부(reject), 기본적으로 "dhcpv6-client", "ipp-client", "mdns", "samba-client", "ssh"는 허용(시작시 home과 동일) |
home |
내부로 들어오는 패킷은 거부(reject), 기본적으로 "dhcpv6-client", "ipp-client", "mdns", "samba-client", "ssh"는 허용 |
work |
내부로 들어오는 패킷은 거부(reject), 기본적으로 "dhcpv6-client", "ipp-client", "ssh"는 허용 |
public |
기본 영역, 새롭게 추가된 네트워크 인터페이스의 기본 Zone(영역)으로 사용 내부로 들어오는 패킷은 거부(reject), "ssh"와 "dhcpv6-client"에만 허용 |
1. firewalld 설정 도구
1) CLI : firewall-cmd
2) GUI : firewall-config
2. firewall-cmd 사용법
1) firewalld 상태 확인
# firewall-cmd --state
running
2) 지원 가능한 영역(zone) 목록
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
3) 지원 가능한 서비스(zone) 목록
# firewall-cmd --get-services
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
4) 지원 가능한 영역(zone) 목록
# firewall-cmd --list-all-zones
block
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
dmz
interfaces:
sources:
services: ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
drop
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
external
interfaces:
sources:
services: ssh
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:
home
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
internal
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
public (default, active)
interfaces: eno16777736
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
trusted
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
work
interfaces:
sources:
services: dhcpv6-client ipp-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
4) default zone 확인 및 변경
# firewall-cmd --get-default-zone
public
# firewall-cmd --set-default-zone=home
3. 예제
1) httpd 및 mod_ssl 패키지 설치
server# yum install httpd mod_ssl
2) httpd.service를 활성화 및 시작
server# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
server# systemctl start httpd.service
server# echo "hpccloud.tistory.com" > /var/www/html/index.html
3) 기본적으로 모든 패킷이 dmz 영역을 통과하도록 변경
server# firewall-cmd --set-default-zone=dmz
server# firewall-cmd --list-all
dmz (default, active)
interfaces: eno16777736
sources:
services: ssh // ssh만 연결 가능
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
4) 192.168.37.0/24의 모든 패킷이 work 영역을 통과하도록 server의 firewalld데몬 구성
server# firewall-cmd --permanent --zone=work --add-source=192.168.37.0/24
server# firewall-cmd --reload
server# firewall-cmd --zone=work --list-all
work
interfaces:
sources: 192.168.37.0/24
services: dhcpv6-client ipp-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
5) work zone으로 들어오는 https 패킷을 허용
server# firewall-cmd --permanent --zone=work --add-service=https
server# firewall-cmd --reload
server# firewall-cmd --get-active-zones
dmz
interfaces: eno16777736
work
sources: 192.168.37.0/24
server# firewall-cmd --zone=work --list-all
work
interfaces:
sources: 192.168.37.0/24
services: dhcpv6-client https ipp-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
6) 테스트
client# curl http://192.168.37.127/
curl: (7) Failed connect to 192.168.37.127:80; No route to host
client# curl -k https://192.168.37.127/
hpccloud.tistory.com
※ 포트 포워딩(443 to 22)
server# firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.25.11.10/32 forward-port port=443 protocol=tcp to-port=22'
server# firewall-cmd --reload
### 클라이언트에서 443으로 접속 시 22번으로 접속됨.
client$ ssh -p 443 server11.example.com
The authenticity of host '[server11.example.com]:443 ([172.25.11.11]:443)' can't be established.
ECDSA key fingerprint is 65:4d:ac:8a:c9:58:82:b5:0c:91:c4:ef:a5:e6:f6:65.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[server11.example.com]:443,[172.25.11.11]:443' (ECDSA) to the list of known hosts.
student@server11.example.com's password:
Last login: Wed Mar 18 09:06:25 2015 from 172.25.11.250
[student@server11 ~]$
'Linux > CentOS' 카테고리의 다른 글
[CentOS7] SELinux (0) | 2015.03.18 |
---|---|
[CentOS7] unbound DNS (0) | 2015.03.17 |
[CentOS7] Network Bridge (0) | 2015.03.17 |
[CentOS7] Network Teaming (0) | 2015.03.17 |
[CentOS7] NFS (0) | 2015.03.17 |
최근댓글