iptables中定义默认策略(policy)
当数据包不在我们设置的规则之内时,则该数据包的通过与否,是以Policy的设置为准。在安全性比较高的主机中,Filter内的INPUT链定义的比较严格,INPUT的Policy定义为DROP
ptables定义规则:
格式:iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP ]
-p : 定义策略(Policy)。注意:P为大写
ACCEPT:数据包可接受
DROP:数据包被丢弃,client不知道为何被丢弃。
iptables -P INPUT DROP //INPUT默认设置为DROP iptables -P OUTPUT DROP //OUTPUT默认设置为ACCEPT iptables -P FORWARD DROP // FORWARD默认设置为ACCEPT
iptables定义规则(filter)的格式:
iptables [-AI 链名] [-io 网络接口 ] [ -p 协议 ] [ -s 来源IP/网络 ] [ -d 目标IP/网络 ] -j [ACCEPT | DROP|REJECT|LOG]
参数说明:
-A:新增一条规则,该规则在原规则的最后面。
-I:插入一条规则,默认该规则在原第一条规则的前面。即该新规则变为第一条规则。
-io 网络接口:设置数据包进出的接口规范。
-i:表示输入。即数据包进入的网络接口。与INPUT链配合
-o : 表示输出。数据包传出的网络接口。与OUTPUT链配合
-p 协定: 此规则适应于哪种数据包。如tcp,udp,icmp及all.
-s 来源 IP/网络:设置次规则之前数据包的来源地,可指定单纯的IP或网络,例如:
IP : 192.168.0.100
网络 : 192.168.0.0/24或者192.168.0.0/255.255.255.0
如果规则为不允许,则在IP/网络前加 “!” 即可。
-s ! x.x.x.x
-d 目标 IP/网络。与-s类似,只是是目标IP或者网络而已。
-j:后面接操作。如ACCEPT,DROP ,REJECT或者LOG(记录)
比如:开放lo这个本机的接口以及某个IP来源
//设置io成为受信任的设备,亦即进出lo的数据包都接受 iptables -t filter -A INPUT -i eth0 -j ACCEPT
我们可能会有疑惑,为什么没有-s -d等规则,表示不论数据包来自何处或去到哪里,只要是来自lo这个接口全部接受。
设置来自192.168.100.10的就接受,192.168.100.11的就丢弃。
iptables -A INPUT -i eth0 -s 192.168.100.10 -j ACCEPT iptables -A INPUT -i eth0 -s 192.168.100.11 -j DROP iptables -I INPUT -i eth0 -s 192.168.100.0/24 -j ACCEPT
此时我们执行iptables-save
[root@localhost ~]# iptables-save # Generated by iptables-save v1.4.7 on Wed Jun 6 10:41:44 2018 *nat :PREROUTING ACCEPT [9:1155] :POSTROUTING ACCEPT [4:1312] :OUTPUT ACCEPT [4:1312] COMMIT # Completed on Wed Jun 6 10:41:44 2018 # Generated by iptables-save v1.4.7 on Wed Jun 6 10:41:44 2018 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [65:5416] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -i eth0 -p tcp -m tcp --sport 80 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Wed Jun 6 10:41:44 2018
TCP,UDP协议的规则对比:针对端口设置
- 在 -s 参数后面可以增加一个参数 -sport 端口范围(限制来源端口),如:1024:65535
- 在-d 参数后面可以增加一个参数 -dport 端口范围(限制目标端口)
需要特别注意,这两个参数重点在port上面,并且仅有TCP和UDP数据包具有端口,因此要想使用–dport,–sport时需要加上-p tcp或者 -p udp才会成功。
下面做几个小测试:
//丢弃所有想要链接本机21端口的数据包 iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP //想要链接到本机的网上邻居(UDP port 137,138 tcp 139,445)就放行 iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT //只要来自192.168.1.0/24的1024:65535端口的数据包,且想要连接的本机的ssh port就阻挡 iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
除了制订端口号之外,TCP数据包还有特殊的标识,比如主动链接的SYN标志。iptables支持使用–syn来处理。
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 -dport 1:1023 --syn -j DROP
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
3.配置firewalld-cmd