<윈도우xp gateway>
[root@jo:~]#iptables -P INPUT ACCEPT [root@jo:~]#iptables -P OUTPUT ACCEPT [root@jo:~]#iptables -F [root@jo:~]#iptables -t nat –F à nat 설정 제거 à sendmail서버가 끊겼다. |
--
[root@jo:~]#service network restart Shutting down interface eth0: [ OK ] Shutting down interface eth1: [ OK ] Shutting down loopback interface: [ OK ] Disabling IPv4 packet forwarding: net.ipv4.ip_forward = 0 [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface eth1: [ OK ] 전에 했던거 날리기 위해 |
--
<1 대 多 NAT >
[root@jo:~]#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 100.대 네트워크가 전부 다 된다. 포트를 방화벽에서 하나씩 부여 받는다. POSTROUTING à 무조건 SNAT |
--
<1 대 1 NAT >
[root@jo:~]#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.100.100 -j SNAT --to 192.168.10.188
[root@jo:~]#iptables -t nat -L POSTROUTING Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- mail.cho.iss anywhere to:192.168.10.188
[root@jo:~]#iptables -t nat -L POSTROUTING -n Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.100.100 0.0.0.0/0 to:192.168.10.188
[root@jo:~]#iptables -t nat -A PREROUTING -i eth0 -d 192.168.10.188 -j DNAT --to-destination 192.168.100.100 -i à 들어오는 거
[root@jo:~]#iptables -t nat -L PREROUTING Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT all -- anywhere 192.168.10.188 to:192.168.100.100 |
--
[root@jo:~]#cat /proc/sys/net/ipv4/ip_forward 1 à 항상 1인지 확인 |
--
[root@jo:~]#ip addr show eth0 à 아직 없다….188 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:a9:92:8a brd ff:ff:ff:ff:ff:ff inet 192.168.10.181/24 brd 192.168.10.255 scope global eth0 inet6 fe80::20c:29ff:fea9:928a/64 scope link valid_lft forever preferred_lft forever service network restart 하면 사라진다 |
.--
[root@jo:~]#ip addr add 192.168.10.188/24 dev eth0 [root@jo:~]#ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:a9:92:8a brd ff:ff:ff:ff:ff:ff inet 192.168.10.181/24 brd 192.168.10.255 scope global eth0 inet 192.168.10.188/24 scope global secondary eth0 inet6 fe80::20c:29ff:fea9:928a/64 scope link valid_lft forever preferred_lft forever |
--
만약에 추가한 ip를 지우려면 à #ip addr del 192.168.10.188/24 dev eth0
그럼 이제 외부에서 192.168.10.188로 접속하면 내부의 가상 사설 IP로 설정된 서버(메일서버192.168.100.100)으로 연결 된다. |
--
<FORWARD 한번에 해주기>
[root@jo:~]#iptables -P FORWARD DROP à 방화벽서버에서 내부 서버로 FORWARD하는 것을 전체 드랍한다. à (메일서버192.168.100.100)가 팅겼다. FORWARD를 막았기 때문에
[root@jo:~]#iptables -A FORWARD -p tcp -s 192.168.10.26 -d 192.168.100.100 --sport 1024: --dport 22 -m state --state NEW -j ACCEPT à 송신자 IP가 192.168.10.26(xp_IP)가 192.168.100.100을 목적지로 하는 것에 새로 연결시키는 것만 허용한다. à FORWARD로 들어오는 거만 허용된 상태다 아직 연결 안될꺼다. 나가는 것도 해주면 되지만 좀 더 간단한 방법이 있다. 밑에… [root@jo:~]#iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
à FORWARD 체인은 이거 하나만 넣어주면 들어오는 거든 나가는 거든 다 허용한다. "ESTABLISHED" 된 것을 허용하기 때문에 ssh로 접속하면
이제 (메일서버:192.168.10.188 à 192.168.100.100) 으로 연결될 것이다. (메일서버:192.168.10.188 à 192.168.100.100)설정
#vi /etc/resolv.conf à namedserver=168.126.63.1로 바꿈. #service network restart #dig @ns.kornet.net www.daum.net Dns test |
--
방화벽서버(BIND서버)설정 #iptables –A FORWARD –p udp -s 192.168.100.0/24 --sport 1024: --dport 53 –m state --state NEW –j ACCEPT --sport 2024: à 1024포트 이후로 , 클라이언트가 접속하는 거니깐 원래는 어딘지 모를 서버의 53번으로 나간다.
FORWARD체인의 INPUT, OUTPUT과는 틀리게 FORWARD는 두 개다 다 갖고 있다. 나한테 들어오는 것도 통로가 되는 거고 들어왔다 나가는 것도 통로가 되는 거다. |
--
Xp> telnet 192.168.10.181 25 |
--
(메일서버:192.168.10.188 à 192.168.100.100)설정 Dns 바꿈 à /etc/resolv.conf : nameserver=192.168.100.100 [root@jo:~]#iptables -A INPUT -p tcp -s 192.168.100.100 --sport 1024: -d 192.168.100.1 --dport 25 -m state --state NEW -j ACCEPT
[root@jo:~]#iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT OUTPUT은 아까 ESTABLISHED해주어서 안 해줘도 된다.
메일은 보낼 수 있게 됐다. [root@woo:~]#telnet mailx.cho.iss 25 Trying 192.168.100.1... Connected to mailx.cho.iss (192.168.100.1). Escape character is '^]'. 220 jo.cho.iss ESMTP Sendmail 8.13.8/8.13.8; Thu, 29 Oct 2009 03:42:27 +0900 quit 221 2.0.0 jo.cho.iss closing connection Connection closed by foreign host. |
--
[root@jo:~]#iptstate
TTL값이 떨어져서 사라진 상태에 세션이 들어오면 새로운 세션으로 믿는다. 새로운 세션을 물고 들어와도 기존의 연결된 세션에서 들어온 세션으로 믿고 " #iptables –P INPUT –j DROP" 시키니깐 바로 끊어버리는 것이다.
[root@jo:~]#iptables -A FORWARD -p tcp -s 192.168.10.26 -d 192.168.100.100 --sport 1024: --dport 22 -m state --state NEW -j ACCEPT 앞에서 새로운 세션만 받아 들이도록 설정했기 때문에 하나의 세션이 살아있는 한 접속 시도는 불가 하다. 따라서 밑에서 처럼 RELATED도 추가해주면 "#iptables –P INPUT –j DROP"을 해도 안 끊길 것이다. [root@jo:~]#iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT |
--
[root@jo:~]#iptables -A OUTPUT -p tcp --sport 1024: --dport 25 -m state --state NEW -j ACCEPT [root@jo:~]#telnet mail.cho.iss 25 Trying 192.168.100.100... Connected to mail.cho.iss (192.168.100.100). Escape character is '^]'. 220 woo.cho.iss ESMTP Exchange; Thu, 29 Oct 2009 04:17:20 +0900 quit 221 2.0.0 woo.cho.iss closing connection Connection closed by foreign host. |
--
#cat /proc/net/ip_conntrack à 방화벽에서 들어오는 거 상태 보기
1 NAT >> SNAT, DNAT 2 DNS >> 자신이 서버인 경우 와 자신이 클라이언트인 경우 3 SMTP >> Viruswall 로서 자신이 받아주는 Queneing Mail 역할 4 SSH 에 대한 연결에 대해 >> Related를 통한 기존 연결정보에 이은 연결 허용 5 보내는 메일로서의 역할을 하기위한 룰 |
--
<방화벽 설정했던 거 날리자. 처음부터 다시>위치: 방화벽서버(BIND서버)
[root@jo:~]#iptables -P INPUT ACCEPT [root@jo:~]#iptables -P FORWARD ACCEPT [root@jo:~]#iptables -P OUTPUT ACCEPT [root@jo:~]#iptables -F [root@jo:~]#iptables -t nat –F . [root@jo:~]#service iptables save Saving firewall rules to /etc/sysconfig/iptables: [ OK ] . 방화벽을 설정할 때 기본적으로 loopback을 넣어야 한다. [root@jo:~]#iptables -I INPUT -i lo -j ACCEPT [root@jo:~]#iptables -I OUTPUT -o lo -j ACCEPT . [root@jo:~]#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [root@jo:~]#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [root@jo:~]#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT . ssh만 살리고 다 DROP 시킨다. [root@jo:~]#iptables -A INPUT -p tcp -s 192.168.10.26 --sport 1024: --dport 22 -m state --state NEW -j ACCEPT . [root@jo:~]#iptables -P INPUT DROP [root@jo:~]#iptables -P OUTPUT DROP [root@jo:~]#iptables -P FORWARD DROP |
--
[root@jo:~]#telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 jo.cho.iss ESMTP Sendmail 8.13.8/8.13.8; Thu, 29 Oct 2009 08:27:36 +0900 다 드랍 시켰는데 되는 이유는 loopback은 허용했기 때문에 | |
[root@jo:~]#vi /etc/resolv.conf search cho.iss #nameserver 168.126.63.1 nameserver 192.168.100.100
#service network restart |
--
[root@jo:~]#nslookup > server Default server: 192.168.100.100 Address: 192.168.100.100#53 방화벽에서 53번을 뚫어줘야 한다. . [root@jo:~]#nslookup > server Default server: 192.168.100.100 Address: 192.168.100.100#53 > mail.cho.iss ;; connection timed out; no servers could be reached > |
--
[root@jo:~]#iptables -A OUTPUT -p udp --sport 1024: -d 192.168.100.100 --dport 53 -m state --state NEW -j ACCEPT à Dns인 192.168.100.100 에 질의할 수 있도록 나가는 것을 뚫어준다. "state"로 새 세션을 여는 것만 허용한다. . [root@jo:~]#nslookup > mailx.cho.iss Server: 192.168.100.100 Address: 192.168.100.100#53 . Name: mailx.cho.iss Address: 192.168.10.181 |
--
[root@jo:~]#iptables -A INPUT -p tcp --sport 1024: --dport 25 -m state --state NEW -j ACCEPT 메일 들어오는 거 허용 |
--
xp에서 메일 되는 지 테스트
C:\>telnet 192.168.10.181 25 220 jo.cho.iss ESMTP Sendmail 8.13.8/8.13.8; Thu, 29 Oct 2009 09:05:05 +0900 quit 221 2.0.0 jo.cho.iss closing connection . [root@jo:~]#iptables -A OUTPUT -p tcp --sport 1024: --dport 25 -m state --state NEW -j ACCEPT 여러 메일서버에 보낼 수 있어야 하기 때문에 destination IP를 주지 않았다. 메일을 보낼 수도 있게 설정 . [root@jo:~]#mail -v tack7001@nate.com Subject: test mail iptables test mail .. Cc: nate.com: Name server timeout tack7001@nate.com... Transient parse error -- message queued for future delivery tack7001@nate.com... Queued 안 된다. . 메일서버 설정 바꿔야 한다. #vi /etc/named.conf acl "internal-zone" {192.168.100.0/24; 127.0.0.1;}; |
--
[root@jo:~]#ll /var/spool/clientmqueue/ total 16 -rw-rw---- 1 smmsp smmsp 10 Oct 29 09:10 dfn9T0A45e028173 -rw-rw---- 1 smmsp smmsp 557 Oct 29 09:10 qfn9T0A45e028173 |
--
[root@jo:~]#iptables -A FORWARD -p udp -s 192.168.100.100 --sport 1024: --dport 53 -m state --state NEW -j ACCEPT 방화벽 안에 있는 DNS(192.168.100.100) 에 질의 되기 위해 방화벽서버에서 FORWARD를 열어준다. . 그리고 내부 DNS(192.168.100.100)에 질의 되기 위해 NAT를 해준다. [root@jo:~]#iptables -A POSTROUTING -t nat -o eth0 -s 192.168.100.100 -j SNAT --to 192.168.10.179 |
--
[root@jo:~]#cat /proc/sys/net/ipv4/ip_forward 1 NAT 할 때는 항상 1인지 확인한다. |
--
[root@jo:~]#nslookup > www.daum.net Server: 192.168.100.100 Address: 192.168.100.100#53 . Non-authoritative answer: www.daum.net canonical name = top.g.daum.net. Name: top.g.daum.net Address: 211.32.117.30 Name: top.g.daum.net Address: 211.115.77.211 Name: top.g.daum.net Address: 211.115.77.212 Name: top.g.daum.net Address: 211.115.77.213 Name: top.g.daum.net Address: 211.115.77.214 > [root@jo:~]# [root@jo:~]# [root@jo:~]# [root@jo:~]# [root@jo:~]#mail -v naruto@boanlab.com Subject: hello gggggggggg ggggggggg ggggggg ggggg ggg Cc: naruto@boanlab.com... Connecting to [127.0.0.1] via relay... 220 jo.cho.iss ESMTP Sendmail 8.13.8/8.13.8; Thu, 29 Oct 2009 09:28:17 +0900 >>> EHLO jo.cho.iss |
--
250-jo.cho.iss Hello jo.cho.iss [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-DELIVERBY 250 HELP >>> MAIL From:<root@jo.cho.iss> SIZE=107 AUTH=root@jo.cho.iss 250 2.1.0 <root@jo.cho.iss>... Sender ok >>> RCPT To:<naruto@boanlab.com> >>> DATA . 250 2.1.5 <naruto@boanlab.com>... Recipient ok (will queue) 354 Enter mail, end with "." on a line by itself >>> . 250 2.0.0 n9T0SH2r028235 Message accepted for delivery naruto@boanlab.com... Sent (n9T0SH2r028235 Message accepted for delivery) Closing connection to [127.0.0.1] >>> QUIT 221 2.0.0 jo.cho.iss closing connection |
--
[root@jo:~]#tail -f /var/log/maillog . . Oct 29 09:28:19 jo sendmail[28235]: n9T0SH2r028235: to=<naruto@boanlab.com>, delay=00:00:00, mailer=esmtp, pri=30372, dsn=4.4.3, stat=queued Oct 29 09:28:19 jo sendmail[28234]: n9T0SHsB028234: to=naruto@boanlab.com, ctladdr=root (0/0), delay=00:00:02, xdelay=00:00:02, mailer=relay, pri=30107, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n9T0SH2r028235 Message accepted for delivery) . 메일 간다. |
--
[root@jo:~]#iptables -t nat -A PREROUTING -i eth0 -d 192.168.10.179 -j DNAT --to 192.168.100.100 |
--
ssh(메일서버_192.168.100.100) 열어준다.
#iptables –A FORWARD –p tcp –s 192.168.10.26 --sport 1024: -d 192.168.100.100 --dport 53 –m state --state NEW –j ACCEPT |
--
기존에 설정되어 있던 존파일을 바꿔준다.
(메일서버_192.168.100.100)에 있는 웹서버에 접속해보기
[root@woo:/var/named]#cat /var/named/ext.zone $TTL 1D @ IN SOA ns.cho.iss. woo.cho.iss. ( 1 6H 30M 14D 1D ) IN NS ns.cho.iss. IN MX 10 mailx ns IN A 192.168.10.179 mailx IN A 192.168.10.181 www IN A 192.168.10.179 ftp IN A 192.168.10.179 . [root@woo:/var/named]#cat /var/named/ext.rev $TTL 1D @ IN SOA ns.cho.iss. woo.cho.iss. ( 1 6H 30M 14D 1D ) IN NS ns.cho.iss. 179 IN PTR www.cho.iss. 179 IN PTR ns.cho.iss. 181 IN PTR mailx.cho.iss. #iptables -A FORWARD -p tcp -s 192.168.10.26 --sport 1024: -d 192.168.100.100 -m multiport --dports 80,443,110 -m state --state NEW -j ACCEPT http(80), https(443), dovecot(110)를 방화벽서버에서 "포워드" 해주게 세팅 |
--