`
EdgenHuang
  • 浏览: 109488 次
  • 性别: Icon_minigender_1
  • 来自: 福建泉州
社区版块
存档分类
最新评论

RHEL 5.4 firewall iptables

阅读更多

参考:

http://hi.baidu.com/%CD%FC%D5%E6%E9%AA/blog/item/96dd04fe3a94a89959ee9089.html

 

http://unix-cd.com/vc/www/15/2010-09/16355.html

 

http://blogold.chinaunix.net/u/3995/showart_118489.html

 

 

一、iptables的规则表、链结构



 

 

1.规则表(iptables管理4个不同的规则表,其功能由独立的内核模块netfilter实现)

 

filter: INPUT OUTPUT FORWARD

nat: PREROUTING POSTROTING OUTPUT

mangle: PREROUTING POSTROUTING INPUT OUTPUT FORWARD

raw: OUTPUT PREROUTING

 

2.规则链

 

INPUT: 当收到访问防火墙本机的数据包(入站)时,应用此链中的规则

OUTPUT: 当防火墙本机向外发送数据包(出站)时,应用此链中的规则

FORWARD: 收到需要通过防火墙发送给其它地址的数据包,应用此链

PREROUTING: 做路由选择之前,应用此链

POSTROUTING: 对数据包做路由选择之后,应用此链中的规则

 

二、数据包的匹配流程



 

 

1.规则表之间的优先级

 

raw mangle nat filter

 

2.规则链之间的优先级

 

入站数据流向: 来自外界的数据包到达防火墙,首先被PREROUTING规则链(是否被修改地址等)处理,之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再交给本机的应用程序进行响应

 

转发数据流向: 来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后进行路由选择,如果数据包的目标地址是其它外部地址,则内核将其传递给FORWARD链进行处理,然后再交给POSTROUTIING规则链(是否修改数据包的地址等)进行处理。

 

出站数据流向: 防火墙本机向外部地址发送数据包,首先被OUTPUT规则链处理,之后进行路由选择,然后交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

 

3.规则链内部各防火墙规则之间的优先顺序

 

依次按第1条规则、第2条规则、第3条规则……的顺序进行处理,找到一条能够匹配的数据包规则,则不再继续检查后面的规则(使用LOG记录日志的规则例外)。如果找不到匹配规则,就按照规则链的默认策略进行处理

 

三、iptables的基本语法格式

 

iptables [-t 表名]  命令选项  [链名]  [条件匹配]  [-j 目标动作或跳转]

 

命令选项

-A, --append chain rule-specification

-D, --delete chain rule-specification

-D, --delete chain rulenum

-I, --insert chain [rulenum] rule-specification

-R, --replace chain rulenum rule-specification

-L, --list [chain]

-F, --flush [chain]

-Z, --zero [chain]     

-N, --new-chain chain

-X, --delete-chain [chain]

-P, --policy chain target  

-E, --rename-chain old-chain new-chain

 

其他选项

-h, --help

-v, --verbose

-V, --version

-n, --numeric  

-x, --exact    

--line-numbers 

--modprobe=command

 

规则参数
-p, --protocol [!] protocol
-s, --source [!] address[/mask]
-d, --destination [!] address[/mask]
-j, --jump target
-g, --goto chain
-i, --in-interface [!] name
-o, --out-interface [!] name
[!]  -f, --fragment
-c, --set-counters PKTS BYTES

 

四、规则

 

1.添加INPUT规则
 
# iptables -t filter -A INPUT -p tcp -j ACCEPT
//在filter表的INPUT链的末尾添加一条防火墙规则

 

# iptables -I INPUT -p udp -j ACCEPT
//在filter表的INPUT链中插入一条防火墙规则(省略 –t filter,按默认处理filter表)

 

# iptables -I INPUT 2 -p icmp -j ACCEPT
//在filter表的INPUT链中插入一条防火墙规则,作为链中的第二条规则

 

2.查看规则表

 

# iptables -L INPUT --line-numbers
//查看filter表中INPUT链中的所有规则,同时显示各条规则的顺序号

 

# iptables -nvL
//查看filter表各链中所有规则的详细信息,同时以数字形式显示地址和端口号(-L选项放在最后,否则会将vn当成链名)

 

3.删除、清空规则

# iptables -D INPUT 2
//删除filter表INPUT链中的第二条规则

 

# iptables -F
//不指定表名时,默认清空filter表

 

# iptables -t nat -F
//清空nat表中各链的所有规则

 

# iptables -t mangle -F
//清空mangle表中各链的所有规则

 

4.设置规则链的默认策略

 

# iptables -t filter -P FORWARD DROP
//将filter表中FORWARD规则的默认策略设为DROP

 

# iptables -P OUTPUT ACCEPT
//将filter表中OUTPUT规则的默认策略设为ACCEPT

 

5. 获得iptables相关选项的帮助信息

 

# iptables -p icmp -h
//查看iptables命令中关于icmp协议的帮助信息

 

6.新增、删除自定义规则链

 

# iptables -t raw -N TCP_PACKETS
//在raw表中新增一条自定义的规则链,链名为TCP_PACKETS

 

# iptables -t raw -X
//清空raw表中用户自定义的所有规则链

 

# iptables -t filter -N MyLAN1
# iptables -A FORWARD -s 192.168.1.0/24 -j MyLAN1
# iptables -A FORWARD -d 192.168.1.0/24 -j MyLAN1
# iptables -A MyLAN1 -p icmp DROP
//自定义一个新的链MyLAN1,转发192.168.1.0/24网段的数据包均交给该链中的规则处理

 

五、条件匹配

 

1.通用(general)条件匹配(直接使用,而不依赖于其他的条件匹配及其扩展)
 
协议匹配(允许使用的协议名包含在/etc/protocols文件中):

 

# iptables -I INPUT -p icmp REJECT
//拒绝进入防火墙的所有icmp数据包

 

# iptables -I FORWARD -p ! icmp -j ACCEPT
//允许防火墙转发icmp协议以外的所有数据包(叹号表示取反)

 

地址匹配:

 

# iptables -A FORWARD -s 192.168.1.11 -j REJECT
//拒绝转发来自192.168.1.11主机的数据

 

# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
//允许转发来自192.168.0./24网段的数据

 

网络接口匹配:

# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
//丢弃从外网接口eth1进入防火墙本机的源地址为私网地址的数据

 

# iptables -I INPUT -s 10.20.30.0/24 -j DROP //设置封堵策略
# iptables -I FORWARD -s 10.20.30.0/24 -j DROP
# at now +2 hours
at> iptables -D INPUT 1
at>iptables -D FORWAD 1
at> <EOT>
job 5 at 2020-09-26 19:15
//管理员在网关服务器上检测到来自某个IP网段(如10.10.30.0./24)的频繁扫描,

//希望设置iptables规则封堵IP地址段,两个小时后解封

 

2. 隐含(implicit)条件匹配(需要指定的协议匹配为前提,其对应的功能由iptables自动(隐含)的装载入内核)

 

端口匹配:

# iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
//仅允许系统管理员从202.13.0.0/16网段使用SSH方式远程登录防火墙主机

 

# iptables -A INPUT -P tcp --dport 20:1024 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
//允许本机开放从TCP端口20~1024提供的应用服务

 

# iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT
# ipatbles -A FORWARD -p udp -d 192.168.0.0./24 --dport 53 -j ACCEPT
//作为网关使用时,允许转发来自192.168.0.0/24局域网的DNS解析请求数据包

 

TCP标记匹配:

# iptables -P INPUT DROP
# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
# iptables -I INPUT -i eth1 -p tcp - tcp-flags ! --syn -j ACCEPT
//拒绝从外网接口eth1直接访问防火墙本机的数据包,但是允许相应防火墙TCP请求的数据包进入

 

ICMP类型匹配:

# iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
# iptables -A INPUT -p icmp --icmp-type Echo-Replay -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
//禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机(允许接受ICMP回应数据)

 

3.显式(explicit)条件匹配(由额外的内核模块提供,因此需要手工指定匹配方式,lsmod 命令查看内核模块)

 

MAC地址匹配(主要用于检查数据包的源MAC地址):

 

# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
//禁止转发来自MAC地址为00:0C:29:27:55:3F的主机数据包

 

多端口匹配(检查数据包的源端口、目标端口时,用于匹配多个不连续的端口号):

 

# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
//允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250~1280

 

多IP地址匹配:

 

# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
禁止转发IP地址为192.168.1.20~192.168.1.99 的TCP的数据包

 

状态匹配:

# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
//禁止转发与正常TCP连接无关的非 --syn请求数据包


# iptables -A INPUT -p tcp -m state --state NEW -j DROP
# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
//拒绝访问防火墙的新数据包,但允许响应或与已有连接相关的数据包


六、数据包控制

ACCEPT: 允许数据包通过
DROP: 直接丢弃数据包,不给出任何回应信息
REJECT:拒绝数据包通过,必要时会给数据发送一个响应信息
LOG: 在/var/log/messange文件中记录日志信息,然后将数据包传递给下一条规则

 

# iptables -I INPUT -p tcp --dport 22 -j DROP
# iptables -I INPUT -P tcp --dport 22 -j LOG
//对于尝试通过SSH方式登录防火墙主机的访问数据,记录日志信息并禁止其访问

 

# iptables -R INPUT 1 -p tcp --dport 22 -m limit --limit 3/minite --limit-burst 8 -j LOG
//将记录日志的频率限制为平均三次/分钟 ,允许的峰值为八次
 
七、导出、导入防火墙规则


# iptables-save > /etc/sysconfig/iptables 或 service iptables save
# service iptables restart
# chkconfig --level 35 iptables on
//把当前设置的防火墙规则信息输出到终端,将当前调试好的iptables规则保存到配置文件,

//并通过iptables服务脚本自动加载

 

# iptables-retore < /etc/sysconfig/iptables
//从已保存的配置文件中导入iptables规则

 

八、服务命令

# chkconfig iptables on   

//永久打开防火墙

 

# chkconfig iptables off   

//永久关闭防火墙

 

# service iptables start   

//打开防火墙,即时生效,重启后还原


# service iptables stop    

//关闭防火墙,即时生效,重启后还原 

  • 大小: 14.8 KB
  • 大小: 14.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics