QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16457|回复: 38

Linux 防火墙 Iptables

[复制链接]
发表于 2002-11-20 20:49:03 | 显示全部楼层 |阅读模式


RH 的 防火墙默认的做的不好。例如我的安装时形成的 /etc/sysconfig/iptables :



# Firewall configuration written by lokkit
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
#       firewall; such entries will *not* be listed here.
*filter
:INPUT ACCEPT [0]
:FORWARD ACCEPT [0]
:OUTPUT ACCEPT [0]
:RH-Lokkit-0-50-INPUT - [0]
-A INPUT -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT


lokkit 其实也不好用。我们 需要 愈简单愈实用 的 防火墙规则。

假若您是客户端,没有对外,您可以去除其所有规则 (/etc/sysconfig/iptables):


*nat
REROUTING ACCEPT [0]
OSTROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT
*mangle
REROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT
*filter
:INPUT ACCEPT [0]
:FORWARD ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT

 楼主| 发表于 2002-11-20 21:00:07 | 显示全部楼层


再例如我的 www (MySQL 数据库也在这机器上)服务器上的 /etc/sysconfig/iptables 文件:


# =======================  古公  =======================
#
# /etc/sysconfig/iptables 文件:
#
# mangle 段
*mangle
REROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT
#

#
# nat 段
*nat
REROUTING ACCEPT [0]
OSTROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
#
# 我的机器可以走这个机器做网关上 Internet 网。
# 需要在 /etc/sysctl.conf 文件里面修改成 net.ipv4.ip_forward = 1
# 或者 echo 1 > /proc/sys/net/ipv4/ip_forward
[0] -A POSTROUTING -s 192.168.20.18 -j MASQUERADE
# 若你的 公网的 IP 地址是固定的,使用这个语句似乎更好些:
#[0] -A POSTROUTING -s 192.168.20.18 -j SNAT --to 211.148.130.131

COMMIT
#

#
# filter 段
*filter
:INPUT ACCEPT [0]
:FORWARD ACCEPT [0]
:OUTPUT ACCEPT [0]

#
# 屏蔽 来自 microsoft 的站点:
#[0] -A INPUT -s 207.46.0.0/255.255.0.0 -j DROP
#[0] -A INPUT -d 207.46.0.0/255.255.0.0 -j DROP
#

# 防止IP欺骗:
#    所谓的IP欺骗就是指在IP包中存在着不可能的IP源地址或目标地址。
# eth1是一个与外部Internet相连,而192.168.20.0则是内部网的网络号,
# 也就是说,如果有一个包从eth1进入主机,而说自己的源地址是属于
# 192.168.20.0网络,或者说它的目标地址是属于这个网络的,那么这显
# 然是一种IP欺骗,所以我们使用DROP将这个包丢弃。
[0] -A INPUT -d 192.168.20.0/255.255.255.0 -i eth1 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth1 -j DROP
#
# 同样的,如果有包要通过eth1向Internet,而且它的源地址或目标地址是属于
# 网络192.168.20.0,那么显然也是不可能的。我们仍然使用DROP将它丢弃。
[0] -A OUTPUT -d 192.168.20.0/255.255.255.0 -o eth1 -j DROP
[0] -A OUTPUT -s 192.168.20.0/255.255.255.0 -o eth1 -j DROP
#
# 防止广播包从IP代理服务器进入局域网:
[0] -A INPUT -s 255.255.255.255 -i eth0 -j DROP
[0] -A INPUT -s 224.0.0.0/224.0.0.0 -i eth0 -j DROP
[0] -A INPUT -d 0.0.0.0 -i eth0 -j DROP
#    当包的源地址是255.255.255.255或目标地址是0.0.0.0,则说明它是一个
# 广播包,当广播包想进入eth0时,我们就应该DROP,丢弃它。而240.0.0.0/3
# 则是国际标准的多目广播地址,当有一个源地址是属于多目广播地址的包,
# 我们将用DROP策略,丢弃它。

#
# 屏蔽 windows xp 的 5000 端口(这个端口是莫名其妙的 !)
[0] -A INPUT -p tcp -m tcp --sport 5000 -j DROP
[0] -A INPUT -p udp -m udp --sport 5000 -j DROP
[0] -A OUTPUT -p tcp -m tcp --dport 5000 -j DROP
[0] -A OUTPUT -p udp -m udp --dport 5000 -j DROP
# 原来是用来跑 vpn 的,呵呵,我误解了。
#

#
# 对于本局域网用户不拒绝访问:
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -j ACCEPT
#

#
# 防止 Internet 网的用户访问 MySQL 服务器(就是 3306 端口):
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 3306 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 3306 -j DROP
#

