CentOS 7 방화벽 서버 구축 ( firewalld )
2016.12.08 20:13
------------------------------------------------------------------------------------------------------------------------
firewalld 이용해서 방화벽 서버 구축하기
------------------------------------------------------------------------------------------------------------------------
☞ 방화벽의 경우 두개의 랜카드가 필요합니다.
한개는 외부망과 연결된 랜카드 이고 ip 는 공인 ip 로 설정이 되며, 두번째는 랜카드는 내부망과 연결되고 ip 는 사설 ip 로 설정을 합니다.
☞ 서버 설치 조건
- 외부망 이더넷 eno1 → IP : 192.168.0.1 ( 사설 IP 이지만 공인 IP 라고 가정 하고 강좌를 진행합니다. )
- 내부망 이더넷 enp2s0 → IP : 172.16.0.1
- WEB SERVER IP : 172.16.0.2
- 내부 네트워크는 C 클래스 한개의 규모입니다.
- 외부망은 공인 IP 로 설정하고 내부망은 사설 IP 로 설정을 합니다.
① 기본 포워딩 설정
두개의 포워딩 관련 설정 파일을 수정 해야 됩니다.
/etc/sysctl.conf 설정 파일을 편집기로 열어서 제일 하단에 net.ipv4.ip_forward = 1 문장을 추가 하면 되는데
간단하게 명령어로 파일을 열지 않고 수정이 가능합니다.
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
☞ 파일이 수정 됬는지 확인합니다.
# cat /etc/sysctl.conf
☞ cat /etc/sysctl.conf 으로 확인해서 " net.ipv4.ip_forward = 1 " 출력 되면 정상입니다.
☞ 두번째 파일은 /proc/sys/net/ipv4/ip_forward 입니다.
이것도 간단히 명령어로 파일을 수정하겠습니다.
# echo 1 > /proc/sys/net/ipv4/ip_forward
☞ 수정 상태 확인
# cat /proc/sys/net/ipv4/ip_forward
숫자 " 1 " 만 나오면 정상 수정된것 입니다.
② 랜 카드 설정
☞ 현재의 ip 설정 상태 확인
# ip a
☞ 랜카드가 두개가 있고, 외부망과 연결된 이더넷은 eno1 이고 ip 는 192.168.0.1 입니다.
내부망과 연결된 이더넷은 이름은 enp2s0 이고, 아직 ip 설정이 안되어 있는 상태입니다.
☞ 내부망 이더넷 랜카드의 ip 를 설정을 하겠습니다.
만약 nano 편집기가 설치 안되었으면 설치합니다.
# yum -y install nano
# nano /etc/sysconfig/network-scripts/ifcfg-enp2s0
→ dhcp 를 none 로 변경
→ DEFROUTE = yes 줄을 삭제합니다. 시스템의 설정된 라우팅을 사용한다는 의미인데 내부망 랜카드 에서는 사용하지 않습니다.
☞ 페이지 제일 하단에 내부망 이더넷의 IP 와 서브넷 마스크를 설정합니다.
→ IPADDR=172.16.0.1
→ NETMASK=255.255.255.0
☞ 설정 파일 저장후 네트워크 서비스 재시작
# systemctl restart network
☞ ip 상태 확인
# ip a
☞ 내부망의 랜카드가 활성화가 되었고 IP 가 할당이 되어 있습니다.
③ 방화벽 패키지 설치하기
# yum -y install firewalld
④ 방화벽 서비스 가동하기
☞ 방화벽 서비스 가동
# systemctl restart firewalld
☞ 방화벽 서비스 상시 가동
# systemctl enable firewalld
☞ 방화벽 서비스 상태 확인
# systemctl status firewalld
⑤ 외부망에 연결된 이더넷에 MASQUERADE 활성하기
# firewall-cmd --direct --permanent --add-rule ipv4 nat POSTROUTING 0 -o eno1 -j MASQUERADE
☞ 현재 외부망과 연결된 이더넷 이름은 eno1 이고 MASQUERADE 기능을 활성화 시킵니다.
⑥ 방화벽 포워딩 설정
☞ 내부망 ( enp2s0 ) 에서 외부망 ( eno1 ) 으로 나가는 경우 제한이 없으며
외부망 ( eno1 ) 에서 내부망 ( enp2s0 ) 으로 들어오는것은 기존 접속기록이 있거나 관련된 경우에만 허용된다는 의미입니다.
# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp2s0 -o eno1 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eno1 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# firewall-cmd --reload
여기까지만 하면 서버가 NAT 라우터 기능으로써 내부망 사용자는 인터넷이 가능합니다.
내부망에 웹서버와 같은 외부망에 서비스를 제공하지 않으면 여기까지만 진행해도 됩니다.
⑦ 외부망에서 내부망 웹서버로 연결 설정
☞ 외부망을 위한 zone 이름을 external 정의 하고, 인터페이스 이름을 eno1 이더넷으로 연결 합니다.
--permanent 옵션은 재부팅후 자동 시작 옵셥입니다
# firewall-cmd --zone=external --add-interface=eno1 --permanent
☞ 내부망을 위한 zone 이름을 public 정의 하고, 인터페이스 이름을 enp2s0 이더넷으로 연결 합니다.
# firewall-cmd --zone=public --add-interface=enp2s0 --permanent
☞ 설정간에 The interface is under control of NetworkManager, setting zone to 'external'. 이런 오류가 나오면
NetworkManager 서비스를 중단합니다.
# systemctl stop NetworkManager
☞ 외부망에서 80 번 포트를요청하는 사용자는 내부망의 172.16.0.2 의 서버로 포워딩 합니다.
# firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toaddr=172.16.0.2
☞ 설정 적용
# firewall-cmd --reload
☞ external zone의 설정 상태를 확인 할수 있습니다.
# firewall-cmd --zone=external --list-all
☞ 설정이 정상적으로 되어 있어도 웹서버로 바로 접속이 안될수 있기 때문에 서버를 재부팅을 합니다.
⑧ 방화벽 보안 설정
☞ 방화벽으로 외부의 공격에 대비해서 원격 접속을 제한하는 보안 설정을 해야 됩니다.
보안기준으로 따지면 가장 좋은 방법은 모든 원격을 차단하는것이지만 서버 관리자 입장에서는 윈격 접속이 필요한 경우가 있습니다.
원격 접속을 제한적으로 허용하는 방법을 알아 보겠습니다.
☞ 방화벽 설정 파일 public.xml 과 external.xml 파일을 수정하게 됩니다.
설정 파일 경로로 이동합니다.
# cd /etc/firewalld/zones/
☞ 내부망에서 방화벽 서버에 원격 접속 허용 설정
public.xml 파일을 수정 해야 되는데 파일이 없다면 # firewall-cmd --zone=public --add-interface=enp2s0 --permanent 실행하면 생성 됩니다.
# nano public.xml
<service name="ssh"/> 줄을 삭제
제일 마지막에 </zone> 바로 위에 아래 내용 추가
<rule family="ipv4">
<source address="172.16.0.0/24"/>
<port protocol="tcp" port="22"/>
<accept/>
</rule>
☞ 설정 파일을 저장합니다.
위 그림에서 변경한 설정은 내부망 네트워크 중 172.16.0.0/24 에서 방화벽 서버로 원격 접속을 허용한다는 의미입니다.
네트워크 환경에 맞게 위 설정 파일에서 ip 대역을 변경해서 사용하시면 됩니다.
☞ 외부망에서 방화벽 서버에 원격 접속 허용 설정
external.xml 파일을 수정 해야 되는데 파일이 없다면 # firewall-cmd --zone=external --add-interface=eno1 --permanent 실행하면 생성 됩니다.
# nano external.xml
<service name="ssh"/> 줄 삭제
제일 하단의 </zone> 의 바로 위에 아래 내용 추가
<rule family="ipv4">
<source address="192.168.0.0/24"/>
<port protocol="tcp" port="22"/>
<accept/>
</rule>
☞ 설정 파일을 저장합니다.
위 그림에서 변경한 설정은 외부망 네트워크 중 192.168.0.0/24 에서 방화벽 서버로 원격 접속을 허용한다는 의미입니다.
네트워크 환경에 맞게 위 설정 파일에서 ip 대역을 변경해서 사용하시면 됩니다.
☞ 변경한 설정 파일 서버에 적용하기
# firewall-cmd --reload
만약 원격 접속을 모두 차단한다면 위에서 수정한 두개의 파일에서 <service name="ssh"/> 이 줄을 지우고
# firewall-cmd --reload 실행 하시면 됩니다.
이렇게 해서 모든 작업이 끝났습니다.
⑨ 이슈 / 버그
☞ 시스템에 따라서 firewalld 경우 재부팅 하면 zone 설정이 한쪽 이더넷이 모두 연결되는 경우가 간혹 있습니다.
원래는 public zone 은 eno1 하나만 연결되고 external zone 은 enp2s0 가 연결되야 정상인데
위 그림은 부팅후에 public zone 으로 두개의 이더넷(eno1 , enp2s0 )이 모두 연결된 상태입니다.
이 경우 external zone 설정을 enp2s0 이더넷 설정 파일에 안에 ZONE=external 이 값을 추가하거나 수정후 재부팅하면 해결 됩니다.
만약에 enp2s0 이더넷 설정 파일 안에 ZONE 설정값이 public 로 이미 정의되어 있으면 external 로 변경하면 되고
ZONE 설정값이 없으면 제일 하단에 " ZONE=external " 을 추가하세요
각각의 모든 이더넷 설정 파일을 ZONE 값을 수정(추가) 해도 됩니다.
/etc/sysconfig/network-scripts/ifcfg-eno1 열어서
ZONE=external 을 추가 합니다.
/etc/sysconfig/network-scripts/ifcfg-ens2s0 열어서
ZONE=public 을 추가 합니다.
수정후 재부팅을 해야 됩니다.
댓글 [1]
-
Playing 2017.02.13 13:03
번호 | 제목 | 글쓴이 | 조회 |
---|---|---|---|
[공지] | 연재 강좌를 진행합니다. | gooddew | - |
125 | CentOS 7| OpenSSL 업데이트 | gooddew | 7550 |
124 | CentOS 7| top 활용하기 | gooddew | 5499 |
123 | CentOS 7| 시스템 하드 복사하기 ( DISK TO DISK ) | gooddew | 13155 |
122 | CentOS 7| 백업 및 복구 | gooddew | 11702 |
121 | CentOS 7| 윈도우 클라이언트에서 PUTTY 자동 로그인 | gooddew | 5288 |
120 | CentOS 7| Centos 7 에서 NTFS 인식하기 | gooddew | 7634 |
119 | CentOS 7| root 패스워드 초기화 [1] | gooddew | 9080 |
118 | CentOS 7| SSH 보안 정책 | gooddew | 6413 |
117 | CentOS 7| 패스워드 보안 정책 | gooddew | 6348 |
116 | CentOS 7| MC를 이용한 FTP 활용 [2] | gooddew | 6786 |
115 | CentOS 7| 리눅스 명령어 정리 | gooddew | 10003 |
114 | CentOS 7| 유용한 프로그램 설치하기 | gooddew | 10061 |
113 | CentOS 7| 네트워크 수동 설정하기 | gooddew | 29697 |
112 | CentOS 7| AWStats를 설치하기 | gooddew | 18565 |
» | CentOS 7| 방화벽 서버 구축 ( firewalld ) [1] | gooddew | 5516 |
110 | CentOS 7| 방화벽 서버 구축( iptables ) | gooddew | 5481 |
109 | CentOS 7| PROXY 서버 구축 | gooddew | 5232 |
108 | CentOS 7| DHCP 서버 구축 | gooddew | 5900 |
107 | CentOS 7| NFS 서버 구축 | gooddew | 5698 |
106 | CentOS 7| 메일( sendmail / dovecot ) 서버 구축 | gooddew | 5718 |
우오 잘 봤습니다
항상 방화벽에는 관심이 갔는데
서버에서는 이렇게 네트워크 카드를 물리적으로 분리해서 사용하는군요!!
크~ 봐도 까막눈이라서 이해는 못하지만 여러번 봐야겠네요