一、清除规则与观察规则;
1、查看当前本机的防火墙规则
#iptables [-t tables] [-L ][-n]
●-t :后面接iptables 的table,列入nat 或 filter ,如果没有-t table,默认就是-t filter;
●-L :列出当前的table的规则
●-n :不进行IP 与HOSTNAME的转换,屏幕显示信息的速度会快很多。
[root@jiankong ~]# iptables -L -n
Chain INPUT (policy ACCEPT) /默认动作
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)/默认动作
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)/默认动作
target prot opt source destination
[root@jiankong ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
/与filter类似,nat表格里有prerouting 、postrouting及 output三条链;
2、清除规则
#iptables [-t tables][-FXZ]
参数说明:
●-F:清除所有的已设置的规则;
●-X:杀掉所有用户建立的链;
●-Z将所有链的技术与流量统计清零
●●
一般来说 在重新定义防火墙的时候要首先清除规则,防火墙的规则顺序是有特殊意义的,所以先清除规则,然后在设置;
二、定义策略
清除规则之后,接下来就是设置规则的策略。还记得策略指的是什么么吗,当您的数据包不在设置规则之内时,则该数据包通过与否,以pollicy的设置为准。通常这个策略在filter这个table的INPUT链定义,其定义严格一点教好,而FORWARD、OUTPUT则可定的轻松一点。
鸟哥的做法通常是将INPUT的policy定义为 DROP,全部档掉在说。
语法
[root@jiankong~]#iptables [-t table][-P][INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING、OUTPUT][ACCEPT 、DROP]
●-t :指定表;
●-P : 定义策略policy(为大写);
●INPUT :数据包输入主机的方向;
●OUTPUT:数据包输出主机的方向;
●FORWARD:数据包为不进入主机而向外在传输出去的方向;
●PREROUTING:在进入路由之前进行的工作;
●POSTROUTING:在进入路由器之后进行的工作;
●OUTPUT:数据包为输出主机的方向;
[root@jiankong~]#/sbin/iptables -P INPUT DROP
[root@jiankong~]#/sbin/iptables -P OUTPUT ACCEPT
[root@jiankong~]#/sbin/iptables -P FORWARD ACCEPT
[root@jiankong~]#/sbin/iptables -t nat -P PREROUTING ACCEPT
....
如果没有加载net模块 会提示错误信息,提示你去家族模块:
除了INPUT之外,其他项都设置为接受,这样的设置,我们的主机的数据包可以出去,但是任何数据包无法进入,包括送去数据包的响应数据包(ACK).
1、增加与插入规则
下面所记录的内容完全针对LINUX主机进行设置,仅针对filter表,至于NAT后面的主机,以后在练习;
iptables 规则的基本语法
[root@jiankong~]#iptables [-t filter]
[-AI INPUT 、OUTPUT、FORWARD]
[-io interface][-p tcp、udp、icmp、all][-s IP/network][--sport ports][-d IP/network][--dport ports] -j [ACCEPT、DROP]
●-A:新增加一条规则,该规则增加在最后面;
●-I:插入一条规则,如果没有设置规则顺序,默认是插入变成第一条规则,后面的规则一次递减;
※INPUT :规则设置为filter table的INPUT链;
※OUTPUT:规则设置为filter table的OUTPUT链;
※FORWARD:规则设置为filter table的FORWARD链;
●-i : 设置数据包进入网卡的接口;
●-O : 设置数据包流出网卡的接口;
※interface :网络接口卡,eth0、eth1....
●-p : 数据包使用的协议;
●-s :来源数据包的IP地址或网段;
●--sport :来源数据包的端口号,也可以使用单个端口port1或者多个端口port1:port3;如:21:23 表示同时通过21、22、23号端口;
●-d :目标主机的IP地址或者网段;
●--dport :目标主机的端口号
●-j : 动作,可以接下面的动作;
※ACCEPT :接受该数据包;
※DROP :丢弃该数据包;
※※※LOG :将该数据包的信息记录下来(默认记录到/var/log/messages文件);
范例一:将来自lo的所有数据包都授予接受
[root@jiankong ~]#iptables -A INPUT -i lo -j ACCEPT
“没有设置的规定,则表示该规定完全接受”
范例二:将来自192.168.0.1这个IP 数据包都授予接受;
[root@jiankong ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.1 -j ACCEPT
范例三:来自192.168.1.0这个C class网段的任何一台计算机的数据包予以接受;
[root@jiankong ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 -j ACCEPT
范例4:来自192.168.1.25的数据包都丢弃
[root@jiankong ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.25 -j DROP
范例五:只要是想进入本机端口21 的数据包就丢弃
[root@jiankong ~]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
范例六:来自192.168.0.24的数据包,想要到我的137、138、139端口时都接受
[root@jiankong ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.24 --dport 137:139 -j ACCEPT
范例七:只要是接触到我主机的端口25,就将该数据包记录下来
[root@jiankong ~]# iptables -A INPUT -p tcp --dport 25 -j LOG
对icmp协议进行设置此外TCP数据包header上的SYN标记功能与否也能设置,下面举例子:
●[!]--syn这个设置仅用于-p tcp规则,因为只有TCP包有SYN标记;当TCP数据包带有SYN标记,表示这个连接是对方主动发起的,若在--syn 之前加上!表示该数据包不带有syn(刚好意思相反)
范例一:将来自192.168.100.200的主动连接的数据包丢弃
[root@jiankong ~]# iptables -A INPUT -p tcp -i et0 -s 192.168.100.200 --syn -j DROP
●--icmp-type:可以管制ICMP数据包的某些类型,
类型代号 类型名称 意义
3 distination unreachable 表示目的不可到达
4 source quench 当route的负载过大,这个类型吗用来
让发送方停止继续发送信息(源抑制)
5 redirect 用来重定向路由路径的信息
8 echo request 响应请求(ECHO-REQUEST)
11 time exeeded for a dataram 当数据包在某些路由传送过程中超时时
,次类型代码可以告知发送方数据包
已被忽略;
12 parameter problem on a datagram 当一个ICMP数据包重复之前的
错误时,会回复来源主机参数错误的信息
13 timestamp request 时间戳请求;要求对方提供时间信息,
用以计算路由时间的差异以满足同步协议
的要求;
14 timestamp replay 时间戳应答;次信息纯粹是相应13类型;
15 information request 信息请求(*已作废)
16 information replay 信息应答(*已作废)
17 address mask request 地址掩码请求;用来查询子网mask
设置信息;
18 address mask replay 地址掩码应答;相应子网掩码查询信息;
[root@jiankong ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
当使用这个指令后,表示未来别人ping我们的主机时,主机将不会响应,所以对方主机就会显示无法连接到我们的主机;
●-m :表示数据包的状态,有一下几种:
※-m mac --mac-source aa:bb:cc:dd:ee:ff
※-m state --state <状态>
状态有多种,包括:
INVALID:无效的数据包,例如已经破损的数据包状态;
ESTABLISHED :已经成功连接的数据包;
NEW:想要新建连接的数据包状态;
RELATED:这个最常用,表示这个数据包时与我们主机发送出去的数据包有关,可能是响应的数据包也可能是连接成功之后的传送数据包。通常情况下启用这个状态,因为设置它之后,只要未来本主机发送出去的数据包,即使我们没有设置数据包的INPUT规则,有关的数据包还是可以进入我们的主机,可以简化相当多的设置规则;
范例三:让aa:bb:cc:dd:ee:ff网卡无法使用我们主机的资源;
[root@jiankong ~]# iptalbes -A INPUT -p all -m mac --mac-source aa:bb:cc:dd:ee:ff -j DROP
范例四、让已经建立或与我们主机有关的响应的数据包通过,但是让不合法的,以及向要尝试新建的数据包阻塞;
[root@jiankong ~]#iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@jiankong ~]#iptables -A INPUT -p tcp -m state --state
INVALID,NEW -j DROP
●-j :<动作>:除了比较常见的ACCEPT 与DROP之外,还有如下动作:
※REDIRECT --to-port<port number>
这个也比较常见,这就是进行本机端口的转换,不过特别注意的是,这个动作仅够在
nat table 的PREROUTING及OUTPUT链上使用
※MASQUERADE:数据包伪装,这个就是NAT主机最重要的功能,进行数据包伪装;
范例五:将要求与80端口连接的数据包转发到8080端口;
[root@jiankong ~]#iptables -t nat -A PREROUTING -p tcp --dport 80
-j REDIRECT --to-ports 8080
范例六:进行数据包的伪装,将来在192.168.0.0/24的数据包的来源IP伪装成
本机的ppp0接口;
[root@jiankong ~]#iptables -t nat -A POSTROUTING -s 192.168.0.0/24
-o ppp0 -j MASQUERADE
三、记录与恢复防火墙规则
如何观察当前主机上的防火墙规则?可以使用iptables -L -n 命令来观察,不过,
该指令所显示的信息还是不足够,这时我们可以使用下面的两天命令,将当前主机上的
防火墙机制记录下来,下次想将这个规则恢复时,鞥直接利用指令将其恢复;
[root@jiankong ~]# iptables-save >/home/iptalbes.text(filename)
上面的指令用于将主机上的防火墙规则保存到filename文件,该文件为ascii格式
,可以进入查阅。
[root@jiankong ~]# iptables-restore < filename
上面的指令用于将filename防火墙规则文件,(注意,不是shell scripts)的格式
读入当前Linux主机环境中