使用如下命令查看是否安装了防火墙,以及查看现有防火墙规则
// 命令后面的 line-number 为显示行号(将规则一则一则输出,并显示行号)-n 数字格式显示ip和端口
iptables -L -n --line-numbers
像这样:
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 DOCKER-ISOLATION all -- 0.0.0.0/0 0.0.0.0/0
2 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain DOCKER (1 references)
num target prot opt source destination
Chain DOCKER-ISOLATION (1 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
按装命令:
CentOS :
yum install iptables
Ubuntu :
apt-get install iptables
// xxx 代表存在的规则表
iptabls -A xxx -p tcp --dport 22 -j ACCEPT
// xxx 代表存在的规则表
iptabls -I xxx -p tcp --dport 22 -j ACCEPT
注意: -A 和 -I 区别:
1. -A默认是把规则插到结尾
2. -I 默认是把规则插到前边,但是可以加参数指定插入到第几行
// 把下面规则插入 xxx 规则表的第2行
iptables -I xxx 2 -p tcp --dport 222 -j ACCEPT
//把刚才添加的规则删除
iptables -D xxx -p tcp --dport 222 -j ACCEPT
也可以
// 把第一条规则删除
iptables -D xxx 1
iptables -C xxx -p tcp --dport 222 -j ACCEPT
如果什么都不显示,说明存在这个规则,如果报iptables: Bad rule (does a matching rule exist in that chain?).
说明不存在的规则,可以添加
// 把 xxx 中的 第一条规则22端口改成222端口
iptables -R xxx 1 -p tcp --dport 222 -j ACCEPT
iptables -A xxx -p tcp -m tcp --dport 22 -j ACCEPT
-m tcp
的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync
等功能)
其实只用-p tcp
了话, iptables也会默认的使用 -m tcp
来调用 tcp模块提供的功能。但是 -p tcp
和-m tcp
是两个不同层面的东西,一个是说当前规则作用于 tcp 协议包,而后一是说明要使用iptables的tcp模块的功能 (–dport 等)
iptables -Z :清空
硬件防火墙默认一般有三个区,firewalld引入这一概念系统默认存在以下区域
drop:默认丢弃所有包
block:拒绝所有外部连接,允许内部发起的连接
internal:信任所有连接
public:指定外部连接可以进入
external:这个不太明白,功能上和上面相同,允许指定的外部连接
dmz:和硬件防火墙一样,受限制的公共连接可以进入
work:工作区,概念和workgoup一样,也是指定的外部连接允许
home:类似家庭组
yum install firewalld firewall-config
systemctl start/restart/stop/status firewalld
// 或者
service iptables start/restart/stop/status
//查看状态也可用
firewall-cmd --state
firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --panic-on
firewall-cmd --panic-off
firewall-cmd --query-panic
firewall-cmd --reload
firewall-cmd --complete-reload
注:两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
firewall-cmd --zone=public --add-interface=eth0
注:永久生效再加上–permanent然后reload防火墙
firewall-cmd --set-default-zone=public
注: 立即生效无需重启
firewall-cmd --zone=dmz --list-ports
firewall-cmd --zone=dmz --add-port=8080/tcp
注:永久生效再加上–permanent然后reload防火墙
firewall-cmd --zone=work --add-service=smtp
firewall-cmd --zone=work --remove-service=smtp
firewall-cmd --list-all-zones
一向以简单易用著称Ubuntu在它的发行版中,附带了一个相对iptables简单很多的防火墙配置工具:ufw
ufw默认是没有启用的。 也就是说ubuntu中端口都是默认开放的。
ufw防火墙是一个主机端的iptables类防火墙配置工具。这个工具的目的是提供给用户一个可以轻松驾驭的界面,就像包集成和动态检测开放的端口一样
sudo apt-get install ufw
sudo ufw default deny
sudo ufw enable
sudo ufw allow 22
或者
sudo ufw allow ssh
注意:由于在/etc/services中, 22端口对应的服务名是ssh,所以命令是一样。
sudo ufw status
sudo ufw delete allow 22
sudo ufw allow 22/tcp
sudo ufw allow proto tcp from 192.168.0.1 to any port 22
sudu ufw disable
ufw logging on|off