Linux防火墙笔记

使用iptables命令配置防火墙

构建防火墙的通常三步:

  • 清楚所有规则
  • 设置防火墙策略
  • 设置防火墙规则

基本语法:

iptables [-t table] CMD [option]  [chain]  [matcher] [-j target]
  • 表(table):可以是raw/mangle/nat/filter/security,默认是filter
  • 操作命令(CMD):包括添加、删除、更新链规则、创建自定义链等
  • 链(chain):针对不同用途指定要操作的链
  • 规则匹配器(matcher):指定各种匹配规则,如IP地址、端口、包类型等
  • 目标(target):当规则匹配一个包时,真正要执行的任务用目标标识,如接受或拒绝,每条规则只能有一个目标
    注意:iptables命令严格区分大小写,所有表名用小写,所有的链名有大写,所有规则匹配用小写

清除防火墙
语法:iptables [-t table] [-FXZ] [chain]

操作命令 说明
-F或 --flush 清楚指定链和表中的所有规则,若没有指定链,则清空所有链
-X或 --delete-chain 删除指定的用户自定义链,必须保证链中的规则都不在使用时才能删除链,没有指定链,删除所有用户自定义链
-Z 或 --zero 对链中的包计数器和字节计数器清零

设置防火墙策略
语法:iptables [-t table] -P [chain] ACCEPT | DROP
配置链的默认策略的一般三种方法:

  • 先允许所有包,然后设置规则禁止有危险的包

    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

  • 先禁止所有包,然后设置规则允许安全包

    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

  • 先允许所有包,再允许特定包,最后禁止所有包

    iptables -P INPUT DROP
    iptables -A INPUT -j ACCEPT
    iptables -P OUTPUT DROP
    iptables -A OUTPUT -j ACCEPT
    iptables -P FORWARD DROP
    iptables -A FORWARD -j ACCEPT

设置防火墙规则

语法:iptables [-t table]  <CMD> [<option>]  <chain> <rules>  -j <target>

iptables链操作命令(CMD)

操作命令 说明
-A 或 --append 在所选链尾加入一条规则
-I 或 --insert [ rulenum] 用给出的规则号在所选链中插入一条规则
-R 或 --replace rulenum 用给出的规则号在所选链中替换一条规则
-D 或 --delete rulenum 用给出的规则号在所选链中删除一条规则
-L 或 --list [–line-numbers] [-v] [-n] 列出指定链的所有规则,若没有指定链,则列出所有链。选项–line-numbers用于显示规则编号,选项-v使输出详细化,选项-n在输出中以IP地址和端口数值形式显示,而不是默认的名字
-N 或 --new-chain < chain-name> 以给定的名字创建一条新的用户自定义链,不能与已有链同名
-E < old-chain-name> < new-chain-name> 改变自定义链的名字

iptables常用的匹配规则(rules)

参数 说明
-s [!] address[/mask] 匹配数据包的源地址或地址范围 如 -s 192.168.1.0/24
-d [!] address[/mask] 匹配目的地址或地址范围 如 -d 192.168.1.0
-i [!] interface name[+] 匹配数据包从哪个网络接口流入,默认为所有接口
-o [!] interface name[+] 匹配数据包从哪个网络接口流出,默认为所有接口
-p [!] protocol 指出要匹配的协议
-m 实现扩展匹配

注意:每一条命令中的多个匹配条件是“与”关系。

协议参数(-p)的用法

协议 相关参数 说明 举例
-p tcp 或 -p udp –sport 匹配规则的源端口或端口范围 -p udp --sport 1024:65535
-p tcp 或 -p udp –dport 匹配规则的目的端口或端口范围 -p tdp --dport 80
-p tcp –tcp-flags 匹配指定的TCP标记,该选项有两个参数,都是列表,列表内部用逗号分隔,列表之间用空格分隔,第一个列表列出需要检查的标记,第二个列表指定在第一个列表中必须被设为1的“标记” ,也就是说第一个参数提供检查范围,第二个参数提供设置条件,匹配操作可识别的标记有:
URG(U:Urgent紧急);
ACK(A:Acknowledgement 回应);
PSH(P:Push推进);
RST(R:Rest 重置);
SYN(S:Synchronize 同步);
FIN:(F:Final 终止);
另外还有两个,ALL和NONE
-p tcp --tcp-flags SYN,FIN,ACK SYN
匹配SYN被设置为1,而FIN和ACK没有被设置的包,
-p tcp --tcp-flags !SYN,FIN,ACK SYN
匹配那些FIN和ACK被设置而SYN没被设置的包
-p tcp --tcp-flags ALL NONE
匹配所有标记未置1的包
-p tcp [!] --syn 仅仅匹配设置了SYN位,清楚了ACK、FIN位的TCP包 -p tcp --syn
-p icmp –icmp-type [!] typename 匹配ICMP信息类型 -p icmp --icmp-type 8

扩展匹配(-m)的用法

扩展 相关参数 说明 举例
iprange –src-range 源地址内的任意IP均可匹配 -m iprange --src-range 10.0.0.1-10.0.0.100
iprange –dst-range 目的地址内的任意IP均可匹配
multiport –sports 源端口范围内的任意端口均可匹配
multiport –dports 目的端口范围内的任意端口均可匹配 -m multiport --dports 111,2049,10001:10004
multiport –ports 端口范围内的任意端口均可匹配
state –state 使用链接跟踪进行状态匹配 -m state --state INVALID,NEW
conntrack –ctstate 使用链接跟踪进行状态匹配 -m conntrack --ctstate INVALID,NEW
mac –mac-source 匹配包的源MAC地址,只用于INPUT、PREROUTING和FORWARD链 -m mac --mac-source 00:21:97:30:51:2B
limit –limit 指定单位时间内允许通过的数据包的个数,单位时间可以是/second、/minute、/hour、/day或首字母 -m limit --limit 3/hour --limit burst 5
limit –limit-burst 指定单位时间内最多可匹配数据包的个数,用来匹配瞬间大量数据包的个数

iptables常用的规则目标(target)

目标 目标说明 参数
-j ACCEPT 允许数据包通过
-j DROP 简单丢弃数据包
-j REJECT 拒绝数据包并用ICMP错误信息予以回应 –reject-with < type>
-j DNAT 修改数据包的目的socket –to-destination ipaddr [-ipaddr][:prot-prot]
-j REDIRECT 在防火墙上将数据包重定向至本机的另一个端口 –to-ports port[-port]
-j SNAT 修改数据包的源socket –to-source ipaddr[-ipaddr][:port-port]
-j MASQUERADE 与SNAT功能相似,知识无须指定–to-source –to-ports port[-port]
-j LOG 使用rsyslogd记录日志,默认记录在/var/log/messages中 –log-prefix
--log-ip-options
–log-tcp-options
-j < custom chain> 跳转到用户自定义链,执行后返回调用它的链
-g < custom chain> 跳转到用户自定义链,执行后不返回调用它的链

设置规则实例
1.允许接收远程主机的SSH请求
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
2.允许发送本地主机的SSH响应
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
3.送出的数据包目的端口为22
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
4.接收的数据包源端口为22
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
5.允许接收远程主机的HTTP请求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
6.允许发送本地主机的HTTP响应
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

猜你喜欢

转载自blog.csdn.net/qq_25744595/article/details/84981855