今日无线
首页无线路由器设置无线路由器技术综合无线局域网局域网常识今日问答今日论坛域名注册
输入要查询的IP地址或者域名:
现在所处的位置:今日无线 > 技术综合 > LINUX入门 >

LINUX入门篇之使用IPTABLES架设防火墙

更新时间:2012年12月28日09:44   文章作者:今日无线   文章来源:今日无线

LINUX下使用IPTABLES可以架设起一套非常专业的包过滤防火墙,因为LINUX系统本身稳定性非常好,所以即使部署在性能一般的主机上也可以媲美专业的硬件防火墙。

过滤表

IPTABLES内置三张表,分别是fiter表、NAT表和mangle表,其中每张表中又有若干条链(chain):

Filter:主要处理与本机通讯的数据,含有三条链。

  • INPUT:处理要进入本机的数据包。
  • OUTPUT:处理要从本机发出的数据包。
  • FORWARD:处理本机要转发的数据包。

Nat:地址转换表,用于地址转换,含有三条链。

  • PREROUTING:转换目的地址。
  • POSTROUTING:转换源地址。
  • OUTPUT:处理发出数据包。

Mangle:这张表不经常用,这里不做介绍。

IPTABLES查看与清除

先说说查看与清除规则:

[root@root ~]# iptables [-t table] [-L] [-nv]

  • -t:选择表,就是前边所说的filter、nat以及mangle这三张表,如果省略,则默认为filter。
  • -L:列出当前表的所有规则。
  • -n:地址的部分将以IP地址表示,如果不加,则以文字信息显示,比如0.0.0.0/0,会显示anywhere。
  • -v:列出更为详细的信息,比如接口以及协议等。

[root@root ~]# iptables [-t table] [-FXZ]

  • -F:清除所有规则。
  • -X:清除用户自定义规则。
  • -Z:统计归零。

要清空防火墙规则就依次运行这三条指令,不过需要注意的是清除规则不会改变默认策略。

定义IPTABLES默认策略

[root@root ~]# iptables [-t table] –P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

  • -P:定义策略。
  • ACCEPT:设置默认策略为接受。
  • DROP:设置默认策略为丢弃。

一般来说,本机的策略配置为INPUT为DROP其他为ACCEPT即可。

  • [root@root ~]# iptables –P INPUT DROP
  • [root@root ~]# iptables –P OUTPUT ACCEPT
  • [root@root ~]# iptables –P FORWARD ACCEPT

IPTABLES基础规则

[root@root ~]# iptables [-AI 链] [-io 网络接口] [-p 协议] [-s 来源IP/网段] [-d 目标IP/网段] –j [ACCEPT|DROP]

  • -AI 链:-A是在链中(比如OUTPUT链)新增规则,放在原有规则的最后;-I则是插入到规则列表的第一位。
  • -io 网络接口:-i表示进入接口,比如eth0、lo等,与INPUT链对应;-o表示发出接口,与OUTPUT链对应。
  • -p 协议:制定针对的协议,比如ICMP、TCP、UDP或者ALL。
  • -s 来源IP/网段:设置源地址,单个IP或者网段都可以,在地址前加!表示当前IP(段)除外,如-s ! 192.168.1.0/24表示192.168.1.0/24这个网段除外。
  • -d 目标IP/网段:目的IP,解释同-s。
  • -j:后边接对匹配数据的操作,主要有ACCEPT、DROP以及LOG(记录)等。

举例:

[root@root ~]# iptables –A INPUT –i lo –j ACCEPT

表示接受发往lo(本机回环测试地址)的任意数据。

[root@root ~]# iptables –A INPUT –i eth0 –s 192.168.1.10 –j DROP

[root@root ~]# iptables –A INPUT –i eth0 –s 192.168.1.0/24 –j ACCEPT

上边两条规则表示接受192.168.1.0/24这个网段的数据,除了192.168.1.10之外,这里需要注意的是顺序非常重要,数据一旦匹配规则,后续规则就不会再进行匹配。

TCP、UDP规则

[root@root ~]# iptables [-AI 链] [-io 网络接口] [-p tcp/udp] [-s 来源IP/网段] [--sport 端口范围] [-d 目标IP/网段] [--dport 端口范围] –j [ACCEPT|DROP]

端口范围可以使连续的,比如1000:6000,不连续的:1000,6000,或者是单个端口。

举例:

[root@root ~]# iptables –A INPUT –i eth0 –p tcp –dport 21 –j DROP

上规则表示阻止数据进入本机的TCP21端口。

[root@root ~]# iptables –A INPUT –i eth0 –p tcp –s 192.168.1.0/24 –sport 1024:6000 –dport ssh –j DROP

以上规则表示只要192.168.1.0/24网段的主机1000:6000端口要连接本机的ssh端口,就会被拒,需要注意的是,只要添加—sport或者—dport就必须加端口范围,否则报错。

状态模块:MAC与RELATED

因为数据传输大多是双向的,如果本机对其他主机进行访问,其他主机要回传数据过来,这样也需要在防火墙上做设置,这时就需要用到状态模块了,不然需要加N多规则。

[root@root ~]# iptables –A INPUT –m state –state 状态

  • -m:一些模块,有state以及mac(网卡硬件地址)等。
  • --state:数据包状态,主要有INVALIED无效数据包;ESTABLISHED成功联机状态;NEW新建连接数据;RELATED与本机发出数据包相关数据包。

一般仅需要允许已建立连接以及有联系的数据包进入:

[root@root ~]# iptables –A INPUT –m state –state RELATED,ESTABLISHED –j ACCEPT

ICMP数据包规则

ICMP报文的用途非常的广泛,比如常用的PING命令就属于ICMP报文的一种,我们可以单独对这种报文制定规则。

[root@root ~]# iptables –A INPUT –p icmp –icmp-type 类型 –j ACCEPT

  • --icmp-type:加icmp报文的类型,比如8就表示响应请求。

[root@root ~]# iptables –A INPUT –i eth –p icmp –icmp-type 8 –j ACCEPT

表示本机允许其他主机对本机进行PING操作。

可以将IPTABLES规则写入/etc/sysconfig/iptables文件中,这样规则就会随系统启动而启动,文件实例如下:

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT

-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -p 50 -j ACCEPT

-A RH-Firewall-1-INPUT -p 51 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT