iptables


iptables

iptables 는 쉽게 설명하면 리눅스에서의 방화벽을 설정해주는 것을 말한다.

user-space application 으로 커널에 도착하는 패킷을 제어할 수 있는 유용하고 강력한 도구이다.

때문에 iptalbes 를 설정하기 위해서는 반드시 root권한이 필요하다.

Chain

네트워크 패킷은 체인에 의해 순차적으로 처리된다.

체인 규칙은 다음 단계로 이동하거나, 다른 체인으로 점프하게된다.

모든 도착하거나 떠나는 네트워크 패킷은 반드시 하나의 체인을 거치게 되어있다.

어떤 정책이 정해지지 않았다면 패킷은 다음 다섯가지 체인을 기본적으로 거치게 된다.

iptables 설정

iptables 의 규칙 관리의 기본적인 형태는 다음과 같다.

	iptables [-t table] -[AD] chain rule-specification [options]

iptables의 명령에 다양한 옵션들은 다음 사이트에서 확인할 수 있다.

http://linux.die.net/man/8/iptables

간단한 예제

	#특정 ip에서 접근하는 패킷 드롭
	iptables -A INPUT -s 192.168.10.10 -j DROP 
	
	#마스킹을 통해 특정 ip 대역을 모두 막을 수도 있다.
	iptables -A INPUT -s 10.0.0.0/255.0.0.0 -j DROP 

	
	#특정 포트가 목적지인 패킷도 제어 가능 하다.
	iptables -A INPUT -p tcp --dport 80 -j DROP

	#특정 인터페이스로 통신되는 패킷에 대해서도 제어할 수 있다.
	#이런 방법은 특히, 와이파이와 같은 보안이 더 필요한 통신에대해서만 추가적으로 방화벽 설정을 할 때 유용하다.
	iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP

강력한 방화벽 설정

시스템의 패킷을 제어하는 강력한 방법은 들어오는 모든 패킷을 막은 다음 특정 ip 에서 요청되는 패킷만 처리하는 것이다.

그러나 이러한 방법은 새로운 연결 ip가 추가되면 일일이 셋팅해주어야 하는 번거로움이 있다.

	# 모든 패킷을 막음
	iptables -A INPUT -j DROP
	
	# 특정 IP에 해당하는 패킷만 허용
	iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT

	# 특정 포트만 허용
	iptables -A INPUT -p tcp --dport 20 -j ACCEPT

위 예제 처럼 특정 포트만 허용하는것도 가능하다.

그러나, 헨드 쉐이크 후, 별도의 포트로 지속적인 통신이 필요할때, 모든 패킷을 막고 20번 포트만 열어줬기 때문에 정상적으로 동작하지 않을 수 있다.

		        (source)       (destination)
			        |                |
	 (요청,시작패킷)| --- > 20---- > |
			        |                |
			        |< --- --- ---   |(port: 10032)
			        |                |
			        | -- > 10032-- > |(DROP: 20번 포트만 열려있기 때문)
			        | -- > 10032-- > |(DROP: 20번 포트만 열려있기 때문)

그래서 port 를 이용하여 패킷 제어를 할 때는 조심할 필요가 있다.

정리

iptables 의 간단한 예제들을 이용하여 리눅스에서 네트워크 방화벽을 설정하는 방법을 정리해 보았다.

정리하면서 느낀점은 잘만 사용하면 서버의 보안을 아주 단단하게 만들 수 있을 것 같다는 것이었다.

간단한 룰에서는 느낄 수없지만 복잡한 룰이 포함될때, 어떤 순서로 규칙이 적용되는지에대한 이해가 더 필요할 것 같다.

참조

http://en.wikipedia.org/wiki/Iptables http://linux.die.net/man/8/iptables

[top]

comments powered byDisqus