[color=red:58cb1da77d]作者:白金 网名:platinum(chinaunix) 超超白金(白金论坛)
欢迎转载,转载请保留上述信息
===========================================================================[/color:58cb1da77d]
以下是我自己的一个防火墙例子,对大家最近提出的DNAT(端口映射)的问题很有帮助
环境:
ADSL(eth0)网卡启动时不激活
内网(eth1)192.168.0.1/24
[code:1:58cb1da77d]
#! /bin/bash
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
# ALLOW ALL in PRIVATE NET
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth1 -j ACCEPT
# NAT
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# DNAT RADMIN to PRIVATE in platinum.3322.org
/sbin/iptables -A PREROUTING -t nat -p tcp -s ! 192.168.0.0/24 --dport 4899 -j DNAT --to 192.168.0.2:;4899
/sbin/iptables -A PREROUTING -t nat -p tcp -s ! 192.168.0.0/24 --dport 5000 -j DNAT --to 192.168.0.3:;4899
# SQUID
/sbin/iptables -A PREROUTING -t nat -p tcp -s 192.168.0.0/24 --dport 80 -j DNAT --to 192.168.0.1:;3128
# FORWARD edit by Platinum
/sbin/iptables -A FORWARD -p tcp --dport 21 -j ACCEPT # FTP
/sbin/iptables -A FORWARD -p tcp --dport 22 -j ACCEPT # SSH
/sbin/iptables -A FORWARD -p udp --dport 53 -j ACCEPT # DNS
/sbin/iptables -A FORWARD -p tcp --dport 80 -j ACCEPT # HTTP
/sbin/iptables -A FORWARD -p tcp --dport 443 -j ACCEPT # HTTPS
/sbin/iptables -A FORWARD -p udp --dport 8000 -j ACCEPT # QQ
/sbin/iptables -A FORWARD -p tcp --dport 25 -j ACCEPT # SMTP
/sbin/iptables -A FORWARD -p tcp --dport 110 -j ACCEPT # POP3
/sbin/iptables -A FORWARD -p tcp --dport 4899 -j ACCEPT # RADMIN
/sbin/iptables -A FORWARD -p tcp --dport 1863 -j ACCEPT # MSN (you must allow port 443)
/sbin/iptables -A FORWARD -p icmp -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# KEEP ON CONNECTIONS
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# exchange the other packets' "SOURCE" and "TARGET", and SEND it !!!
/sbin/iptables -A INPUT -j MIRROR
[/code:1:58cb1da77d]
此防火墙适用于静态IP及动态IP地址
原文请参考 http://bbs.chinaunix.net/forum/4/20040622/353019.html
| lyking 回复于:2004-06-22 23:27:26 |
| 多谢斑竹 |
| 双眼皮的猪 回复于:2004-06-22 23:28:32 |
| 帮顶~ |
| yuipr 回复于:2004-06-22 23:45:06 |
| /sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE 请问版主这是意思呀,
另外我想用linux做服务器,windows通过联到公网,就是最简单的那种,客户通过liunx能上网就成,顺便做一个nat就更好了,请问要如何实现呀,还望赐教. |
| laixi781211 回复于:2004-06-23 08:01:22 |
| /sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
这个就是NAT呀 再加下面一句就可以上网 echo 1 > /proc/sys/net/ipv4/ip_forward |
| platinum 回复于:2004-06-23 08:38:46 |
| 楼上说的对
打开转发开关有两种方法 1、每次启动后执行echo 1 > /proc/sys/net/ipv4/ip_forward 2、vi /etc/sysctl.conf,修改net.ipv4.ip_forward的值为1,这样启动后就自动支持转发了 MASQUERADE是SNAT的特例,对动态IP地址及静态IP地址均有效 如果想了解更多东西,请参看iptables文档 |
| wind521 回复于:2004-06-23 09:48:29 |
| 好,帮顶 |
| cwmould 回复于:2004-06-23 10:52:14 |
| 楼主的工作还是蛮细致的,我的脚本跟你的差不多,
即使问候问题 ip_conntrack_ftp ip_nat_ftp 这两个模块的功能是什么,我只知道当你想映射FTP时,没有它,只能打开被动方式的映射 |
| platinum 回复于:2004-06-23 11:02:20 |
| 第一个是透过防火墙的FTP工作方式,默认跟踪连接TCP-21的其他端口,并打开他
第二个是NAT用的,用于FIREWALL后面的机器 如果你的FTP-SERVER的端口不是21而是2121,那么需要改成 /sbin/modprobe ip_conntrack_ftp port=2121 这样,就不必为被动模式单独开辟一片高端端口并配置FTP服务(对于被动模式使用高端端口)了 |
| cgweb 回复于:2004-06-23 11:27:45 |
| 好! |
| 零二年的夏天 回复于:2004-06-23 11:57:36 |
| 白兄辛苦!:D |
| llzqq 回复于:2004-06-23 12:27:13 |
| 支持,如果大家都用“反弹式”防火墙,那就热闹了。 |
| platinum 回复于:2004-06-23 12:38:17 |
| 每反弹一次,TTL-1,LINUX默认TTL是64,当TTL=0时,反弹会终止
当然了,热闹是肯定会热闹一阵的 :mrgreen: |
| lingg2002 回复于:2004-06-23 20:14:57 |
| 关于ttl我一直有个疑问 比如我的ip包的ttl被设置为20,而我要访问的服务器位于美国,和我之间差了22个router.而每过一个R.你的ttl会减一,那么这个数据包应该属于到达不了那个服务器.
我们再平时上网的时候会不会发生这种情况?最好能够做一个试验,先把ttl设置为小一点,然后设置大一点. |
| 網中人 回复于:2004-06-24 01:25:38 |
| [quote:a644b68d85="lingg2002"]关于ttl我一直有个疑问 比如我的ip包的ttl被设置为20,而我要访问的服务器位于美国,和我之间差了22个router.而每过一个R.你的ttl会减一,那么这个数据包应该属于到达不了那个服务器.
我们再平时上网的时候会不会发生..........[/quote:a644b68d85] 的確如此, 因此,一般的作業系統都會使用高一點:64 or 256 or ... 你用 ping 指令隨便從如下這些目標就看得到 ttl 值了: localhost default gw external host |
| lingg2002 回复于:2004-06-24 09:22:01 |
| 好像是如果R把你的ttl的值减到0会发送一个icmp包回那台发送数据包的主机的吧 |
| leeneeks 回复于:2004-06-24 09:47:32 |
| 如果不是模块装入, 而是编入内核的话, 默认监视端口应该怎么改变? 是不是没办法改了?
[quote:6460cf525c="platinum"]第一个是透过防火墙的FTP工作方式,默认跟踪连接TCP-21的其他端口,并打开他 第二个是NAT用的,用于FIREWALL后面的机器 如果你的FTP-SERVER的端口不是21而是2121,那么需要改成 /sbin/modprobe ip_conntrack_..........[/quote:6460cf525c] |
| lingg2002 回复于:2004-06-24 09:56:16 |
| 先把模块卸载 rmmod |
| twisters 回复于:2004-06-24 10:25:22 |
| 看不明白“反弹”是在哪里。
“反弹”体现在哪行代码呢?? |
| llzqq 回复于:2004-06-24 10:26:00 |
| 最后的那行 |
| lingg2002 回复于:2004-06-24 10:39:22 |
| -j mirror 交换ip里面的源和目的地址 |
| root_wxt 回复于:2004-06-24 13:42:14 |
| 不要用镜像
没什么好处,就是最后一行的那句! |
| JohnBull 回复于:2004-06-24 14:32:55 |
| [quote:b8de9c3289="網中人"]
的確如此, 因此,一般的作業系統都會使用高一點:64 or 256 or ... 你用 ping 指令隨便從如下這些目標就看得到 ttl 值了: localhost default gw external host[/quote:b8de9c3289] 查看你的TTL值: cat /proc/sys/net/ipv4/ip_default_ttl |
| lingg2002 回复于:2004-06-24 14:35:49 |
| [quote:9a566bfe29]
網中人 写到: 的確如此, 因此,一般的作業系統都會使用高一點:64 or 256 or ... 你用 ping 指令隨便從如下這些目標就看得到 ttl 值了: localhost default gw external host 查看你的TTL值: cat /proc/sys/net/ipv4/ip_default_ttl [/quote:9a566bfe29] 这个我知道.我只是想知道如故你的ttl太小而访问不了网站,那么你的ie上面会怎么显示. |
| lingg2002 回复于:2004-06-24 14:47:41 |
| 好像现在有些网站的ttl会随访问者动态改变.
我现在ping 61.172.201.228在浙江和北京返回的ttl都是50 (ping 可以用i指定你的ttl) 然后ping 61.172.201.228 -i 12(设置我的ttl)返回的是Reply from 202.109.0.174(在这个R被丢弃): TTL expired in transit. 在北京Reply from 202.109.0.174(在这个R被丢弃): TTL expired in transit. 而在浙江用i13的话就正常了。但是北京的话就不行了. 就是说浙江和北京到61.172.201.228之间的Router数量是不通的. 但是我们看到返回的数据包的ttl确实相同的. 也就是说我这里到61.172.201.228 是13个R. 在北京这个i的值还要大一点。那么为什么返回到机器的ttl都是50阿 |
| bigbigbig 回复于:2004-06-24 14:50:24 |
| [quote:b2f7a9b5f0="platinum"]# ALLOW ALL in PRIVATE NET
/sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -i eth1 -j ACCEPT[/quote:b2f7a9b5f0] 想问一下这两句有什末用呢??不加可以吗?查了一下书,说是打开网络接口~感觉说得比较抽象~~~ 请教高手~ :em06: |
| lingg2002 回复于:2004-06-24 14:53:18 |
| 如果没有的话.你内部的数据包就有可能出不去.
也要一条一条的去匹配下面的规则了. |
| 给个理由先 回复于:2004-06-24 15:13:30 |
| 今天见了一个时尚杂志名子就叫<白金.platinum> 8)
是不是板主家办的呀,呵呵! :mrgreen:
本文关键:一个NAT+SQUID+DNAT+FORWARD+反弹式FIREWALL的例子
|