Linux 防火墙IPTABLES规则配置文档

Linux 防火墙IPTABLES规则配置文档

时间

2019/06/25

笔者

一只会飞的小猴子

说明

更新中...

 

1模板:

iptables的模板:

Iptables  -t  {filter,nat}  -{A,I,D}  {INPUT,FORWORD,OUTPUT}  {n}  -p  {tcp,udp,icmp}  {!} -s  {192.169.0.1, 192.168.0.0/24,不写代表所有}  -d {不写代表防火墙自身}  --sport m:n  --dport x:y  -j  {ACCEPT, DROP,  REJECT ,  POSTROUTING ,  PREROUTING,  LOG}

 

2 规则表

 

2.1定义

表的作用:容纳各种规则链

表的划分依据:防火墙规则的作用相似

 

默认包括4个规则表

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

nat表:修改数据包中的源、目标IP地址或端口

filter表:确定是否放行该数据包(过滤)

常用的就是其中filter表nat表多用于实现ip的转化功能,这里的表功能个人感觉相当于链下面的表功能,每种链都存在这四种表

2.2优先级

raw>mangle>nat>filter

规则链之间的默认优先级

入站:PREROUTING>INPUT

出站:OUTPUT>POSTROUTING

转发:PREROUTING>FORWARD>POSTROUTING

规则链内的匹配顺序

按顺序依次检查,匹配即停止(LOG策略例外)

若找不到相匹配的规则,则按该链的默认策略处理,这跟路由转发还是有点区别的

 

3 常用命令说明

命令

说明

试图

iptables -L -n

查看本机iptables的设置情况(右边图是没有启动防火墙)

iptables -F

清除预设表filter中的所有规则链的规则

 

iptables -X

清除预设表 filter中的使用者自定链中的规则

 

/etc/rc.d/init.d/iptables save

保存(需要重启才生效)

service iptables restart

重启

iptables -D

 

将指定的链中删除规则

 

iptables -P

 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP)

 

iptables -t nat -L

列出所有NAT链中所有规则

 

/etc/sysconfig/iptables

文件配置地址(命令执行需要保存并重启才成功)

4 参数说明

--dport

指定目标TCP/IP端口 如 –dport 80

--sport

指定源TCP/IP端口 如 –sport 80

-p tcp

指定协议为tcp

-p icmp

指定协议为ICMP

-p udp

指定协议为UDP

-j DROP

拒绝

-j ACCEPT

允许

-j REJECT

拒绝并向发出消息的计算机发一个消息

-j LOG

在/var/log/messages中登记分组匹配的记录

-m mac –mac

绑定MAC地址

-m limit –limit 1/s 1/m

设置时间策列

-s 10.10.0.0或10.10.0.0/16

指定源地址或地址段

-d 10.10.0.0或10.10.0.0/16

指定目标地址或地址段

-s ! 10.10.0.0

指定源地址以外的

 

 

5 设定预设规则

iptables -P INPUT DROP

预设input规则,超出则放弃 控制流入数据(但是执行此命令会导致SSH远程断开,需要配置规则,无需执行此命令)

iptables -P OUTPUT ACCEPT

预设output规则,全部接受

iptables -P FORWARD DROP

同理 转发 规则

 

6 添加FILter规则

首先添加input链,上述默认预设规则是drop,所以需要添加规则使SSH远程可以登录

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