#
# 防止 Internet 网的用户访问 SAMBA 服务器:
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 137:139 -j DROP
[0] -A INPUT -s 211.148.130.129 -i eth1 -p udp -m udp --dport 137:139 -j DROP
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 137:139 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p udp -m udp --dport 137:139 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 137:139 -j DROP
[0] -A INPUT -p udp -m udp --dport 137:139 -j DROP
#

#
[0] -A INPUT -i eth1 -p udp -m udp --dport 3 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 3 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 111 -j DROP
[0] -A INPUT -i eth1 -p udp -m udp --dport 111 -j DROP
#

#
[0] -A INPUT -i eth1 -p udp -m udp --dport 587 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 587 -j DROP
#

# 让人家 ping 不通我 !
[0] -A INPUT -i eth1 -s 192.168.30.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -s 211.148.130.128/28 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j DROP
#
#
COMMIT
# =======================  结束 =======================
# =======================  古公 =======================
回复

使用道具 举报

 楼主| 发表于 2002-11-20 21:32:10 | 显示全部楼层
再例如我的 mail 服务器上的 /etc/sysconfig/iptables 文件:


# =======================  古公  =======================
#
#  /etc/sysconfig/iptables 文件:
#

#
# mangle 段
*mangle
REROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT
#

#
# nat 段
*nat
REROUTING ACCEPT [0]
OSTROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
# 我的机器可以走这个机器做网关上 Internet 网。
# 需要在 /etc/sysctl.conf 文件里面修改成 net.ipv4.ip_forward = 1
# 或者 echo 1 > /proc/sys/net/ipv4/ip_forward
# 若你的 公网的 IP 地址是固定的,使用这个语句似乎更好些:
#[0] -A POSTROUTING -s 192.168.20.18 -j SNAT --to 211.148.130.132

COMMIT
#

#
# filter 段
*filter
:INPUT ACCEPT [0]
:FORWARD ACCEPT [0]
:OUTPUT ACCEPT [0]

#
# 屏蔽 来自 microsoft 的站点:
#[2] -A INPUT -s 207.46.0.0/255.255.0.0 -j DROP
#[0] -A INPUT -d 207.46.0.0/255.255.0.0 -j DROP
#

# 防止IP欺骗:
#    所谓的IP欺骗就是指在IP包中存在着不可能的IP源地址或目标地址。
# eth1是一个与外部Internet相连,而192.168.20.0则是内部网的网络号,
# 也就是说,如果有一个包从eth1进入主机,而说自己的源地址是属于
# 192.168.20.0网络,或者说它的目标地址是属于这个网络的,那么这显
# 然是一种IP欺骗,所以我们使用DROP将这个包丢弃。
[0] -A INPUT -d 192.168.20.0/255.255.255.0 -i eth1 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth1 -j DROP
#
# 同样的,如果有包要通过eth1向Internet,而且它的源地址或目标地址是属于
# 网络192.168.20.0,那么显然也是不可能的。我们仍然使用DROP将它丢弃。
[0] -A OUTPUT -d 192.168.20.0/255.255.255.0 -o eth1 -j DROP
[0] -A OUTPUT -s 192.168.20.0/255.255.255.0 -o eth1 -j DROP
#

# 防止广播包从IP代理服务器进入局域网:
[0] -A INPUT -s 255.255.255.255 -i eth0 -j DROP
[0] -A INPUT -s 224.0.0.0/224.0.0.0 -i eth0 -j DROP
[0] -A INPUT -d 0.0.0.0 -i eth0 -j DROP
#    当包的源地址是255.255.255.255或目标地址是0.0.0.0,则说明它是一个
# 广播包,当广播包想进入eth0时,我们就应该DENY,丢弃它。而240.0.0.0/3
# 则是国际标准的多目广播地址,当有一个源地址是属于多目广播地址的包,
# 我们将用DENY策略,丢弃它。

#
# 屏蔽 windows xp 的 5000 端口(这个端口是莫名其妙的 !)
[0] -A INPUT -p tcp -m tcp --sport 5000 -j DROP
[0] -A INPUT -p udp -m udp --sport 5000 -j DROP
[0] -A OUTPUT -p tcp -m tcp --dport 5000 -j DROP
[0] -A OUTPUT -p udp -m udp --dport 5000 -j DROP
# 原来是用来跑 vpn 的,呵呵,我误解了。
#

#
# 防止 Internet 网的用户访问 MySQL 服务器(就是 3306 端口):
#[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 3306 -j DROP
#[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
#[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT
#[0] -A INPUT -p tcp -m tcp --dport 3306 -j DROP
#

