前言
文章转载自 linux 防火墙使用以及配置,使用方法大同小异,在此转载一篇做个笔记。
Centos 7 firewall :
1. firewalld 的基本使用
- 启动:
systemctl start firewalld
- 关闭:
systemctl stop firewalld
- 查看状态:
systemctl status firewalld
- 开机禁用 :
systemctl disable firewalld
- 开机启用 :
systemctl enable firewalld
2. systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。
- 启动一个服务:
systemctl start firewalld.service
- 关闭一个服务:
systemctl stop firewalld.service
- 重启一个服务:
systemctl restart firewalld.service
- 显示一个服务的状态:
systemctl status firewalld.service
- 在开机时启用一个服务:
systemctl enable firewalld.service
- 在开机时禁用一个服务:
systemctl disable firewalld.service
- 查看服务是否开机启动:
systemctl is-enabled firewalld.service
- 查看已启动的服务列表:
systemctl list-unit-files|grep enabled
- 查看启动失败的服务列表:
systemctl --failed
3. 配置 firewalld-cmd
- 查看版本:
firewall-cmd --version
- 查看帮助:
firewall-cmd --help
- 显示状态:
firewall-cmd --state
- 查看所有打开的端口:
firewall-cmd --zone=public --list-ports
- 更新防火墙规则:
firewall-cmd --reload
- 查看区域信息:
firewall-cmd --get-active-zones
- 查看指定接口所属区域:
firewall-cmd --get-zone-of-interface=eth0
- 拒绝所有包:
firewall-cmd --panic-on
- 取消拒绝状态:
firewall-cmd --panic-off
- 查看是否拒绝:
firewall-cmd --query-panic
那怎么开启一个端口呢?
- 添加:
firewall-cmd --zone=public --add-port=80/tcp --permanent
(–permanent 永久生效,没有此参数重启后失效) - 重新载入:
firewall-cmd --reload
- 查看:
firewall-cmd --zone= public --query-port=80/tcp
删除:
firewall-cmd --zone= public --remove-port=80/tcp --permanent
调整默认策略(默认拒绝所有访问,改成允许所有访问):
1 | firewall-cmd --permanent --zone=public --set-target=ACCEPT |
- 对某个 IP 开放多个端口:
1 | firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.159.60.29" port protocol="tcp" port="1:65535" accept" |
Centos 6 iptables:
1. iptables 的基本使用
- 启动:
service iptables start
- 关闭:
service iptables stop
- 查看状态:
service iptables status
- 开机禁用:
chkconfig iptables off
- 开机启用:
chkconfig iptables on
2. 开放指定的端口
-A
和 -I
参数分别为添加到规则末尾和规则最前面。
- 允许本地回环接口(即运行本机访问本机):
iptables -A INPUT -i lo -j ACCEPT
- 允许已建立的或相关连的通行:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 允许所有本机向外的访问:
1 | iptables -P INPUT ACCEPT |
- 允许访问 22 端口:
1 | # -s 后可以跟 IP 段或指定 IP 地址 |
- 允许访问 80 端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 允许 FTP 服务的 21 和 20 端口:
1 | iptables -A INPUT -p tcp --dport 21 -j ACCEPT |
- 允许 ping:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
- 禁止其他未允许的规则访问:
1 | # 注:如果 22 端口未加入允许规则,SSH 链接会直接断开。 |
3. 屏蔽 IP
注:如果只是想屏蔽 IP 的话,上述 “2. 开放指定的端口” 可以直接跳过。
- 屏蔽单个 IP 的命令是:
iptables -I INPUT -s 123.45.6.7 -j DROP
- 封整个段(即从 123.0.0.1 到 123.255.255.254)的命令:
iptables -I INPUT -s 123.0.0.0/8 -j DROP
- 封 IP 段(即从 123.45.0.1 到 123.45.255.254)的命令:
iptables -I INPUT -s 124.45.0.0/16 -j DROP
- 封 IP 段(即从 123.45.6.1 到 123.45.6.254)的命令是:
iptables -I INPUT -s 123.45.6.0/24 -j DROP
4. iptables 的规则
查看已添加的规则
iptables -L -n
只显示 IP 地址和端口号,不将 IP 解析为域名
删除已添加的 iptables 的规则
将所有 iptables 以序号标记显示,执行:
iptables -L -n --line-numbers
比如要删除 INPUT 里序号为 8 的规则,执行:
iptables -D INPUT 8
5. 可以直接编辑配置文件,添加 iptables 防火墙规则:
iptables 的配置文件为 /etc/sysconfig/iptables
编辑配置文件:
vi /etc/sysconfig/iptables
文件中的配置规则与通过的 iptables 命令配置,语法相似:
如,通过 iptables 的命令配置,允许访问 80 端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
那么,在文件中配置,只需要去掉句首的 iptables,添加如下内容:
-A INPUT -p tcp --dport 80 -j ACCEPT
保存退出。
有两种方式添加规则
iptables -A 和iptables -I
iptables -A
添加的规则是添加在最后面。如针对 INPUT 链增加一条规则,接收从 eth0 口进入且源地址为 192.168.0.0/16 网段发往本机的数据。
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j ACCEPT
iptables -I
添加的规则默认添加至第一条。
如果要指定插入规则的位置,则使用 iptables -I
时指定位置序号即可。
删除规则
如果删除指定则,使用 iptables -D
命令,命令后可接序号。效果请对比上图。
或 iptables -D
接详细定义;
如果想把所有规则都清除掉,可使用 iptables -F
。
备份 iptabes rules
使用 iptables-save
命令,如:
iptables-save > /etc/sysconfig/iptables.save
恢复 iptables rules
使用 iptables
命令,如:
iptables-restore < /etc/sysconfig/iptables.save
iptables 配置保存
以上做的配置修改,在设备重启后,配置将丢失。可使用 service iptables save
进行保存。
重启 iptables 的服务使其生效:
service iptables save
添加规则后保存重启生效。
service iptables restart
后记
关于更多的 iptables 的使用方法可以执行:
iptables --help