CentOS 7 방화벽 서버 구축( iptables )

2016.12.08 20:13

gooddew 조회:882

01.png



------------------------------------------------------------------------------------------------------------------------

                                                                  iptables 이용해서 방화벽 서버 구축하기 

------------------------------------------------------------------------------------------------------------------------


☞ 방화벽의 경우 두개의 랜카드가 필요 합니다.


한개는 외부망과 연결된 랜카드 이고 ip 는 공인 ip 로 설정이 되며, 두번째는 랜카드는 내부망과 연결되고 ip 는 사설 ip 로 설정을 합니다.



☞ 서버 설치 조건


- 외부망 이더넷 eno1 → IP : 192.168.0.1 ( 사설 IP 이지만 공인 IP 라고 가정 하고 강좌를 진행합니다. )


- 내부망 이더넷 enp3s4 → IP : 172.16.0.1


- WEB SERVER IP : 172.16.0.2


- 내부 네트워크는 C 클래스 한개의 규모입니다.


- 원칙은 외부망 IP 를 공인 IP 로 사용해야 하지만 여기 강좌에서는 192.168.0.1 를  공인 IP 라고 가정하고 강의를 진행합니다.



① 관련 패키지 설치


# yum -y install iptables-services nano



② 기본 포워딩 설정


2개의 포워딩 관련 설정 파일을 수정 해야 됩니다.


/etc/sysctl.conf 설정 파일을 편집기로 열어서 제일 하단에 net.ipv4.ip_forward = 1 문장을 추가 하면 되는데


간단하게 명령어로 파일을 열지 않고 수정이 가능합니다.


# echo "net.ipv4.ip_forward = 1"  >> /etc/sysctl.conf


10.png


☞  파일이 수정 됬는지 확인합니다.


# cat /etc/sysctl.conf


08.png


☞ cat 으로 확인해서 " 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 이라고 나오면 정상 수정된것 입니다.


11.png



③ 랜 카드 설정


☞ 현재의 ip 설정 상태 확인


# ip a


13.png


☞ 랜카드가 두개가 있고, 외부망과 연결된 이더넷은 eno1 이고 ip 는 192.168.0.1 입니다.


내부망과 연결된 이더넷은 이름은 enp3s4 이고 이더넷 enp3s4 아직 ip 설정이 안되어 있는 상태입니다.



☞ 내부망 이더넷 랜카드의 ip 를 설정을 하겠습니다.


# nano /etc/sysconfig/network-scripts/ifcfg-enp3s4


04.png


→ dhcp 를 none 로 변경


→ DEFROUTE = yes  줄을 삭제합니다. 시스템의 설정된 라우팅을 사용한다는 의미인데 내부망 랜카드 에서는 사용하지 않습니다. 


☞ 페이지 제일 하단에 IP 와 서브넷을 추가 입력을 합니다.


→ IPADDR = 172.16.0.1  


→ NETMASK = 255.255.255.0 



☞ 설정 파일 저장후 네트워크 서비스 재시작


# systemctl restart network


05.png



☞ ip 상태 확인


# ip a


14.png


☞ 내부망의 랜카드가 활성화가 되었고 IP 가 할당이 되어 있습니다.




④ 방화벽 설정 하기


☞ 방화벽을 설정하는 방법은 모든 접근을 차단한 다음에 필요한 접근만 허용하게 됩니다.



☞ 방화벽 설정 초기화


22.png


# iptables -F

# iptables -P FORWARD DROP

# iptables -P INPUT DROP​

​# iptables -P OUTPUT DROP


☞ 원격으로 작업을 했으면 연결이 끊어 질수 있습니다.



☞ MASQUERADE 설정


16.png


# iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE


외부망과 연결된 이더넷 eno1 에서 MASQUERADE 사용가능하게 설정합니다.



☞  포워딩 설정


- 내부망( enp2s0 )에서 외부망( eno1 )으로 나가는 경우 제한이 없고 외부망에서 내부망으로 들어오는경우 


   새로운 접근은 차단되고, 기존 접속 기록이 있거나 관련된 연결만 허용합니다.


17.png


# iptables -A FORWARD -i enp2s0 -o eno1 -j ACCEPT

# iptables -A FORWARD -i eno1 -o enp2s0  -m state --state RELATED,ESTABLISHED -j ACCEPT



☞ 위 설정 까지만 해도 내부 네트워크가 외부 인터넷 사용이 가능합니다.


만약 내부망에 웹서버가 없다든지 방화벽 서버를 단순 공유기 퍼럼 NAT 라우터 기능으로만 사용하려면 여기 까지만 해도 잘 됩니다. 




☞ 방화벽 원격 접속 설정하기


- 방화벽의 원격 접속은 보안상 내부망에서만 접속을 허용하는것이 좋습니다.


23.png



☞ 내부망 ( 172.16.0.0/24 ) 과 외부망 ( 192.168.0.0/24 ) 원격 접속 허용 설정방법입니다.


- 내부망 172.16.0.0/24  네트워크 에서 방화벽 접근 허용


# iptables -A INPUT --in-interface enp2s0 --source 172.16.0.0/24 -j ACCEPT


# iptables -A OUTPUT --out-interface enp2s0 --destination 172.16.0.0/24 -j ACCEPT



- 외부망 192.168.0.0/24  대역의 네트워크에서 방화벽 접근 허용. 자신의 원하는 네트워크 범위를 추가 할수 있습니다.


# iptables -A INPUT --in-interface eno1 --source 192.168.0.0/24 -j ACCEPT


# iptables -A OUTPUT --out-interface eno1 --destination 192.168.0.0/24 -j ACCEPT





☞ 내부망에 웹서버(IP:172.16.0.2)가 있을경우 포워딩 설정


 - 기본적으로 방화벽으로 인해서 외부망 사용자는 내부망으로 접근 할수 없습니다. 


   내부망안에 웹서버를 외부망 사용자가 접근을 하려면 방화벽에서 정책을 설정을 해야 됩니다.


   외부망 사용자는 192.168.0.1 까지만 접근이 가능하고 192.168.0.1 로 접속을 하면은 바로 웹서버가 보이기 때문에


   웹서버 IP가 192.168.0.1 라고 생각하지만 실제적으로는 192.168.0.1 는 방화벽 IP 이고 웹서버에 접근하려는 사용자에게는


   내부망에 있는 진짜 웹서버 (172.16.0.2) 로 포워딩을 하게 됩니다.


19.png


# iptables -t nat -A PREROUTING  -p tcp -i eno1 --dport 80 -j DNAT --to-destination 172.16.0.2


- 방화벽에 80 포트 요청이 있으면 172.16.0.2 ip 의 서버로 포워딩 한다는 의미입니다.





☞ 외부에서 80 포트 접근 관련 보안설정을 변경해야 합니다.


21.png


# iptables -A FORWARD -i eno1 -o enp2s0  -m state --state NEW,RELATED,ESTABLISHED -p tcp --dport 80 -j ACCEPT


80 번 포트에 한해서 방화벽에서 오픈을 한다는 의미입니다.



☞ 이제 외부에서 내부망의 웹서버 접속이 가능합니다.



이렇게 해서 방화벽 설정은 끝났습니다.




⑤ 설정값을 저장


20.png


☞ 설정값 저장하기


# service iptables save



☞ 서비스 상시 가동 설정하기


# systemctl enable iptables



☞ 서비스 재가동


# systemctl restart iptables