Iptables学习笔记

Iptables:IP信息包过滤系统
包含四张表:Filter、Nat、Mangle、Raw;五种链:Input、Output、Forward、Prerouting、Postrouting
 
Filter表:
        包含3种链:Input、Output、Forward。Iptables的默认表,一般的过滤功能,也是最为常用的表。在使用iptables命令不指定表名称时,就是默认指定的这个表。
Nat表:
        包含3种链:Prerouting、Postrouting、Output。用于NAT功能,端口映射、地址映射等。
Mangle表:
        包含5种链:Input、Output、Forward、Prerouting、Postrouting。mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。
 
Input:用于过滤来自外部系统、目的地为本机的信息包。
Output:用于过滤从系统内部发出的对外访问的信息包。
Forward:用于过滤要求进行转发的信息包,目的地不为本机。#只有当/proc/sys/net/ipv4/ip_forward的值为“1”时才有效。也就是只对路由功能生效。
Prerouting:处理即将离开本机的数据包,作用于进入本机后,到达路由表之前。
Postrouting:处理刚到达本机并在路由转发前的数据包,作用于通过路由表,发送到网卡接口前。
------------------------------------------------------------------------------------------------------
 
RHEL6中开启和关闭iptables服务的方法:
root@localhost # /etc/init.d/iptables start/stop
root@localhost # service iptables start/stop
 
iptables 命令
-t   指定命令要操作的匹配包的表,如果没有指定,则默认为对filter表操作。
-A 在所选择的链末添加一条或更多规则
-D 从所选链中删除一条或更多规则
-R 从选中的链中取代一条规则
-I  根据给出的规则序号向所选链中插入一条或更多规则
-L 显示所选链的所有规则。如果没有选择链,所有链将被显示。
-F 清空所选链。这等于把所有规则一个个的删除。
-Z 把所有链的包及字节的计数器清空。它可以和 -L配合使用,在清空前察看计数器
-N 根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在
-X 删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除每个非内建的链
-P 设置链的目标规则
-E 根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则,而且内建链和用户自定义链都不能是规则的目标
-h 帮助。给出当前命令语法非常简短的说明
 
参数
-p  规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol all会匹配所有协议,而且这是缺省时的选项。在和check命令结合时,all可以不被使用。
-s  指定源地址,可以是主机名、网络名和清楚的IP地址,IP地址格式:ip/mask
-d  目标地址
- j  目标跳转
- i  进入的(网络)接口 [!][名称]。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配任意接口
-o  输出接口
------------------------------------------------------------------------------------------------------
 
个别linux系统无法关闭iptables服务,或者因某些原因不能关闭iptables服务,但为了通信不受iptables的拦截,可以将其所有的规则清空,然后添加所有访问允许的规则。
[root@localhost ~] # iptables -t filter -F
[root@localhost ~] # iptables -t nat-F
[root@localhost ~] # iptables -t mangle -F
 
 
对于处在公网或是要求安全性高的系统中,建议默认禁止所有,需要哪个打开哪个。
[root@localhost ~] #  iptables -P INPUT DROP
[root@localhost ~] #  iptables -P OUTPUT DROP
[root@localhost ~] #  iptables -P FORWARD DROP
#通过iptables -P进行默认规则设定时,只能使用ACCEPT或DROP,不能使用REJECT。
 
设定默认策略,当没有匹配的规则时,默认允许所有。
[root@localhost ~] #  iptables -P INPUT ACCEPT
[root@localhost ~] #  iptables -P OUTPUT ACCEPT
[root@localhost ~] #  iptables -P FORWARD ACCEPT
#这里没有指定-t参数,所以默认为对filter表进行操作。
设定好默认策略后,根据自己的需要将不安全的或是不被允许的访问拒绝。
 
例:
[root@localhost ~] #  iptables -t filter -A INPUT -s 192.168.1.102/24 -j DROP
当发现外部要求访问本机,源地址为192.168.1.102时,将包丢弃。
[root@localhost ~] #  iptables -t filter -A OUTPUT -d 192.168.1.200/24 -p tcp --dport 80 -j REJECT
当本机要求访问192.168.1.200,并且协议为TCP,端口为80时,拒绝访问。简单来说,就是添加不能访问192.168.1.200网页的规则。
在--dport参数后,可以写137-139,表示端口137到139。
[root@localhost ~] #  iptables -I INPUT 2 -i eth1 -p tcp -m multiport --dports 80,443 -j ACCEPT
-I INPUT 2 在INPUT链的第2行执行插入操作
当外部访问信息来自网卡eth1,协议为tcp,端口为80或443,则允许通过。
 
保存iptables规则
通过iptables命令设定的规则只能保存在当前的内存中,当系统断电重启,这些规则将全部丢失。
[root@localhost ~] #  /etc/init.d/iptables save
 
 
允许来自192.168.1.14/24主机的SSH
[root@localhost ~] #  iptables -A INPUT -p tcp --dport 22 -s 192.168.1.14/32-j ACCEPT
[root@localhost ~] #  iptables -A FORWARD -p tcp --dport 22  -s 192.168.1.14/32 -j ACCEPT
[root@localhost ~] #  iptables -A OUTPUT -p tcp --sport 22  -s 192.168.1.14/32 -j ACCEPT
 
允许ping
[root@localhost ~] #  iptables -A INPUT -p icmp -j ACCEPT
[root@localhost ~] #  iptables -A OUTPUT -p icmp -j ACCEPT
[root@localhost ~] #  iptables -A FORWARD -p icmp -j ACCEPT
 
允许DNS
[root@localhost ~] #  iptables -A INPUT -p udp --sport 53 -j ACCEPT
[root@localhost ~] #  iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

你可能感兴趣的:(linux,iptables)