#
# 防止 Internet 网的用户访问 SAMBA 服务器:
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 137:139 -j DROP
[0] -A INPUT -s 211.148.130.129 -i eth1 -p udp -m udp --dport 137:139 -j DROP
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 137:139 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p udp -m udp --dport 137:139 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 137:139 -j DROP
[0] -A INPUT -p udp -m udp --dport 137:139 -j DROP
#

#
# 对于本局域网用户不拒绝访问:
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -j ACCEPT
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p udp -j ACCEPT
#

#
# 防止 Internet 网的用户访问 pop3 服务器(110 端口):
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 110 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 110 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 110 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 110 -j DROP
#

#
# 防止 Internet 网的用户访问 imap 服务器(143 端口):
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 143 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 143 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 143 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 143 -j DROP
#

#
# 防止 Internet 网的用户访问 X windows 服务器(6000 端口):
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 6000 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 6000 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 6000 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 6000 -j DROP
#

#
# 防止 Internet 网的用户访问 X XFS 字体服务器(7100 端口):
[0] -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 7100 -j DROP
[0] -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 7100 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 7100 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 7100 -j DROP
#

#
[0] -A INPUT -i eth1 -p udp -m udp --dport 3 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 3 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 111 -j DROP
[0] -A INPUT -i eth1 -p udp -m udp --dport 111 -j DROP
#

#
[0] -A INPUT -i eth1 -p udp -m udp --dport 587 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 587 -j DROP
#

# 让人家 ping 不通我 !
[0] -A INPUT -i eth1 -s 192.168.30.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -s 211.148.130.128/28 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j DROP
#
#
COMMIT
# =======================  结束 =======================
# =======================  古公 =======================

回复

使用道具 举报

发表于 2002-11-21 09:54:02 | 显示全部楼层
你发言,我收益!

谢谢!
回复

使用道具 举报

发表于 2002-11-21 11:23:04 | 显示全部楼层
还有!
最新版的IPtables你有吗?
或哪里下?

谢谢!
回复

使用道具 举报

 楼主| 发表于 2002-11-21 12:56:27 | 显示全部楼层
我不用最新的,我用稳定的。
回复

使用道具 举报

 楼主| 发表于 2002-11-21 13:06:23 | 显示全部楼层
也不能说是 最稳定 的。应该说 系统 越简单 越好 !
回复

使用道具 举报

发表于 2002-11-24 17:39:38 | 显示全部楼层
gugong: 请问一下:

你的/etc/sysconfig/iptables这个文件里的写法是redhat专有的吗?

如果是, 是不是有专用的脚本来处理这个配置文件?

(我没有装RH8,服务器上用的DEBIAN)
我所知道是: 所有的规则和链的添加都用iptables命令来做的.
我的防火墙规则是直接写的
/usr/sbin/iptables -A ....... #规则
回复

使用道具 举报

 楼主| 发表于 2002-11-25 08:37:56 | 显示全部楼层
也不是 rh 专有的。md 也这样。

它由 /etc/init.d/iptables 来加载这个文件来启动 防火墙规则。

直接写也肯定是可以的呀。
回复

使用道具 举报

发表于 2002-11-30 23:21:07 | 显示全部楼层
up
回复

使用道具 举报

发表于 2003-1-30 17:08:47 | 显示全部楼层
请把通过的内容放在前面(所有的iptable **********),这样比较安全
回复

使用道具 举报

发表于 2003-2-6 14:14:26 | 显示全部楼层
是不是修改我的iptable重新启动服务器就可以用了,还是要怎么设置才能用
回复

使用道具 举报

发表于 2003-2-13 22:07:39 | 显示全部楼层
主机要做网关代理上网的话,必须设置nat段吗?
只用filter段的FORWARD行不行(nat默认)?
回复

使用道具 举报

发表于 2003-3-14 07:59:20 | 显示全部楼层
gugong:
其中的一段:
# 让人家 ping 不通我 !
[0] -A INPUT -i eth1 -s 192.168.30/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -s 211.148.130.128/28 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j DROP
#

中的第一句中的"..... -s 192.168.30/24 -p ......"似乎缺一节数?因为IP地址一般是x.x.x.x,即应该是"..... -s 192.168.30.x/24 -p ......"。不知这个遗漏的"x"应该是什么?

这种情况在另一个帖子中也有。
回复

使用道具 举报

 楼主| 发表于 2003-3-14 09:32:36 | 显示全部楼层
192.168.30.0/24 即是 192.168.30.0/255.255.255.0

192.168.0.0/16 即是 192.168.0.0/255.255.0.0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-28 18:02 , Processed in 0.101937 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表