OPS/LInux
Iptables
배주혁
2015. 4. 21. 14:13
Iptables
정의
리눅스 서버의 방화벽은 패킷 필터링 규칙을 통해 설정되는데 이 패킷 필터링은 커널에 탑재된 netfilter 기능으로 한다. netfilter가 어떠한 작동을 하게끔 룰을 세워줘야 하는데 그것을 해주는 것이 iptables이다.
예를들면 이렇다. 54.1.1.0/24 네트워크가 서버로 들어오면 차단 되는 시나리오가 있다. 이때 54.1.1.0/24 네트워크가 서버로 들어오면 차단이라는 룰을 세우는건 iptables가 하고, 패킷 차단을 시키는것은 netfilter가 하게 되는것이다.
기본체인
종류
INPUT chain :
외부로 부터 자신에게 접근 하는 것에 대한 설정. 즉 목적지 주소가 자신일때 이다.
FORWARD chain :
외부로 부터 접속하는건 같으나 자신을 거쳐 가는 것에 대한 설정. 목적지 주소는 자신이 아니며, 보통 게이트웨이 역할을 할때 이다.
OUTPUT chain :
자신의 나가는 패킷에 대한 설정. 출발지 주소가 자신일때 이다.
규칙
-L : 규칙 리스트보기
-F : 규칙 초기화
-D : 규칙 삭제
-s : 출발지 주소지정
-d : 목적지 주소지정
-p : 프로토콜지정
-j : 패킷 정책 지정
-i : IN 인터페이스 지정
-o : OUT 인터페이스 지정
-t : table 지정
--dport : 목적지 포트지정
--sport : 출발지 포트지정
예제
초기화
모든패킷 초기화
# iptables -F
INPUT
서버로 오는 패킷 모든 패킷 차단
# iptables -A INPUT -j DROP
서버로 오는 웹 접속요청만 차단
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -j ACCEPT
172.168.0.1 PC만 빼고 모든 접속 허용
# iptables -A INPUT -s ! 172.168.0.1 -j ACCEPT
# iptables -A INPUT -j DROP
172.168.0.0/24 네트워크의 ICMP 요청패킷만 막기
# iptables -A INPUT -s 172.168.0.0/24 -p icmp --icmp-type 8 -j DROP
# iptables -A INPUT -j ACCEPT
172.168.0.0/24 네트워크의 tcp 요청패킷만 막기
# iptables -A INPUT -s 172.168.0.0/24 -p tcp --syn -j DROP
# iptables -A INPUT -j ACCEPT
FORWARD
ip_forward를 1로 변경후 작업
PC1에서 PC2로 가는 웹접속만 허용
# iptables -A FORWARD -p tcp --dport 80 -s 54.16.0.10 -d 192.168.0.10 -j ACCEPT
# iptables -A FORWARD -s 54.16.0.10 -d 192.168.0.10 -j DROP
192.168.0.0/24 네트워크로 가는 tcp 요청 패킷 막기
# iptables -A FORWARD -p tcp --syn -d 192.168.0.0/24 -j DROP
# iptables -A FORWARD -j ACCEPT
192.168.0.0/24 네트워크에서 다른 네트워크대역의 웹서버 접근 막기
# iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.0/24 -j DROP
# iptables -A FORWARD -j ACCEPT
POSTROUTING
192.168.0.0/24 네트워크의 발신지 주소 변경
# iptables -t nat -A POSTROUTRING -s 192.168.0.0/24 -o eth1 -j SNAT --to 54.10.1.1
PREROUTING
54.10.1.1:80으로 접속 해올시 패킷을 192.168.0.10:80으로 재전송
#iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.10:80
정의
리눅스 서버의 방화벽은 패킷 필터링 규칙을 통해 설정되는데 이 패킷 필터링은 커널에 탑재된 netfilter 기능으로 한다. netfilter가 어떠한 작동을 하게끔 룰을 세워줘야 하는데 그것을 해주는 것이 iptables이다.
예를들면 이렇다. 54.1.1.0/24 네트워크가 서버로 들어오면 차단 되는 시나리오가 있다. 이때 54.1.1.0/24 네트워크가 서버로 들어오면 차단이라는 룰을 세우는건 iptables가 하고, 패킷 차단을 시키는것은 netfilter가 하게 되는것이다.
기본체인
종류
INPUT chain :
외부로 부터 자신에게 접근 하는 것에 대한 설정. 즉 목적지 주소가 자신일때 이다.
FORWARD chain :
외부로 부터 접속하는건 같으나 자신을 거쳐 가는 것에 대한 설정. 목적지 주소는 자신이 아니며, 보통 게이트웨이 역할을 할때 이다.
OUTPUT chain :
자신의 나가는 패킷에 대한 설정. 출발지 주소가 자신일때 이다.
규칙
-L : 규칙 리스트보기
-F : 규칙 초기화
-D : 규칙 삭제
-s : 출발지 주소지정
-d : 목적지 주소지정
-p : 프로토콜지정
-j : 패킷 정책 지정
-i : IN 인터페이스 지정
-o : OUT 인터페이스 지정
-t : table 지정
--dport : 목적지 포트지정
--sport : 출발지 포트지정
예제
초기화
모든패킷 초기화
# iptables -F
INPUT
서버로 오는 패킷 모든 패킷 차단
# iptables -A INPUT -j DROP
서버로 오는 웹 접속요청만 차단
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -j ACCEPT
172.168.0.1 PC만 빼고 모든 접속 허용
# iptables -A INPUT -s ! 172.168.0.1 -j ACCEPT
# iptables -A INPUT -j DROP
172.168.0.0/24 네트워크의 ICMP 요청패킷만 막기
# iptables -A INPUT -s 172.168.0.0/24 -p icmp --icmp-type 8 -j DROP
# iptables -A INPUT -j ACCEPT
172.168.0.0/24 네트워크의 tcp 요청패킷만 막기
# iptables -A INPUT -s 172.168.0.0/24 -p tcp --syn -j DROP
# iptables -A INPUT -j ACCEPT
FORWARD
ip_forward를 1로 변경후 작업
PC1에서 PC2로 가는 웹접속만 허용
# iptables -A FORWARD -p tcp --dport 80 -s 54.16.0.10 -d 192.168.0.10 -j ACCEPT
# iptables -A FORWARD -s 54.16.0.10 -d 192.168.0.10 -j DROP
192.168.0.0/24 네트워크로 가는 tcp 요청 패킷 막기
# iptables -A FORWARD -p tcp --syn -d 192.168.0.0/24 -j DROP
# iptables -A FORWARD -j ACCEPT
192.168.0.0/24 네트워크에서 다른 네트워크대역의 웹서버 접근 막기
# iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.0/24 -j DROP
# iptables -A FORWARD -j ACCEPT
POSTROUTING
192.168.0.0/24 네트워크의 발신지 주소 변경
# iptables -t nat -A POSTROUTRING -s 192.168.0.0/24 -o eth1 -j SNAT --to 54.10.1.1
PREROUTING
54.10.1.1:80으로 접속 해올시 패킷을 192.168.0.10:80으로 재전송
#iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.10:80