iptables방화벽과 머스커레이딩에대한 질문입니다
이문제를 해결하게위해서 3주정도 시간이 흘렀고 많은 문서를 보았지만 해결이 안되어서 결국 이곳까지 오게되었습니다
저는 LUG회원입니다 결국 LUG고수님들을 못뵙고 지금이곳의 리눅서님들에게 도움을 청하고자 이렇게 글을씁니다
일단 스크립을 붙이겠습니다
#!/bin/sh
IT="/sbin/iptables"
OUTNET="219.x.x.158/24" (사정상이렇게씁니다)
OUTBCAST="219.x.x.159"
OUTDEV="eth1"
ANYADDR="0/0"
TCPIN="smtp,http"
TCPOUT="smtp,http,ftp,ftp-data,irc"
UDPIN="domain,pop3s"
UDPOUT="domain"
ICMPIN="0,3,11"
ICMPOUT="8,3,11"
start()
{
#로깅 : 방화벽에서 차단된 데이터그램의 로깅을 사용하려면 다음의 행의
# 주석처리를 삭제하면된다.
# LOGGING=1
$IT -F FORWARD
$IT -P FORWARD DROP
#$IT -A FORWARD -i $OUTDEV -j DROP
#스머프 형식의 공격에 대비하기위해 브로드캐스트 주소로 ICMP를 보내게
#허용하지않는다..
$IT -A FORWARD -m icmp -p icmp -i $OUTDEV -j DROP
$IT -A FORWARD -f -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -d $OUTNET --dports $TCPIN --tcp-flags SYN,ACK ACK -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -s $OUTNET --sports $TCPOUT --tcp-flags SYN,ACK ACK -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -i $OUTDEV -d $OUTNET --dports $TCPIN --syn -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -i $OUTDEV -d $ANYADDR --dports $TCPOUT --syn -j ACCEPT
$IT -A FORWARD -m multiport -p udp -i $OUTDEV -d $OUTNET --dports $UDPIN -j ACCEPT
$IT -A FORWARD -m multiport -p udp -i $OUTDEV -d $ANYADDR --dports $UDPOUT -j ACCEPT
$IT -A FORWARD -m icmp -p icmp -i $OUTDEV -d $OUTNET -j ACCEPT
$IT -A FORWARD -m icmp -p icmp -i $OUTDEV -d $ANYADDR -j ACCEPT
$IT -t nat -P POSTROUTING DROP
$IT -t nat -A POSTROUTING -o eth1 -j MASQUERADE
}
stop()
{
$IT -F
$IT -X
}
restart()
{
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"##Usage:$0 {start|stop|restart}##"
;;
esac
exit $?
이건제가만든스크립이고 제가 문제를 해결하고자하는것은
결론적으로는 nat입니다 스크립이 잘못되었는지 알고싶은것도 있습니다
제 실력이 부족해서요 죄송합니다
이제 마지막으로 스크립은 실행이 잘됩니다 문제는
먼저 이더넷의 설정입니다
eth0 10.10.10.254 netmask 255.255.255.0
eth1 219.x.x.158 netmask 255.255.255.224
dns 168.126.63.1
route -N
tination Gateway Genmask Flags Metric Ref Use Iface
219.251.138.128 0.0.0.0 255.255.255.224 U 0 0 0 eth1
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 219.251.138.129 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 219.x.x.129 default router 라우팅설정은 219.x.x129로
모든ip가 가게만들어놨습니다
그럼 일단 방화벽내의설명입니다. echo "1" > ip_forward 로 forwarding
(좀 줄이겠습니다) 하게만들었습니다
그리고 10.10.10.x 의 아이피로 방화벽내에서는 ping이보내지고
219..x.x.x 대 의 아이피도 외부로 나갑니다
하지만 내부에있는 10.10.10.x ip가 방화벽 ip219.x.x.158 과 219.x.x.129 (라우터) 까지 가지못합니다
내부ip 10.10.10.x 클라이언트에서 갈수있는건 10.10.10.254까지입니다
하지만일단 밑에 답변을 달아주신님의 도움으로 막혀있던 -i $outdev를 주석처리하였습니다 지금은 219.251.138.x(방화벽까지는나갑니다)
하지만 라우터까지는 나가지않고있습니다
nat는 해결된건가요..?? 아님 nat가 아닌 라우팅테이블문제입니까.?
이유를 모르겠습니다 리눅서님들에게 절실하게 도움을 청합니다 ..그럼 언제나 어두운하늘이 되는사람이 되시길 ....
Re: iptables방화벽과 머스커레이딩에대한 질문입니다
음.. eth1을 통해 안쪽으로 들어오는 모든 패킷이 막혔는데 ,아래에서 아무리 잡다한 규칙을 주고 열어도 뭐가 될 지 의문입니다. (정책으로 막았는데 저건 왜 또 막았을까요?)
머 아니면 할 수 없습니다.
-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===
님의말씀을 잘들었지만
정책으로 막고 이더넷을 한번더 막은건 저도 실수한거 같지만
우선 전부를 막고 할당량만 열어주는것이 맞는거 아닌가요.?
그렇게 생각하고 만들었습었습니다
답변감사합니다
어쨋든 그렇게 주석을 님의 코드에 달아보았지만 해결되지않았습니다
안녕하세요....
많은것을 배우고 나가겠습니다
Re: 님의말씀을 잘들었지만
전부를 막고 할당량을 열어주는 건 맞는 말입니다.
그러나 체인 최상위에서 -A 를 통해 모두 막아버리면 더이상
-j ACCEPT 룰을 추가해도 패킷은 안으로 통과하지 않습니다.
iptables -P XXXX DROP 이후로는
iptables -A XXXX (... 조건 ...) -j ACCEPT 만 오면 되고
iptables -P XXXX ACCEPT 일때는
iptables -A XXXX (.. 조건 ..) -j ACCEPT
....
iptables -A XXXX -j DROP 으로 필요없는 모든 패킷을 막는 겁니다.
-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===
yanione님의 네트웤 전체적인 밑그림이 잘 안들어와서..
yanione님의 네트웤 전체적인 밑그림이 잘 안들어와서..
그림으로 도식화 해봤습니다.
--
이 아이디는 이제 쓰이지 않습니다.
default router의 설정이 옳은지 알고싶습니다
무한포옹님과 다른분들에 얘길를 잘들었습니다
하지만 무한포옹님....주석을 다는것과 accept을하는것과 차이가있는것입니까..??
제가 미리짐작한생각은 그렇다고 보는데..???
아닌지요..그리고 내부구성도는 맞습니다 이게 저희 내부구성도 입니다
-----------------------------
외부 네트워크
-----------------------------
|
------
디폴트 라우터: 219.x.x.129
------
|
|
| eth1: 219.x.x.158
----------------
NAT 게이트웨이 (Linux 머신)
----------------
| eth0: 10.10.10.254
|
------------------------------
내부 네트워크: 10.10.10.0/24
그럼 재 확인좀 부탁드립니다
주석을 달고한결과는 위에 덭붙어놨습니다
주석을 달자 158번까지는 핑이 나가는데..그이후 그러니가 라우터까지는 나가지않습니다 routing table의 문제인것인가요..?
안녕하세요....
많은것을 배우고 나가겠습니다
[quote]1. 소스코드를 올릴땐 끈적이를 활용합니다.2. 처음에
yanione님이 정말 문제를 해결하고 싶다면..
위의 문구들이 뜻하는 바를 느끼셔야..
좀 아쉽네요..
--
이 아이디는 이제 쓰이지 않습니다.
[code:1]# /sbin/route -N Destination
라우팅테이블과 IPTABLES의 정책을 일치시키려면..
OUTNET="219.x.x.158/19" 으로 변경하시는것이..
제가 틀렸을 수도 있구요.. 다시 계산을..
--
이 아이디는 이제 쓰이지 않습니다.
죄송합니다
하지만 일단 제가 제공할수없는 내용에 관한건 회사의 ip이기때문이고 해킹에 우려때문입니다 그리고 제가 적어드린 정보로도 충분하다고 생각했습니다
일단 불편함이있었다면 죄송합니다
안녕하세요....
많은것을 배우고 나가겠습니다
므 첨엔 누구나 실수를 하는거니깐요,,괜찮습니다..ifconf
므 첨엔 누구나 실수를 하는거니깐요,,
괜찮습니다..
ifconfig 엔트리와 라우팅 테이블을 계산해봤습니다. 이 점에선 오류가 없는거 같아요..
무한포옹님이 지적하신바와 같이..
IPTABLES 정책을 하나하나 체크 해 봐야 할 거 같아요.
커널에 해당 IPTABLES 기능은 모두 제대로 적용이 된건가요?
이것이 제대로 안되어져 있으면 아무리 현란한 스크립팅을 해도 허사라..
--
이 아이디는 이제 쓰이지 않습니다.
갑사합니다
커널에대한설정이란면...
ip_forward 같은....설정을 말씀하시는건지요..??
다른건 nat를 위한거나 정책을 위한게 있는지요..?
커널설정부분이..
제가알기로는 ip_Forward echo "1"로 쓰는것밖에는 정보를 못얻었습니다
안녕하세요....
많은것을 배우고 나가겠습니다
Re: 갑사합니다
커널 컴파일시 NAT관련 옵션들의 체크 유무를 말씀 드리는겁니다.
(이상없다면 통과..)
이제 NAT 정책입니다.
딱 집어서 어디가 어떻게 잘못 되었다라고 말하기엔..
코드가 좀 복잡합니다. 그래서 기본적인것부터..
기본적인 NAT 기능 동작 유무 테스트(이미 하셨다면 통과..)
1. 내부 네트워크에서 외부 네트워크로 패킷 포워딩
2. 외부 네트워크에서 내부 네트워크로 패킷 포워딩
세부 설정 시작.. 기능하나씩.. 체크..
정책 각각의 기능을 각각의 코드로 분류하셔서..
디버깅 하시면 됩니다..
각각의 기능에서 테스트 결과 이상없으면 merge 하시구요..
NAT기술문서(또는 man페이지)를 옆에 끼고..
원점에서 다시 정상을 향해..
--
이 아이디는 이제 쓰이지 않습니다.
학습이 목적이라면 다시 세팅하라고 권해드리고 싶네요..저는 뭐 초짜라
학습이 목적이라면 다시 세팅하라고 권해드리고 싶네요..
저는 뭐 초짜라 이것이 이렇고 저것이 저렇다고 말씀드릴 형편은 못되고...
네트웍설정이란게 참으로 미묘해서 똑같은 설정을 했는데도 불구하고 다른결과가 나온경우를 몇번봤거든요...
랜카드상태부터 확인.. 커널 네트웍옵션.. 관련모듈.. 초기화파일 하나하나 처음부터 다시 설정하시면 처음과는 분명이 다른 부분이 있을겁니다.
저도 마스크레이딩 구현할라고 몇번 삽질했습니다.
힘내시고 좋은 하루 ^^
Debian Spirit !!!
제 생각은..
우선은 저는 NAT에서 MASQUERADE를 사용하지 않고
SNAT를 사용합니다.(사용하시는 IP가 고정IP라고 가정한다면)
그렇게 하는 이유는 man page에서 고정IP의 경우 그렇게 하라고 되어 있어서..
그리고 분석툴을 사용한다면..
기본적으로 많이 사용하는 tcpdump를 사용해 보시면 합니다.
위 명령으로 패킷이 어떻게 전달 되는지 확인해 보시겠습니까?
10.xxx에서 외부로 ping을 쏘고
위의 두번째 명령으로 eth1까지 도달하는지 확인하시고
도달한다면
첫번째 명령으로 출력되는 것을 확인하시면 됩니다.
이정도면 확인되지 않을까요?
snat를 구현하는건..?
제가 가지고있는 문서에 없는내용같습니다..?
어떤식으로 구현하는지요..??
안녕하세요....
많은것을 배우고 나가겠습니다
제 경험으로는 IP MASQUERADE 가 되지 않은 상태에서도 eth1
제 경험으로는 IP MASQUERADE 가 되지 않은 상태에서도 eth1까지는
ping이 됩니다. 당연한거 겠지만요.
이 경우에 NAT가 동작하지 않거나 동작 중이라도 전혀 영향을 주지 못하는 것 같네요.
만약 Masquerade module이 올라와 있지 않다면
/sbin/modprobe ipt_MASQUERADE 를 먼저 실행 하시면 될것 같네요.
(중복해서 실행하지 마세요)
또한 Service list에서 iptables 이 제대로 로드 되어 있는지 확인도 해보셔야 할 듯 하고요.. ipchain은 필요 없겠죠? (저 같은 경우 기본적인걸 자주 잊어 버려서...)
제 경우에는 RedHat 7.2를 사용해서 Firewall을 구축 했었습니다.
Bridge Firewall 은 7.3 으로 했고요...
다른 버젼에선 iptables 이 왠지 완벽하게 도는 느낌이 잘 안들더군요..
8.x 9.x Adv 2.1, Ent 3.0 에서는 테스트 해보지 않았습니다.
6.x대 에서는 ipchain 을 사용했던거 같아요..
두서 없이 적었습니다.
도움이 되었는지 모르겠네요..
Re: snat를 구현하는건..?
고정 주소엔.. SNAT 을 사용하는것이 나을것이다라고.. 하우투 문서에 기술되어 있습니다..
http://doc.kldp.org/ 에서 네트워킹 하부 카테고리에 관련 문서가 있을겁니다..
부디 성공하시길..
--
이 아이디는 이제 쓰이지 않습니다.
댓글 달기