Linux从入门到精通——firewalld和iptables
####firewalld和iptables###
防火墙是内核上的一个插件
火墙有两种:firewalld 和
iptables
都通过iptables往内核写入数据
一.firewalld
firewall域:
trusted home internal work public external dmz block drop
1.关于iptables
yum install iptables
systemctl stop firewalld ##关闭火墙
systemctl mask firewalld.service ##冻结火墙
iptables -nL ##查看服务情况,显示策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all --
0.0.0.0/0
0.0.0.0/0 state
RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all --
0.0.0.0/0
0.0.0.0/0
ACCEPT tcp --
0.0.0.0/0
0.0.0.0/0 state NEW tcp
dpt:22
REJECT all --
0.0.0.0/0
0.0.0.0/0 reject-with
icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all --
0.0.0.0/0
0.0.0.0/0 reject-with
icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2.火墙的使用
systemctl stop iptables.service ##关闭iptables
systemctl mask iptables.service ##冻结iptables
systemctl unmask firewalld.service ##解冻firewalld
systemctl start firewalld.service ##开启firewalld
cmd命令:
firewall-cmd --state ##查看火墙运行状态
firewall-cmd --get-active-zones ##查看正在使用的区域
firewall-cmd --get-default-zone ##查看当前默认区域
firewall-cmd --get-zones ##查看所有可使用区域
firewall-cmd --zone=public --list-all ##查看public域的允许的服务和开启的端口以及地址伪装功能的状态,和一些策略
firewall-cmd --get-services ##查看所有能设定的服务
firewall-cmd --list-all-zones ##查看所有区域的所有服务和端口
firewall-cmd --set-default-zone=dmz ##设定当前默认区域为非军事区
指定区域针对网段和设备进行操作:
firewall-cmd --permanent --zone=internal --add-source=172.25.254.110 ##指定110的默认域为internal,并永久保存
firewall-cmd --permanent --zone=internal --remove-source=172.25.254.110 ##将指定的110的域删除
firewall-cmd --permanent --zone=internal --add-internal=eth0
##指定eth0这个端口的域为internal
firewall-cmd --permanent --zone=internal --change-public=eth0
##更改eth0这个端口的域为public
firewall-cmd --permanent --zone=internal --remove-interface=eth0
##删除eth0这个端口的域
指定区域针对服务和端口域进行操作:
firewall-cmd --permanent --zone=public --add-service=http
##在publlic域中永久设定添加http服务
firewall-cmd --permanent --zone=public --remove-service=http
firewall-cmd --zone=public --list-ports
##列出public所有端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
注意:加--permanent参数的要使设定生效需要重新加载火墙
firewall-cmd --reload
/etc/firewalld/zones
可以在该目录中修改对应区域名.xml文件,来添加或删除服务,编辑完后要重启服务或重加载
/lib/firewalld/services
现在默认的firewalld域,系统会将etc下的默认域的文件,移动到lib下执行
想要更改或添加服务要在etc下的文件里面改,这个是永久的;用命令添加的是暂时的,想要永久要加 --permanent,并且重启服务
firewall-cmd --reload ##重新加载,但是如果有程序正在运行,也不会阻止程序运行
firewall-cmd --complete-reload ##比较强制重新加载,但是如果有程序正在运行,就会立即阻止程序运行
3.directory rules
通过firewall-cmd工具,可以使用--direct选项在运行时间里增加或者移除链。
三表五链
访问本机的数据,经过内核的数据filter
不经过本机内核的东西,数据转换nat
包含所有数据(前两个所有数据)等到前两个表格不够用的时候才使用mangle
firewall-cmd --direct --get-all-rules ##获取全部的链
firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.110 -p tcp
--dport 22 -j ACCEPT ##添加一条链在filter的INPUT的下面,设定源110访问22端口时是允许的
firewall-cmd --direct --add-rule ipv4 filter INPUT 2 ! -s 172.25.254.110 -p tcp
--dport 22 -j ACCEPT ##添加一条链在filter的INPUT的下面,设定除了源110以外的所有源访问22端口时是允许的
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -s 172.25.254.110 -p
tcp --dport 22 -j ACCEPT
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 ! -s 172.25.254.110 -p tcp --dport 22 -j
ACCEPT
4.icmp-block
用这个命令阻绝一个或者多个ICMP类型。ICMP类型是firewalld支持的ICMP类型之一。比如 ping 172.25.254.110 就是用的ICMP
firewall-cmd --get-icmptypes ##查看icmp含有的命令
firewall-cmd
--add-icmp-block=destination-unreachale
##ping不通该主机的ip
firewall-cmd
--add-icmp-block=echo-request ##ping不了
firewall-cmd --add-icmp-block=echo-request
--timeout=5 ##刚开始ping不通,5秒以后就能ping通
5.地址伪装与源地址转换
firewall-cmd --add-masquerade ##开启地址伪装功能
firewall-cmd
--add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.10 ##所有通过22端口访问110主机,都会被转到10这个主机上面
firewall-cmd --add-rich-rule="rule family=ipv4 source
address=172.25.254.100 masquerade"
##ip隐藏,比如说就是我的ip是10,我通过110这个主机的去连接100这台主机,在100这台主机上用 w -i 命令查看到的ip是110的,而不是10的
6.路由器功能 masquerade
两个在不同网络区域内的电脑,比如192想要ping通172这个网段的,需要通过一个路由器做一次地址转换
测试前:
(1)用desktop当作路由器
要开通地址伪装功能,还需i要两块虚拟网卡,设定两个虚拟网卡的ip,一个为192的,另一个为172的。
(2)用server当作测试主机
修改server的ip为192的,并修改网关为192的
systemctl restart network
route -n ##查看网关是否添加成功
测试:
(1)用server刚开始的时候ping 172是ping不通的
(2)在desktop里面
firewall-cmd --permanent
--add-masquerade ##开启地址伪装功能
sysctl -a | grep forward ##查看一些功能是否开启
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
net.ipv4.ip_forward = 1
firewall-cmd --reload
二.iptables
1.iptables的启用
systemctl stop firewalld
systemctl mask firewalld ##冻结firewalld
systemctl start iptables ##如果显示冻结,用unmask先打开
systemctl unmask iptables
systemctl start iptables
2.iptables的应用
iptables -nL ##查看所有表的情况
iptables -t nat -nL ##查看nat表的情况
iptables -F ##刷新策略(仅清空链中规则)
iptables -N redhat ##添加自定义链名
iptables -D redhat ##删除自定义链下的策略
iptables -X redhat ##删除自定义链
iptables -E rehdat ##修改名称
iptables --state ##查看状态
iptables -i lo ##设置端口进来
iptables -o eth0 ##设置从网络接口eth0出去
iptables -s ##source 来源
iptables -A ##增加
iptables -I ##插入 某一链表的第几行
iptables -R ##替换
iptables -P ##修改默认
3.重新写入策略(数据优化)
(1)清空原有策略,并添加新的策略并保存
vim /etc/sysconfig/iptables ##策略存放的路径
iptables -F ##(清空)刷新原有的策略
cat /etc/sysconfig/iptables ##查看后发现,原有策略被清空
(2)加入新的策略
iptables -A INPUT -m state --state
RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state new
-p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state new
-p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state new
-p tcp --dport 53 -j ACCEPT
iptables -nL ##查看新添加的策略
service iptables save ##保存添加的策略
iptables -nL ##新策略添加成功
cat /etc/sysconfig/iptables ##查看策略