firewall-cmd --get-default-zone查看当前默认区域
firewall-cmd --get-default-zone=public修改当前默认区域
firewall-cmd --set-default-zone=dmz修改当前区域(永久)
firewall-cmd --get-active-zones查看所有区域包含的网卡
firewall-cmd --zone=public --remove-interface=eth0指定区域移除网卡
firewall-cmd --zone=trusted --add-interface=eth0指定区域添加网卡
firewall-cmd --reload加载修改(临时修改会消失)
firewall-cmd --list-all查看所有规则
网卡只能存在一个区域,一个区域可以包含多个网卡
firewall-cmd --add-port=8080/tcp --add-port=8080/udp添加放行端口
firewall-cmd --add-service=http添加放行服务/usr/lib/firewalld/services/所有的服务名称 cp添加服务
转发端口
–add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
firewall-cmd --add-masquerade开启ip伪装功能remove移除
富规则语法格式
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
accept | reject [type="reject type"] | drop
1.比如允许10.0.0.1主机能够访问80,允许172.16.1.0/24能访问8081端口
[root@manager ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 port port=“80” protocol=“tcp” accept’
[root@manager ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=“8081” protocol=“tcp” accept
2.默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@manager ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=“172.16.1.0/24” service name=“ssh” drop’
3.使用firewalld,允许所有人能访问http,https服务,但只有10.0.0.1主机可以访问ssh服务
[root@manager ~]# firewall-cmd --remove-service=ssh
[root@manager ~]# firewall-cmd --add-service={http,https}
[root@manager ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=“10.0.0.1/32” service name=“ssh” accept’
4.当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口
firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=“10.0.0.1/32” forward-port port=“6666” protocol=“tcp” to-port=“22” to-addr=“172.16.1.7”’
[root@manager ~]# firewall-cmd --add-masquerade
accept: 允许
reject: 拒绝,回句话(连接被拒绝)
drop: 拒绝,不搭理(连接超时)
filter表 | 屏蔽或准许 端口 ip 默认使用的表 |
---|---|
INPUT | 就是过滤进入主机的数据包 |
FORWARD | 负责转发流经主机的数据包 |
OUTPUT | 就是处理从主机发出去的数据包 |
nat表 | 共享上网 ip/端口映射 |
---|---|
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址 |
PREROUTING | 改变数据包的目的地址、目的端口 |
POSTROUTING | 改变数据包的源地址,源端口 |
mangle | 修改数据包,比如TTL,TOS或MARK。 注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序可以使用这种标记对包进行过滤或高级路由。 |
---|---|
PREROUTING | 进入防火墙之后、路由判断之前改变包 |
POSTROUTING | 在所有路由判断之后 |
OUTPUT | 确定包的目的之前更改数据包 |
INPUT | 在包被路由到本地之后,但在用户空间的程序看到它之前改变包 |
FORWARD | 在最初的路由判断之后、最后一次更改包的目的之前mangle包 |
安装yum install -y iptables-services
lsmod 系统模块
iptables -nL | 查看默认表所有规则 |
---|---|
-n | 不要把端口 或ip反向解析为 名字 |
-t | 指定表 |
-A | 追加规则 应用于ACCEPT |
-D | 删除规则 可以使用序号删除 |
-I | 添加DROP规则 |
-p | 协议ping是icmp协议 |
- -dport | 目标端口 |
- -sport | 源端口 |
-s | 源ip |
-d | 目标ip |
-m | 指定模块 |
-i | 输入的时候 从哪个网卡进来 |
-o | 输出的时候 从哪个网卡出去 |
-j | 动作 |
-F | 清除所有规则 |
屏蔽某个ip
iptables -I INPUT -s 10.0.0.7 -j DROP
屏蔽某个端口
iptables -I INPUT -p tcp --dport 22 -j DROP
屏蔽某个网段访问端口
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP
只允许某个网段连接
iptables -I INPUT ! -s 10.0.0.0/24 -j DROP
添加多个端口的规则
iptables -I INPUT -p tcp -m multiport -- dport 80,443 -j DROP
iptables -I INPUT -p tcp --dport 1024:65535 -j DROP#多个端口
禁止ping通
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
cat /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1
sysctl -p
限制并发及速率
iptables -I INPUT -p icmp -m limit --limit 10/minute -- limit-burst 5 -j ACCEPT
# --limit n/{second/minute/hour}每分钟只能有10个数据包
#limit-burst在同一时间内允许通过的请求”n”为数字,不指定默认为5
将当前规则写入文件
iptables-save >/etc/sysconfig/iptables
读取文件中的规则
iptables-restore </etc/sysconfig/iptables
实现端口转发
iptables -t nat -A PREROUTING -d 10.0.0.61 - p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22