CentOS7 的防火墙配置与之前的版本iptables不一样,CentOS7这个版本的防火墙默认使用的是firewall:
1、开启和关闭
1.1 开启防火墙:
systemctl start firewalld.service (centos7)
service iptables start
/etc/init.d/iptables start
1.2 关闭防火墙
systemctl stop firewalld.service (centos7)
service iptables stop
/etc/init.d/iptables stop
1.3 开启开机启动:
systemctl enable firewalld.service (centos7)
1.4 关闭开机启动:
systemctl disable firewalld.service (centos7)
2、四表五链
包过滤防火墙使用iptables 工具,即四表五链
里面含有4个功能表:
raw :确定是否对该数据包进行状态跟踪
mangle: 为数据包设置标记(较少使用)
nat :修改数据包中的源、目标IP地址或端口
filter :确定是否放行该数据包(过滤)
每个表专门写规则的地方(Chain-链)
五链:
INPUT:入站 :当收到访问防火墙本机地址的数据包(入站),应用此链中的规则
OUTPUT:出站 :当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
FORWARD:转发 :当收到需要通过防火墙中转发送给其他地址的数据包时,应用此链中的规则
POSTROUTING:路由后转换 :在对数据包做路由选择之后,应用此链中的规则
PREROUTING:路由前转换 :在对数据包做路由选择之前,应用此链中的规则
3、iptables语法
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
注意:
不指定表名默认为filter表
不指定链名,默认为表内的所有链
除非设定链的默认策略,否则必须指定匹配条件
选项、链名、控制类型为大写字母,其余小写
3.1 链名
INPUT:入站
OUTPUT:出站
FORWARD:转发
POSTROUTING:路由后转换
PREROUTING:路由前转换
3.2 控制类型
ACCEPT :允许通过
DROP :直接丢弃,不会给出任何回应
REJECT :拒绝通过,必要时给出提示
LOG :记录日志信息,然后传给下一条规则继续匹配
3.3 选项
第二行插入禁Ping的规则
iptables -I INPUT 2 -p icmp -j ACCEPT
末尾添加禁tcp协议的规则
iptables -A INPUT -p tcp -j REJECT
查看filter表:
iptables -t filter -nvL
查看filter表,每秒钟刷新一次
watch n1 iptables -t filter -nvL
删除filter表中FORWORD链中第二条规则:
iptables -t filter -D FORWORD 2
清除filter表中的FORWORD链:
iptables -t filter -F FORWORD
为指定的链设置默认规则, 但只能是 ACCEPT 和DROP
iptables -t filter -P FORWARD DROP
3.4 条件
通用匹配:
iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -s 172.23.10.1/24 -j DROP
iptables -I INPUT -i eth0 -d 172.23.10.2/24 -j DROP
隐含匹配:
iptables -I FORWARD -s 172.23.10.3/24 --sport 21 -p tcp -j ACCEPT
iptables -I INPUT -p tcp --dport 20,21 -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -j DROP (8表示请求 =echo-request)
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT (3表示不可达)
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT (0表示回显=echo-reply)
显示匹配:
iptables -A INPUT -p tcp -m multiport --dport 80,21,443 -j ACCEPT
iptables -I FORWARD -p tcp -m iprange --src-range 172.23.10.2-172.23.10.8 -j ACCEPT
iptables -A INPUT -p tcp -m mac mac-source 00:11:ef:4d:3d:50 -j ACCEPT
禁止转发与正常tcp连接无关的非syn请求数据包(如伪造的网络攻击数据包)
iptables -I FORWARD -p tcp -m state --state NEW ! --syn -j DROP
3.5 规则备份和还原
iptables-save > /root/Desktop/iptables.txt
恢复还原
iptables-restore < /root/Desktop/iptables.txt
永久保存为默认规则
service iptables save
4 、filter表 和nat表
4.1 filter表
里面含有3个链:
INPUT
FORWARD
OUTPUT :出站链,输出所有输出信息,包括拒绝信息
4.2 nat表
nat表 只有三个链:
PREROUTING :路由前转换 ,在对数据包做路由选择之前,应用此链中的规则
POSTROUTING :路由后转换 ,在对数据包做路由选择之后,应用此链中的规则
OUTPUT
4.2.1 源地址转换(SNAT)
主要是针对信息往外发的规则,内部想访问外部的服务。
假设linux服务器外部IP:16.29.4.20 ,内部IP为172.23.10.2 想访问web服务16.29.4.56
那么需要在服务器的外部做地址转换:
iptables -I POSTROUTING -p tcp -o eth1 -s 172.23.10.0/24 -j SNAT --to-source 16.29.4.20
如果外部地址是动态的变化,可以使用MASQUERADE,动态的更改为当前的外部IP :
iptables -I POSTROUTING -p tcp -o eth1 -s 172.23.10.0/24 -j MASQUERADE
前提都是符合 FORWARD 规则,才能到转换规则
4.2.2 目标地址转换(DNAT)
主要针对外部访问内部的服务器
假设内部web服务器为:192.168.10.1:8080,linux服务器外部IP:16.29.4.20 ,有一台PC:102.25.6.78想访问web服务
为了更加的贴切用户的使用,那么访问内部的8080端口,在外部就应该映射为80端口,用户就不用输入端口号了(http 默认为80端口)。
iptables -I PREROUTING -p tcp -i eth1 -d 16.29.4.20 --dport 80 -j DNAT --to-destination 192.168.10.1:8080