分享
 
 
 

菜鸟redhat9调试笔记之四(linux下的防火墙)

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

6月18日,最近忙于研究LFS和Gentoo,所以好久没写调试笔记,大家一定等者我的下一篇吧!

今天给大家将iptables,即linux下的防火墙

1. 安装我不讲了,RH9的rpm安装方式非常简单,大家只要在rh的安装源盘找到相应的rpm包就行。

然后 rpm -Uvh iptables-?.i386.rpm

2. 我们今天调试的环境是一台双网卡的服务器,通过DDN固定ip地址上网,两块网卡分别是

eth0: 211.101.251.4 外部ip地址,直接上网

eth1: 192.168.0.1 内部网卡地址,连接192.168.0.0/255.255.255.0网断局域网

3.客户端A是台WWW,地址是192.168.0.2。我们将利用后面的DNAT功能,让外面的机器能访问这台机器的www服务。其他客户端都在192.168.0.0/24网段,且网关都指向192.168.0.1

4. 如果大家要使用iptables的NAT功能,之前我们要确保系统内核配置的是正确的,我的iptables好几次就因为内核编译错误,造成客户端不能正常使用SNAT功能,甚至不能加载ip_tables模块。这是一般的内核配置,基本上iptables的NAT功能能正常使用,内核版本不同可能显示不一样,大家灵活掌握就行,应该不会出现麻烦。

Networking options --->

[*] Network packet filtering (replaces ipchains)

[*] TCP/IP networking

IP: Netfilter Configuration --->

<M> Connection tracking (required for masq/NAT) (NEW)

<M> FTP protocol support (NEW)

<M> IP tables support (required for filtering/masq/NAT) (NEW)

<M> limit match support (NEW)

<M> MAC address match support (NEW)

<M> netfilter MARK match support (NEW)

<M> Multiple port match support (NEW)

<M> TOS match support (NEW)

<M> tcpmss match support (NEW)

<M> Connection state match support (NEW)

<M> Packet filtering (NEW)

<M> REJECT target support (NEW)

<M> Full NAT (NEW)

<M> MASQUERADE target support (NEW)

<M> REDIRECT target support (NEW)

<M> Packet mangling (NEW)

<M> TOS target support (NEW)

<M> MARK target support (NEW)

<M> LOG target support (NEW)

<M> TCPMSS target support (NEW)

<M> ipchains (2.2-style) support (NEW)

< > ipfwadm (2.0-style) support (NEW)

5. 我们要打开ip_forward,

直接修改/etc/sysctl.conf 这个文档,把net.ipv4.ip_forward= 1 并把前面的#去掉,或者

echo "1" > /proc/sys/net/ipv4/ip_forward ,但是下次重起还是变0,所以还是直接修改文档的好。

6. 我们在使用iptables之前,先要了解iptables的参数:

ACCEPT

接受这个封包,也就是可以通过规则检验而放行、顺利通过这个链。

DROP

丢弃这个封包,也就不能通过规则检验而被挡掉。

REJECT

与 DROP 一样,但会向来源地送出 ICMP 封包,告之对方‘ port unreachable ’的错误信息。

REDIRECT

将封包重导至 本机端 的其它 port 。

SNAT / DNAT / MASQUERADE

这些都是 NAT 的处理,视要求而修改为特定的 Source Socket 或 Destination Socket 、或动态的根据路由判断後的界面而修改 Source Socket 。

