firewalld
FirewallD提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。firewalld将网卡对应到不同的区域(zone),zone 默认共有9个,block dmz drop external home internal public trusted work.不同的区域之间的差异是其对待数据包的默认行为不同,根据区域名字我们可以很直观的知道该区域的特征,在CentOS7系统中,默认区域被设置为public.
使用命令行接口配置防火墙
firewall-cmd --state 查看firewalld的状态
firewall-cmd --get-active-zones 查看当前活动的区域,附带接口列表
firewall-cmd --get-default-zone 查看默认区域
firewall-cmd --zone=public --list-all 列出指定区域的详细设置
firewall-cmd --list-all-zones 列出所有区域的详细设置
firewall-cmd --get-services 列出所有预设服务
firewall-cmd --set-default-zone=trusted 设置默认区域为trusted
将默认区域设置为trusted,尽管没有允许http服务,但客户端浏览器任可访问
- firewall-cmd --add-source=172.25.254.59 --zone=trusted 来自172.25.254.59主机通过的是trusted区域
- firewall-cmd --remove-source=172.25.254.59 --zone=trusted
- firewall-cmd --remove-interface=eth1 --zone=public 将eth1端口从public区域移除
- firewall-cmd --add-interface=eth1 --zone=trusted 将eth1端口添加到trusted区域
- firewall-cmd --add-service=http 允许http服务
- firewall-cmd --add-port=8080/tcp 允许http的8080端口
- firewall-cmd --add-server=httpd 允许http服务
- firewall-cmd --permanent --add-server=httpd 永久允许http服务,需要--reload才能生效
- firewall-cmd --reload 更新防火墙规则,无需断开链接
- firewall-cmd --complate-reload 更新防火墙规则,需要断开链接(可用ssh服务作测试)
- firewall-cmd --direct --get-all-rules 查看直接端口模式添加的规则
- firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.59 -p tcp --dport 22 -j ACCEPT 允许来自172.25.254.59的主机访问本机的22号端口
- firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -s 172.25.254.59 -p tcp --dport 22 -j ACCEPT 移除允许来172.25.254.59的主机访问本机的22号端口
- firewall-cmd --direct --add-rule ipv4 filter INPUT 2 !-s 172.25.254.59 -p tcp --dport 22 -j ACCEPT 允许来自除了172.25.254.59的所有主机访问本机的22号端口
cat /etc/services |grep ssh 查看ssh服务的相关端口
端口转发:
- 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
- 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.79 ssh链接本机的22号端口的主机让其自动连接到172.25.254.79主机上
firewall-cmd --add-masquerade 打开伪装功能
测试:在远程登陆172.25.254.159主机时,实际登陆的是172.25.254.79主机
firewall-cmd -add-icmp-block=echo-request 让其他主机ping不通自己
firewall-cmd --remove-icmp-block=echo-request
firewall-cmd -add-icmp-block=echo-request --timeout=10 在10s后能够ping通
地址转换:
场景:不同网段的两台主机能够通过双网卡主机的地址转换ping通对方
主机一:ip 192.168.0.1 gateway 19.168.0.100 ping不通172.25.254.59
主机二:eth0=172.25.254.79 eth1=192.168.0.100
vim /etc/sysctl 打开转发功能
测试:主机192.16 8.0.100可以ping通172.25.254.59
主机172.25.254.59在远程登陆172.25.254.79时,发现实际登陆的是192.168.0.1
iptabels
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables采用“表”和“链”的分层结构,在linux中iptables主要有三张表五条链:
三张表即filter表、nat表、mangle表,分别用于实现包过滤,网络地址转换、包重构(修改)功能
filter表有三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包
Nat表有三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口)
Mangle表有五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型等
iptables -nL 可以看到filter表中的默认策略
iptables -t nat -L PREROUTING 查看nat表PREROUTING链的规则
iptables -A INPUT -s 192.168.0.4 -p tcp --dport 23 -j REJECT
iptables -A INPUT -s 192.168.0.4 -p tcp --dport 23 -j DROP (访问拒绝,无任何提示)
iptables -F 刷新策略
iptables -A INPUT -s 172.25.254.59 -j ACCEPT 添加规则
iptables -I INPUT 2 -s 172.25.254.79 -p tcp --dport 22 -j REJECT 插入到第二条策略
iptables -R INPUT 3 -j ACCEPT 将原来编号为2的规则内容替换为-j DROP
iptables -D INPUT 2 删除filter表中的第二条规则
ptables -P INPUT DROP 设置filter表INPUT链的默认规则 ,当数据包没有被规则列表里的任何规则匹配到时,按此默认规则处理
iptables -N redhat 添加自定义链名
iptables -E westos WESTOS:修改规则链名称
iptables -D redhat 1 删除自定义链下的策略
iptables -X redhat 删除自定义链
隐式扩展:
tcp:--sport
--dport
--tcp-flags mask comp
例: "--tcp-flags SYN,ACK,FIN,RST SYN"表示检查的标志SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
--syn:用于匹配第一次握手,相当于--tcp-flags SYN,ACK,FIN,RST SYN
icmp:
--icmp-type echo-request:8
echo-reply:0
iptables -A INPUT -d 172.25.254.79 -p icmp --icmp-type 8 -j DROP 限制任何主机ping172.25.254.79
显示扩展:
multiport扩展:以离散方式定义多端口匹配,最多指定15个端口
iptables -A INPUT -s 172.25.254.0/24 -d 172.25.254.79 -p tcp -m mutiport --dports 22,80 -j ACCEPT]
iprange扩展:指明连续的ip地址范围
iptables -A INPUT -d 172.25.254.79 -p tcp --dport 80 -m iprange --src-range 172.25.254.10-172.25.254.20 -j DROP
string扩展:对报文中的应用层程序做字符串模式匹配检测
iptables -A OUTPUT -s 172.25.254.79 -d 172.25.254.0/24 -p tcp --sport 80 -m string --algo bm --stirng "hehe" -j REJECT
time扩展:根据报文到达的时间与指定的时间范围进行匹配
iptables -A INPUT -s 172.25.254.0/24 -d 172.5.254.79 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
limit扩展:基于收发报文的速率作匹配
iptables -I INPUT -d 172.25.254.79 -p icmp --icmp--type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
connlimit扩展:根据每客户端ip作并发链接数量匹配
--connlimit-upto n:连接的数量小于等于n时匹配
--connlimit-above n:连接的数量大于n时匹配
iptables -A INPUT -d 172.25.254.79 -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT