관리 메뉴

IT창고

리눅스 iptables 심화 본문

보안/Security

리눅스 iptables 심화

방구석여포 2018. 6. 24. 02:04

iptables는 리눅스의 방화벽 역활을 하는데 iptables를 사용한 응용을 해보겠습니다.

테스트 환경은 테스트PC 2개로 R리눅스는 외부(192.168.1.0/24)와 내부네트워크(10.10.10.0/24)로 연결되며 A리눅스가 내부네트워크로 연결된 상태입니다.


 R리눅스는 네트워크 랜카드가 2개 외부, 내부네트워크로 연결되어있습니다. R리눅스가 라우터역활을 해서 A리눅스도 외부와 네트워크통신이 가능한데 R리눅스의 iptables를 설정하겠습니다.

nat테이블은 라우팅을 위한 테이블로 여기서 들어오는 패킷을 바꿔다른곳으로 바꿔줍니다.


A리눅스의 내부에서 외부로 요청하는 경우를 예로 알아보겠습니다.


OUTPUT -> POSTROUTING  ->  PREROUTING -> FORWARD(eth1{10.10.10.0/24} ->eth0{192.168.1.0/24}) ->  POSTROUTING -> PREROUTING-> FORWARD(eth0{192.168.1.0/24} ->eth1{10.10.10.0/24}) -> POSTROUTING -> INPUT


nat테이블을 보면 PREROUTING체인은 패킷이 들어오기 전을 다루며 POSTROUTING체인은 패킷이 들어온 후를 다룹니다.

nat테이블의 정책은 기본적으로 ACCEPT이며 이 정책은 filter테이블처럼 DROP이나 다른 정책으로 바꿀수없습니다.


기본적으로 외부에서 A리눅스로 SSH접속을 하기 위해서는 10.10.10.0:22로 접속이 불가능합니다. 

R리눅스와 A리눅스가 연결되기 위해서는 우선 R리눅스에 FORWARD체인에 서로 네트워크 포워딩을 해야합니다. 


-i , -o 옵션으로 네트워크 랜카드의 입출력 랜카드를 선택하고 ACCEPT를 해줘서 포워딩을 합니다.


iptables 규칙에 프로토콜을 tcp로 한정하고 포트설정을 2222로 설정후 DNAT --to-destination 옵션으로 목적지 IP와 포트를 설정할수있습니다. 이 규칙은 만약 2222포트로 접속시 10.10.10.10:22로 포워딩 시켜주는 설정입니다.



R리눅스의 IP와 2222포트번호로 A리눅스에 SSH접속이 가능하게 됩니다.

단 접속 시 SSH연결이 되기 까지 대략 16초 정도의 시간이 소요되게 되는데 SSH접속이 느린 이유를 와이어샤크로 확인해보았습니다.


Connecting to 192.168.1.150:2222...

Connection established.

To escape to local shell, press 'Ctrl+Alt+]'.


Last login: Sun Jun 24 11:34:21 2018 from 192.168.1.10

[root@Alinux ~]# 

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

연결이 지연되는 이유는 접속하고 from 192.168.1.10의 IP를 DNS서버에 질의하는 과정이 있습니다. 리눅스는 DNS서버에게 질의하기 전에 /etc/hosts파일을 우선적으로 확인해서 IP를 찾는데 이 파일에 from으로 된 IP를 먼저 알려주면 DNS서버에 질의하기 전에 hosts파일에서 확인하기때문에 불필요한 시간 지연을 막을수있습니다.

10초 이상 지연되는 시간을 1~2초로 빠르게 단축이 가능합니다.

192.168.1.10 IP는 현재 호스팅PC입니다 



이번에는 A리눅스에 웹서버로 접근해보겠습니다.

R리눅스의 nat테이블에 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 2223 -j DNAT --to-destination 10.10.10.10:80명령어로 규칙을 추가합니다.

이 규칙은 2223포트로 접속하면 10.10.10.10:80으로 포워딩하게 되는 규칙입니다.

filter테이블에 FORWARD체인에는 이미 eth0와 eth1이 포워딩되어있는 상태여야합니다.


A리눅스에서는 iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 80 -j ACCEPT 명령어를 넣어 INPUT체인에 80포트로 접근을 허용해줘야만 합니다.


외부에서 내부네트워크에 있는 웹 서버에 접근이 가능하게 됩니다


마지막으로 전에 icmp패킷을 통과시켜 ping테스트를 해보았습니다. 

이번에는 좀 더 규칙을 강화시켜 보안성을 높여보겠습니다.

R리눅스에 기본적으로 FORWARD가 되어있고 POSTROUTING 과 PREROUTING에 조건을 추가합니다. 출발지와 목적지를 설정을 추가하였습니다.


A리눅스에 가볍게하면 INPUT체인에 목적지IP를 설정할필요도 없이 icmp패킷을 허용해주면 끝나지만 목적지IP도 설정함으로 보안성을 더욱 높이게 됩니다.

'보안 > Security' 카테고리의 다른 글

리눅스 PAM2  (0) 2018.06.28
리눅스 PAM1  (0) 2018.06.24
리눅스 iptables 기초  (0) 2018.06.17
리눅스 서버 보안3  (0) 2018.06.16
리눅스 서버 보안2  (0) 2018.06.14
Comments