建立一个新的(自定)链 ( -N 。

删除一个空的(自定)链 ( -X 。

改变一个内建链的原则 ( -P 。

列出一个链中的规则 ( -L 。

清除一个(内建)链中的所有规则 ( -F 。

在一个链的最後面新增( append 一条规则 ( -A 。

在链内某个位置插入( insert 一条新规则( -I 。

在链内某个位置替换( replace 一条规则 ( -R 。

在链内某个位置删除( delete 一条规则 ( -D 。

删除(delete) 链内第一条符合的规则 (-D)。

在 iptables 中,要指定规则是欲作用在那一个规则表上(使用 -t 来指定,如 -t nat),若不指定,则预设是作用在 filter 这个表。

封包于防火墙中的流向 ( INPUT、OUTPUT、FORWARD

相关界面 ( -i 或 -o

所属协定 ( -p

连线类型 ( -m state

封包类型 ( --syn

来源地 ( -s

来源端口 ( --sport

目的地 ( -d

目的地端口 ( --dport

好了,开始工作!

首先查看一下机器上的有关于iptables的设定情况

作法如下:

iptables -L -n 或者 iptablse -t nat -L -n

定义参数

$DDN_IP="211.101.251.4"

如果你以前调试过iptables那么我们先清除先前的设定

iptables -F 清除预设表 filter 中,所有规则链中的规则

iptables -X 清除预设表 filter 中,使用者自订链中的规则

iptables -F -t mangle 清除mangle表中,所有规则链中的规则

以此类推:

iptables -t mangle -X 清除mangle表中,使用者自订链中的规则

iptables -F -t nat 清除nat表中,所有规则链中的规则

iptables -t nat -X 清除nat表中,使用者自订链中的规则

首先我们来设置 filter table 的预设策略

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

当然我们也可以使用DROP,但一般我们不会这么做

接下来配置nat tables表

&&一个典型的例子IP 伪装(SNAT应用),即局域网网所有的机器都通过eth0做的透明网关出去,不做其他限制,

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

假如你的上网方式是adsl拨号上网,adsl接口是ppp0,那么也可以这么设置

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE

好了,现在我们要把这些命令保存为策略文件,好让iptables认出

/etc/rc.d/init.d/iptables save 系统会根据你刚才输入的命令保存为一个策略配置文件/etc/sysconfig/iptables

然后我们运行/etc/rc.d/init.d/iptables start 启动iptables,并加载配置文件

好了现在你的局域网客户端都可以通过这台服务器上网,ftp,qq,www都没有限制,因为我们现在设置的是透明的防火墙。我们总结一下刚才的命令是:

源码:--------------------------------------------------------------------------------

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

/etc/rc.d/init.d/iptables save

/etc/rc.d/init.d/iptables start

--------------------------------------------------------------------------------

&&另外一个典型的例子是DNAT,利用转址、转 port 的方式,使外网的封包,可以到达内网中的服务器主机,俗称虚拟主机。这种方式可保护服务器主机大部份的 port 不被外界存取,只开放公开服务的通道(如 Web Server port 80),因此安全性较高。

比如: 凡对 211.101.251.4:80 连线者, 则转址至 192.168.0.2:80

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 211.101.251.4 --dprot 80 -j DNAT --to-distination 192.168.0.2:80

同样DNAT还可以利用在DMZ区域的mail,FTP等服务,大家就安需自己写吧!

以上讲的策略对大多数朋友来说已经绰绰有余了,但有些公司的老板可不是这么想,老板们往往希望员工好好工作,除了能上网收信以外,其他的诸如 FTP,QQ一律静止,这样的话iptables的设置就比较大,我们不能简单的MASQUERADE。比如我们现在只开放53(dns)80,25, 110三个端口用来平时的www和mail服务,那么我们就可以这样设置

源码:--------------------------------------------------------------------------------

ptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source 211.101.251.4

1192.168.0.0/24 这个网段,伪装成 211.101.251.4 出去。

iptables -A OUTPUT -o eth0 -p tcp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d 211.101.251.4 --dport 1024:65535 -j ACCEPT

开放内网可以观看外网的网站。

iptables -A OUTPUT -o eth0 -p tcp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d 211.101.251.4 --dport 1024:65525 -j ACCEPT

你可以送信给别人

iptables -A OUTPUT -o eth0 -p tcp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d 211.101.251.4 --dport 1024:65535 -j ACCEPT

开放内网可以对外网的 POP3 server 取信件。

iptables -A OUTPUT -o eth0 -p udp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT

iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d 211.101.251.4 --dport 1024:65535 -j ACCEPT

开放查询外网的 DNS 主机

iptables -A OUTPUT -o eth0 -p icmp -s 211.101.251.4 --icmp-type 8 -d any/0 -j ACCEPT

iptables -A INPUT -i eth0 -p icm -s any/0 --icmp-type 0 -d 211.101.251.4 -j ACCEPT

开放 ping功能

--------------------------------------------------------------------------------

好了,差不多了大家学的怎么样,反正这些已经够你用了,其他的你就举一反三吧!

这里还要讲的是我的服务器是运行着squid服务,由于带宽有限,所以虽然开了透明SNAT功能,但还是希望客户端特别是www的访问还是使用 squid服务,这样可以节省不少带宽资源,这里我们就可以用到iptables的Transparent功能,让iptables的客户端80端口的访问强行转移到squid的3128端口,

首先,修改 /etc/squid/squid.conf,找到下面几行,并修改为如下样子:

httpd_accel_host redhat.frankhome.com # 请修改为您的 squid 主机名称

httpd_accel_port 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

然后/etc/rc.d/init.d/squid restart

接着添加以下策略:

iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-ports 3128

这时候,您的 Transparent Proxy 就起来了!如果您要测试它,可以取消 client 端的 proxy 设定,并将 squid关闭,然後测试是否不能连线(建议用一个未曾浏览过的网址来测试)?然则,再将 squid打开,如果能这样又能恢复连线的话,那就已经成功了!这样有一个好处是:以後您再也不必跑到 client 那边设定 proxy;而且,更好的地方在於:重复性的连线再也无需占用宝贵的对外频宽,速递当然也能'假性'的获得提高

ok!今天就写到这里,大家学了多少?一定要慢慢消化哦!:)

6月19日,今天就iptables大家比较关心的问题来个补充说明

1.关于DNAT的补充说明!

对于用ADSL拨号上网的用户,外部网卡往往获取的ip地址是不固定的,所以虚拟主机,或者WWW,mail,ftp发布可能会有些问题,在此针对ADSL的不固定IP情况设置相应的DNAT策略,使能正常发布内网的FTP,MAIL,WWW。

我们这里以发布WWW为例,还是192.168.0.2为内部WWW服务器,只不过现在的服务器是通过ADSL上网

所以我们添加以下策略:

ptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80

将80请求转发至192.168.0.2:80端口

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.2 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.1

返回a.b.b.d时数据源来自同一子网,就将其源地址更改为192.168.0.1,从eth0发出,并在连接跟踪表中查出a.b.c.d是从ppp0进来的,又由ppp0将此数据发出。(我也看不明白为何要有这句话)

iptables -A INPUT -p tcp --dport 80 -i ppp0 -j ACCEPT

允许80端口访问的语句。

然后重新

/etc/rc.d/init.d/iptables save

/etc/rc.d/init.d/iptables restart

其他如FTP发布也可举一反三:

ptables -t nat -A PREROUTING -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.0.2:21

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.2 -p tcp -m tcp --dport 21 -j SNAT --to-source 192.168.0.1

iptables -A INPUT -p tcp --dport 21 -i ppp0 -j ACCEPT

上网的时候,用ifconfig看看ppp0的地址,然后用那个地址看看WWW是否正常发布。呵呵,应该是没问题的哦!

2.关于封QQ,联众和边峰游戏的补充说明

相信很多公司的老板会让网管通过防火墙来封锁QQ,联众和边峰游戏,但又不能耽误其他事,我这里有个简单的配置文件服务器也是通过ADSL上网,能简单的实现以上要求:

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -A FORWARD -p icmp -j ACCEPT 开放ping功能

iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT 开放网页浏览功能

iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 25 -j ACCEPT 开放smtp发信功能

iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 110 -j ACCEPT 开放pop3收信功能

iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 21 -j ACCEPT 开放默认FTP功能

iptables -A FORWARD -p tcp --dport 4000 -o ppp0 -j DROP 封锁边峰

iptables -A FORWARD -p tcp --dport 2000 -o ppp0 -j DROP 封锁联众

iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 8000 -j DROP 封锁QQ(有时udp4000端口也要封锁)

iptables -A FORWARD -p udp -j ACCEPT 允许其他UDP服务,比如DNS等

IPTABLES -A FORWARD -p TCP --dport 1863 -j ACCEPT

IPTABLES -A FORWARD -p TCP --dport 7801:7825 -j ACCEPT

IPTABLES -A FORWARD -p TCP --dport 6891:6900 -j ACCEPT

上面三条是开放了MSN, 不知行不行?

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

3.我不想让人家可以PING到我

这大概是做防火墙用到最多的一种了 你可以在iptables写这句话

iptables -A INPUT -p icmp --icmp-type echo-request -i ppp0 -j DROP

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有