##############火墙是内核上的一个插件
firewalld和iptables是管理火墙(iptables)的工具
iptables默认有三张
filter表(内容三个):经过内核(访问本机的)input和output
forward在filter表里:两块网卡的ip用一根线连接起来这根线叫做forward
nat表(四个内容):专做地址转发(不访问本机的)
路由之后的地址转发是postrouting
路由之前的是prerouting
限制postrouting和preouting是fiter里面的forword,可以限制是否通过内核
mangle(转做附加说明,前两张表不够用,有五个内容)
input output(in和ou分为两种类型) forward postrouting prerouting
被称为三表五链
###############firewalld
firewalld企业7之前里面没有
在client内网卡设定为172.25.254.219
将不同网卡添加在不同域中server中添加两块网卡eth0(172.25.254.114) eth1(1.1.1.114)
开启httpd
firewall-cmd --list-all看所有的接口信息
写下共享文件,开启httpd
这时你去访问访问不到(有火墙)
此时eth0是public
firewall-cmd --remove-interface=eth0 --zone=public
先移除
在添加
firewalld-cmd --add-interface=eth0 --zone=trusted 将eth0接口改为trust这样别人访问eth0时就可以被信任(原本的eth0状态为public 不允许被人访问httpd )
在client中firefox访问172.25.254.119 可以访问到
####firewalld配置文件
如果一个网关的默认为trusted那末关闭服务,这个服务对这个网关来说还是开启
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --complete-reload(正在连接的服务也会被停止)
kill -9 shhd
客户端 ssh root@172.25.254.119
#ssh: connect to host 172.25.254.119 port 22: No route to host
连接不上
如果还能连接上 就是你访问的ip网关是trusted
服务端:
vim /etc//firewalld/zones
里面有
firewalld.conf
你现在修改的命令会被写成文件
firewalld.conf.old 以前修改的命令写成文件
cd /lib/firewalld/services/
vim ssh.xml
将端口改为23
firewall-cmd --complete-reload(刷新)
客户端 ssh root@172.25.254.119
#ssh: connect to host 172.25.254.119 port 22: No route to host
######端口增加特定的防火墙规则
##22端口只允许219
服务端设置
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.114-p tcp
添加规定 f表 input链 来源 遵守协议
–dport 22 -j ACCEPT(REJECT)
目的端口 加动作
firewall-cmd --permanent --remove-service=ssh
关掉ssh
firewall-cmd --complete-reload
firewall-cmd --direct --get-all-rules 可以看到命令
#ipv4 filter INPUT 1 -s172.25.254.114-p tcp --dport 22 -j ACCEPT
客户端172.25.254.114
ssh可以
客户端172.25.254.63
ssh
#ssh: connect to host 172.25.254.119 port 22: No route to host
服务端删除命令
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s172.25.254.219 -p tcp --dport 22 -j ACCEPT
firewall-cmd --direct --get-all-rules
服务端设定firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.219 -p tcp --dport 22 -j ACCEPT
(除了219 其他都在范围内,经过内核访问) 219走服务访问,
若没有服务则:ssh: connect to host 172.25.254.119 port 22: No route to host
现在服务端的ip 1.1.1.114
#地址伪装(server 有两个ip 172.25.254.114 1.1.1.114 client一个ip 1.1.1.214)
在server中
firewall-cmd --add-masquerade
firewall-cmd --list-all
发现masquerade 为yes
在client中修改网络设置
vim /etc/syconfig/network-scripts/ifcfg-eth0
写 GATEWAY=1.1.1.214
ping 172.25.254.63
可以pingtong
端口转发
服务端设定
此时
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.214
访问(服务端(172.25.254.119))火墙转到1.1.1.214
firewall-cmd --list-all
#forward-ports: port=22:proto=tcp:toport=22:toaddr=1.1.1.214
客户端访问ssh root@172.25.254.114发现连的是1.1.1.114
iptables管理火墙
首先关闭火墙 锁火墙
systemctl stop firewalld.service
systemctl mask firewalld.service
iptables -t filter -nL 列出filter表的 内容
iptables -t filter -A INPUT -s 172.25.254.219 -j REJECT
表 添加 input链上 219 被拒绝
iptables -t filter -nL
###target prot opt source destination
###REJECT all – 172.25.254.219 0.0.0.0/0 reject-with icmp-p
iptables -D INPUT 1
删除input 链的第1个
iptables -R INPUT 1 -s 172.25.254.219 -j REJECT
将 input链 第二条 更新 为 219 被拒绝
iptables的端口伪装和地址转发
####端口转发(从里面出去)
sysctl -a | grep ip_forward
1想向3借钱 不认识3 ,先向2借,2在去向3借
服务端(有两块ip 172.25.254.119 1.1.1.119)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.219
设置 连我就转到1.1.1.219
用真机(172.25.254.63) ssh root@172.25.254.214(双网卡有两个ip,iptable)
会转到1.1.1.219
注:1.1.1.219里要设置网关 GATEWAY=1.1.1.114
####地址伪装路由后
(从为外面要进来)
3找2还钱,2没有钱,2带3找1(172.25.254.19)
(3的真正目的是连接1)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.19
iptables -t nat -nL
已经加上
在3(1.1.1.219)要ssh root@172.25.254.19
注意要设置网关(2)GATEWAY=1.1.1.119