Firewall - iptables_정책 설정 (2)

정책 설정하기


iptables란 리눅스에서 방화벽을 설정하는 도구이다.

iptables는 넷필터 프로젝트에서 개발했으며 광범위한 프로토콜 상태 추적, 패킷 애플리케이션 계층검사, 속도 제한, 필터링 정책을 명시하기 위한 강력한 매커니즘을 제공한다.


이전 실습에서 만든 스크립트를 실행시켜 정책을 초기화해주자.

sh fw_default.sh

iptables8_1


  • ssh를 통해 원격 접속이 가능하도록 설정

이전 실습에서는 ssh 서비스를 허용하기 위해 -p tcp 옵션을 사용했는데, 이는 tcp 프로토콜에 대한 접속을 모두 허용하기 때문에 위험하다. 그러므로 목적지 port를 지정하여 설정할 것이다.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptabels -A OUTPUT -p tcp --dport 22 -j ACCEPT


이제 INPUT과 OUPUT 체인에 ssh서비스가 추가된 것을 확인할 수 있다.

iptables8_2


PC에서 방화벽으로 putty를 이용해 접속하려고 했지만 되지 않는다. 그 이유는, OUTPUT에 대한 정책이 올바르지 않기 때문이다. PC에서 랜덤 포트를 열고 방화벽에 접속했기 때문에 응답 역시 랜덤 포트로 가야하지만 우리는 목적지 포트번호를 22로 설정하였기 때문이다.

iptables8_3

iptables8_4


이를 해결하기 위해 방화벽의 입장에서 보면 출발지 포트번호가 22번인 포트를 사용해 지정해준다. 이전의 정책은 삭제한 후, 다음과 같이 설정하자.

iptables -F OUTPUT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

iptables8_5


다시 접속해보면 로그인 화면이 나오고, 아이디와 비밀번호를 입력하면 성공이다.

iptables8_6


  • **허용된 네트워크 어댑터만 접속이 가능하도록 설정 **

다음과 같이 eth0, eth1, eth2 중 정책에 따라 허용된 네트워크 어댑터만 접속이 가능하도록 설정할 것이다.

iptables8_7


먼저 정책을 초기화 해준 후, 각각의 인터페이스에 대해 ping을 보내면 가지 않는 것을 확인할 수 있다.

sh fw_default.sh

iptables8_8

iptables8_9

iptables8_10


이제 다음과 같이 정책을 설정하면 ping이 정상적으로 보내진다.

iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT


본격적으로 실습을 진행하기 전 다시 정책을 초기화시켜준다.

iptables -F


먼저, 방화벽의 eth0의 IP 주소로는 ping이 보내지고, eth1과 eth2의 IP 주소로는 ping이 가지 않도록 정책을 설정해보자.

iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT

iptables8_11

iptables8_12

iptables8_13


  • 특정 IP 주소만 ssh를 허용하도록 설정

IP주소가 192.168.35.X (호스트PC의 IP주소) 인 경우에만 ssh를 허용하는 정책은 다음과 같다.

iptables -A INPUT -s 192.168.35.X -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d 192.168.35.X -p tcp --sport 22 -j ACCEPT

iptables8_14


PC에서 putty를 이용해 접속이 가능한 것을 확인할 수 있다.

iptables8_15


이제 PC의 IP주소를 변경한 다음 접속해보자.

iptables8_16

iptables8_17


접속이 되지 않는다는 것을 알 수 있다.

iptables8_18