远程SSH连接端口 开启22端口(具体端口依据实际情况

 

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

如果预设output规则设置drop 需要设置此规则(具体端口依据实际情况

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

如果web服务器,output设置drop,同样需要添加一条链(具体端口依据实际情况

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

同理需要web服务器,input设置drop,需要开启端口 80链(具体端口依据实际情况

iptables -A INPUT -p tcp --dport 110 -j ACCEPT

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

开启邮件服务器,开启 25、110 端口链(具体端口依据实际情况

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

 

开启FTP服务器,(具体端口依据实际情况

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

 

开启DNS服务器 ,(具体端口依据实际情况

iptables -A OUTPUT -p icmp  -j ACCEPT

iptables -A INPUT -p icmp  -j ACCEPT

 

运行icmp包通过(ping

iptables -A OUTPUT -o lo -p all  -j ACCEPT

iptables -A INPUT -i lo -p all-j ACCEPT

 

允许loopback  不然会导致DNS无法正常关闭

iptables -A OUTPUT -p tcp --sport 9990-j DROP

 

如果output链规则是accept,则需要关闭对于的端口号,防止有些病毒利用此端口

iptables -A INPUT -p tcp --dport 9090-j DROP

如果input链规则是accept,则需要关闭对于的端口号,防止有些病毒利用此端口

iptables -A INPUT -s 192.168.0.1 -p tcp --dport 22 -j ACCEPT

允许固定ip机器进行SSH连接(!191.168.0.1 表示除此IP外)

iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT

允许 192.168.0.1-255 端的所有ip(删除/ect/sysconfig/iptables 里的其中一行 -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT)

Iptables -A FORWORD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Iptables -A FORWORD -i eth1 -o eth0 -j ACCEPT

在NAT时 FORWORD 规则是DROP我们需要开启转发功能

Iptables -A FORWORD -p TCP ! --syn -m state --state NEW -j DROP

丢弃坏的TCP包

Iptables -A FORWORD -f -m limit 100/s --limit-burst 100 -j ACCEPT

处理ip碎片数量,防止攻击,允许每秒100个

Iptables -A FORWORD -p icmp -m limit 1/s --limit-burst 10 -j ACCEPT

设置icmp包过滤,允许每秒1个包,限制触发条件10个包

iptables -A INPUT   -m state --state INVALID -j DROP

iptables -A OUTPUT  -m state --state INVALID -j DROP

iptables -A FORWARD -m state --state INVALID -j DROP

 

DROP非法连接

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过!

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

允许本地环回接口在INPUT表的所有数据通信

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

iptables  -A FORWARD -j REJECT --reject-with icmp-host-prohibited

这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。

iptables -I INPUT -s 123.45.6.7 -j DROP

屏蔽单个IP的命令是

iptables -I INPUT -s 123.0.0.0/8 -j DROP

封整个段即从123.0.0.1到123.255.255.254的命令

iptables -I INPUT -s 124.45.0.0/16 -j DROP

封IP段即从123.45.0.1到123.45.255.254的命令

iptables -I INPUT -s 123.45.6.0/24 -j DROP

封IP段即从123.45.6.1到123.45.6.254的命令是

指令I是insert指令 但是该指令会insert在正确位置并不像A指令看你自己的排序位置,因此用屏蔽因为必须在一开始就要加载屏蔽IP,所以必须使用I命令加载,然后注意执行/etc/rc.d/init.d/iptables save进行保存后重启服务即可

 

7 添加NAT规则(默认规则是ACCEPT,添加DROP链)

iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP

iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP

iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

 

防止外网内网IP欺骗

 iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP

 

禁止与211.101.46.253的所有连接

 

 

 

附件:题目

测试题1:查看ip

测试题2:查看防火墙状态

测试题3:查看规则列表

测试题4:阻止特定ip(192.168.0.1)进行SSH连接

测试题5:删除filter表的output链第3条规则

测试题6:阻止客户端访问服务器8080端口号的访问

测试题7:允许web服务只能被固定端的ip访问

测试题8:只允许192.168.0.3的机器进行SSH连接

测试题9:阻止8080端口被ip(192.168.0.1)客户端访问

测试题10:匹配的规则记录到日志中去

 

 

答案:

CODE:JAVA

1、ifconfig

2、/etc/init.d/iptables status

3、iptables -L -n

4、iptables -t filter -A INPUT -p tcp -s 192.168.0.1 --dport 22 -j DROP

5、iptables -D OUTPUT 3

6、iptables -A INPUT -p tcp --dport 8080 -j DROP

7、

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -s x.x.x.x -p tcp --dport 80 -j ACCEPT
8、iptables  -A INPUT -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT

9、iptables  -A INPUT -p tcp -s 192.168.0.1 --dport 8080-j DROP

10、iptables -A INPUT -P tcp -m mac --mac=mac地址 --dport 22 -j LOG 

 

 

 

 

补充后续:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值