브리지 & iptables
작성자 정보
- 도치 작성
- 작성일
컨텐츠 정보
- 1,619 조회
- 0 추천
- 목록
본문
브리지 구성시 궁금한 사항 있어 질문 드립니다.
(브리지 구성후 공인 아이피를 사용 합니다. )
iptables eth0 0.0.0.0
iptables eth1 0.0.0.0
설정하잖아요. 근데 그다음에
iptables eth0 0.0.0.0 promisc up 설정하는 것과 promisce up 입력하지 않은
iptables eth0 0.0.0.0 것이 둘다 promisc 를 설정 한다는 뜻 아닌가요 ^^;
그리고 promisc 를 설정 하는 이유가 bridge 가 작동하지 않기 때문인가요.
또 하나 질문 있습니다. 아래 iptables script 좀 확인좀 부탁 드립니다. 부족한
부분이라든지 수정해야 할 부분이 있음 알려주세요. ^^
> iptables script
SERVICE_IP="xxx.xxx.xxx.xxx"
#- 방화벽에서 사용할 공인 ip를 지정한다. 각자의 공인 ip를 설정하면 된다.
/bin/echo "1" >/proc/sys/net/ipv4/ip_forward
# ---- 를 사용하려면 ip_forward 이 반드시 1 이여야 한다.
--> 이부분은 삭제해도 무난하겠죠.
iptables -t nat -F
iptables-t mangle -F
iptables -t filter -F
#각 테이블에서 기존의 룰을 모두 초기화(flush) 한다.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# filter 테이블의 기본 정책을 설정한다. 여기에서 INPUT 과 FOWWARD 는 DROP 하고 --
# OUTPUT 은 ACCEPT 로 하였다. --
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 루프백 인터페이스를 통한 트래픽을 허용한다.
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 255.255.255.255/32 -j DROP
iptables -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 192.0.2.0/24 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j DROP
iptables -A INPUT -i eth0 -s 240.0.0.0/5 -j DROP
iptables -A INPUT -i eth0 -s 248.0.0.0/5 -j DROP
# 외부에서 BRIDGE 방화벽 자체를 향하는 트래픽에 대한 제어를 한다. 이는 INPUT CHAIN
# 에서 필터링 설정하면 된다 사설 IP 및 공인 네트워크에서 사용되지 않는 IP 대역을
# 소스로 한패킷을 차단 한다.
# RFC1918에 정의된 사설ip는 차단한다
# IP 에서 온 패킷은 모두 버려지게 된다.
iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -j DROP
iptables -A FORWARD -i eth0 -s 255.255.255.255/32 -j DROP
iptables -A FORWARD -i eth0 -s 0.0.0.0/8 -j DROP
iptables -A FORWARD -i eth0 -s 169.254.0.0/16 -j DROP
iptables -A FORWARD -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -i eth0 -s 192.0.2.0/24 -j DROP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -i eth0 -s 224.0.0.0/4 -j DROP
iptables -A FORWARD -i eth0 -s 240.0.0.0/5 -j DROP
iptables -A FORWARD -i eth0 -s 248.0.0.0/5 -j DROP
# 외부에서 BRIDGE 방화벽을 통과하여 내부의 서버를 향하는 트래픽에 대한 제어를 한다.
# 이는 FORWARD Chain 에서 필터링 설정하면 된다.
# RFC1918에 정의된 사설ip는 차단한다
iptables -A OUTPUT -d 10.0.0.0/8 -j DROP
iptables -A OUTPUT -d 255.255.255.255/32 -j DROP
iptables -A OUTPUT -d 0.0.0.0/8 -j DROP
iptables -A OUTPUT -d 169.254.0.0/16 -j DROP
iptables -A OUTPUT -d 172.16.0.0/12 -j DROP
iptables -A OUTPUT -d 192.0.2.0/24 -j DROP
iptables -A OUTPUT -d 192.168.0.0/16 -j DROP
iptables -A OUTPUT -d 224.0.0.0/4 -j DROP
iptables -A OUTPUT -d 240.0.0.0/5 -j DROP
iptables -A OUTPUT -d 248.0.0.0/5 -j DROP
# 방화벽에서 외부로 나가는 트래픽에 대한 제어를 한다.
# RFC1918에 정의된 사설ip는 차단한다
# IP 를 도착지로 가지고 있는 패킷은 모두 버려지게 된다.
iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPT
# 내부의 사설 대역에서 사설 인터페이스인 eth1 을 통해 들어오는 패킷은
# 내부 네트워크에서의 정상적인 트래픽이므로 허용한다.
# iptables - A FORWARD -s 61.107.79.0/24 -j ACCEPT
# 192.168.1.0/24 패킷은 모두 받아 들인다.
--> 이부분은 공인 아아피를 사용하므로 공인 아이피 대역을 설정 하주면 되겠죠
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 이미 세션을 맺어 상태 추적 테이블 목록에 있는 ESTABLISHED,RELATED 패킷은 허용 한다.
# ESTABLISHED : 존재하는 접속에 속하는 패킷(즉, 응답 패킷을 가졌던 것)
# 즉 접속이 허가되고 통신 하면서 발생되는 패킷이다.
# RELATED : 기존의 접속의 부분은 아니지만 연관성을 가진 패킷으로 , ICMP 에러나(FTP 모듈이
# 삽입 되어 있으면) FTP 데이터 접속을 형성하는 패킷.
iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
# 상태 추적 테이블에 NEW 이면서 syn 비트가 설정되지 않은 tcp 패킷은 차단한다.
# NEW : 새로운 접속을 만드는 패킷
iptables -A INPUT -p ALL -m state --state INVALID -j DROP
iptables -A FORWARD -p ALL -m state --state INVALID -j DROP
iptables -A OUTPUT -p ALL -m state --state INVALID -j DROP
# 상태 추적 테이블에서 INVALID 인 패킷은 차단한다.
# INVALID : 어떤 이유로 확인할 수 없는 패킷,알려진 접속과 부합하지 않는 ICMP 에러와
# "out of memory" 등을 포함 한다. 보통 이런 패킷은 drop 된다.
iptables -A FORWARD -p TCP --sport 1024: --dport 747 -m state --state NEW -j ACCEPT
# 공인 IP 의 747/tcp 포트를 향하는 트래픽 즉 , 80번으로 향하는 트래픽
# 을 허용해 주는 설정이다.
iptables -A FORWARD -p TCP --sport 1024: --dport 21 -m state --state NEW -j ACCEPT
# 앞에서 BRIDGE 설정한 21/tcp 에 대해 포트 포워딩을 허용한다.
iptables -A INPUT -p TCP -s $SERVICE_IP --sport 1024: --dport 22 -m state --state NEW -j ACCEPT
# 관리를 위해 SERVICE_IP(설정 IP) 에서 방화벽으로의 ssh 로그인을 허용한다.
# $IPTABLES -A INPUT -p tcp -d $BR_IP --dport 22 -j ACCEPT (동일)
iptables -N ICMP_HANDLE
iptables -F ICMP_HANDLE
# icmp 트래픽에 대한 설정으로 INPUT,FORWARD 에 대해 각각 동일한 룰을 반복적으로
# 설정하여야 하는데, 이를 간소화하기 위해 ICMP_HANDLE 이라는 별도의 chain 을 생성하도록 한다.
iptables -A ICMP_HANDLE -p ICMP --icmp-type echo-reply -j ACCEPT
iptables -A ICMP_HANDLE -p ICMP --icmp-type network-unreachable -j ACCEPT
iptables -A ICMP_HANDLE -p ICMP --icmp-type host-unreachable -j ACCEPT
iptables -A ICMP_HANDLE -p ICMP --icmp-type port-unreachable -j ACCEPT
iptables -A ICMP_HANDLE -p ICMP --icmp-type fragmentation-needed -j ACCEPT
iptables -A ICMP_HANDLE -p ICMP --icmp-type time-exceeded -j ACCEPT
# 허용해 주어야 할 몇 가지 ICMP type을 설정해 준다.
iptables -A INPUT -p ICMP -j ICMP_HANDLE
iptables -A FORWARD -p ICMP -j ICMP_HANDLE
# INPUT,FORWARD 되는 패킷 중 ICMP 패킷을 ICMP_HANDLE chain 에 보낸다.
관련자료
-
이전
-
다음