iptables防火墙
RHEL7里面同时又firewall和iptables防火墙
从firewall里面设置的防火墙规则,会自动转化为iptables
firewalld-->iptables-->内核(netfilter)
生产环境中很多企业还是在使用iptables
比如:Openstack,Openshift,Docker,k8s项目都使用的是iptables
openstack(kvm,vmware虚拟化)
一个机房500台(10虚拟机):快速启动,主机 故障,虚拟机迁移性能动态变化(根据性能动态调整虚拟机)
Openstack Web[点击鼠标,启动虚拟机]
Openshift,k8s(docker集群管理)

[root@Proxy ~]# systemctl stop firewalld.service
[root@Proxy ~]# systemctl disable firewalld.service
[root@Proxy ~]# yum -y install iptables-services
[root@Proxy ~]# systemctl restart iptables.service
[root@Proxy ~]# systemctl enable iptables.service
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

四表
filter过滤表[设置允许和拒绝的规则]
nat地址转换表[内外IP转外网IP,外网IP转内外IP]
raw数据表跟踪表[记录每个的连接]
mangle修改状态[修改包头]

重点 filter nat表

5个链:
INPUT:入站规则
OUTPUT:出站规则
FORWARD:转发规则[软路由时应用]
PREROUTING:路由前规则[软路由时应用]
POSTROUTING:路由后规则[软路由时应用]

命令的语法格式:
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
选项:
-A追加规则
-I插入规则
-L查看规则
-D删除规则
j的目标操作:REJECT,DROP,ACCEPT,

拒绝192.168.4.100远程本机的ssh
iptables -t filter -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j REJECT
-s 就是源地址 -p 是值协议 REJECT 是用来拒绝的
拒绝源地址是192.168.4.100,使用tcp协议,访问我的22端口,则拒绝

[root@Proxy ~]# iptables -I INPUT -s 192.168.4.100 -p tcp --dport 80 -j ACCEPT
不写表时,默认是filter
如果源地址是192.168.4.100,使用tcp协议,访问我的80端口,则 允许

[root@Proxy ~]# iptables -t filter -I INPUT -s 192.168.4.100 -p icmp -j REJECT

让192.168.4.100 不能ping通192.168.4.5

注意事项/整体规律
-- 可以不指定表,默认为filter表
-- 可以不指定链,默认为对应表的所有链
-- 有规则先匹配规则,没有规则匹配默认规则
-- 选项/链名/目标操作用大写字母,其余都小写

#iptables -I INPUT -p tcp --dport 22 -j LOG
#tailf /var/log/messages
如果有人远程本机的ssh服务,则记录连接的信息到/var/log/messages日志文件
[root@Proxy ~]# iptables -L //查看filter所有链规则
[root@Proxy ~]# iptables -nL //查看filter所有链规则number
[root@Client ~]# iptables -nL --line-numbers //显示行号
[root@Client ~]# iptables -D INPUT 2 //删除第二条规则
[root@Client ~]# iptables -D INPUT 3 //删除第三条规则
[root@Client ~]# iptables -F //清空所有

一但清空了,默认允许所有

[root@Proxy ~]# iptables -P INPUT DROP //设置默认规则为拒绝所有
[root@Client ~]# iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT //插入规则到第2行
[root@Client ~]# iptables -A INPUT 2 -p tcp --dport 22 -j ACCEPT //插入规则到末尾

注意:
#iptables -F //清空所有(仅对filter)//仅把filter里面的所有清空
#iptables -t nat -F //清空nat表
#iptables -t raw -F //清空raw表
#iptables -t mangle -F //清空mangle表

#Linux软路由

临时开启路由转发
[root@Client ~]# cat /proc/sys/net/ipv4/ip_forward
是1就是开启 , 是 0 就关闭
echo “0” > 的方式 管道给他 不支持vim

永久开启路由转发

[root@Proxy ~]# iptables -I FORWARD -p icmp -j REJECT
如果有人让路由转发icmp包,则拒绝
[root@Proxy ~]# iptables -I FORWARD -p tcp --dport 22 -j REJECT
如果通过路由远程内网里的主机ssh,则拒绝

iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
iptables的条件规则
-s 匹配源IP地址
-d 匹配目标IP地址
--sport 匹配源端口
--dport 匹配目标端口
-i 匹配进站网卡
-o 匹配出占网卡
--icmp-type 匹配icmp类型

[root@Proxy ~]# iptables -I INPUT -p icmp -j REJECT
其他主机无法ping主机,但本机也无法平其他虚拟机

#iptables -I INPUT ! -s 192.168.4.100 -p tcp --dport 1:1024 -j REJECT
除了192.168.4.100外,使用tcp,访问本机的1到1024都拒绝
这条规则,不决定4.100是否可以访问本机,对4.100对反,感叹号取反

#iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
本机可以ping其他主机,其他主机不能ping主机
参考#iptables -p icmp --help帮助信息