iptables에서 방화벽 문제...
iptables를 이용해서 포트 포워딩, 인터넷 공유 잘 쓰고 있습니다.
방화벽을 적용 중인데요...
방화벽을 걸면 외부에서 공유 머신과 공유 머신에 물려있는 내부 네트웍으로의 접근이 불가해야합니다.
그래서 INPUT 체인과 FORWARD 체인에
iptables -A INPUT(FORWARD) -i eth0 -j DROP
이렇게 해주었죠... 그랬더니 막히기는 다 막히는데, 공유 머신에 물려 있는 내부 네트웍에서 인터넷이 안되네요...
그래서 찾다 보니 FORWARD에 아래와 같이 넣으라고 해서 넣었습니다.
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
그랬더니 내부 네트웍에서 인터넷이 잘되더군요...
그런데, 정작 문제는 공유 머신 자체에서는 막혀있다는 것이지요...
제가 개인적으로 생각한 것은 eth0에서 들어오는 모든 패킷을 막았기때문에 당연히 공유 머신에서나 공유 머신에 물려있는 내부 네트웍이나 인터넷을 하려면 패킷을 주고 받아야 하는데, 받는 게 모두 막혔으니 모두 안되는 것이고, 내부 인터넷은 위 두 줄의 명령으로 ESTABLISHED,RELATED 같이 기존에 연결이 된 접속은 허용을 하기때문에 내부 네트웍의 경우 인터넷이 되는 것이라고 생각이 드는데요...
공유 머신의 경우 INPUT으로 받고, OUTPUT으로 나가는 것 같은데 OUTPUT의 경우 ACCEPT이기 때문에 되야 될 것 같은데...
안되네요...
공유머신에서 외부로 나가려면 어떻게 해야할까요?
전체 스크립트
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -A INPUT -i eth0 -j DROP
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j DROP
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -i lo -j ACCEPT를 앞쪽에 넣으시면 어떨까
iptables -i lo -j ACCEPT
를 앞쪽에 넣으시면 어떨까요.
rommance.net
상관이 없는 것 같습니다.ping을 kornet으로 쳐보고 있는데..
상관이 없는 것 같습니다.
ping을 kornet으로 쳐보고 있는데...
위 스크립트를 INPUT에 넣어도, FORWARD에 넣어도
공유머신에서 Ping이 안나가네요....
"iptables -A INPUT -i eth0 -m state --st
"iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT"를 iptables -A INPUT -i eth0 -j DROP앞에 오게 하세요..
보니까 공유 머신에서 외부로 나가는데 들어오게는 못하게 한것 같군요.
됩니다...^^감사해요...new, related, estim
됩니다...^^
감사해요...
new, related, estimated를 접속 방식으로 구분하면 어떻게 되는 건가요?
어려워요...ㅠㅠ
goggling하면 자세히 나오는 곳을 찻을수 있겠지만 간단히 얘기하면
goggling하면 자세히 나오는 곳을 찻을수 있겠지만 간단히 얘기하면 이렇습니다.
TCP일 경우 NEW는 SYN이 있는 경우죠. 맨 처음 커넥션 맺을때요.
ESTABLISHED는 그 후를 의미 합니다. 3-way handshaking에서 맨 처음 SYN 다음 부터죠.
RELATED는 FTP를 예를 들어 설명하죠. FTP는 port(data:20,cmd:21)을 씁니다.
RELATED가 있으면 21번만 열어주면 됩니다. 둘다 열어줄 필요가 없어요.
왜나면 FTP구조상 명령어를 먼저 받고 20번 포트를 이용합니다. 20번 포트는 RELATED가 다 알아서 해줍니다.(그전에 따른 정책으로 20번을 막지 않는한요)
iptables의 설정들은 first-matching입니다. 처음 걸리는 정책이 동작하는거죠
http://www.netfilter.org/ 를 참조 하세요.
[quote]RELATED는 FTP를 예를 들어 설명하죠. FTP는
이것은 정확한 설명은 아닙니다. RELATED 의 경우,
내부에서 tcp 소켓 클라이언트 1.2.3.4:33356 <=> 외부에 4.5.6.7:80
으로 연결했고, 이 접속이 허용되도록 룰을 적용한 상태에서,
4.5.6.7:80 에서 1.2.3.4:33356으로 메시지를 보내올 경우, related에 의해서 적용되는것입니다. (저것을 명시적으로 허용하지 않더라도요)
위에서 말한 경우처럼 ftp 21번을 허용하고 21번이 덩달아 되는것은 ftp-helper 가 conntrack에 정보를 주는것으로, 일반적인 경우는 아닙니다. (ftp 전송내용을 직접 살펴서 PORT명령을 인식하고 exptected를 설정하는 것이기 때문이죠)
^^ 어렵네요...암튼 감사합니다...
^^ 어렵네요...
암튼 감사합니다...
댓글 달기