一、主要流程
- 首先查看当前系统的所有
iptables
规则:sudo iptables –L
- 查看每个链的默认规则:
sudo iptables –S
- 如果
iptables
里面已经有规则了,想取消并重新配置的话,可以清空:sudo iptables –F
“-F”
不会清空默认策略。为了防止ssh
被阻断,可以先将INPUT
和OUTPU
恢复到默认的ACCEPT
粗略:
sudo iptables –P INPUT ACCEPT
sudo iptables –P OUTPUT ACCEPT
sudo iptables –F
在配置好允许SSH连接后,再讲INPUT
和OUTPUT
链的默认规则改为DROP
即可。
- 创建自己的iptables规则
由于INPUT
链会处理所有连接到服务器的入站数据包,因此我们所有的操作都与INPUT
链油管。现在先来配置服务器允许SSH连接:
sudo iptables –A INPUT –m conntrack --ctstate ESTABLISHED,RELATED –j ACCEPT
-A INPUT
:将这条规则追加到INPUT
链的最后
-m conntrack
:iptables
除了自己的核心功能外,还有使用的扩展和模块,这个参数表明添加conntrack模块提供的能力(可以根据先前的连接来确定数据包之间的关系)。
-ctstate
:该参数为conntrack
模块提供,它可以确定如何用现在的数据包去匹配先前获得的数据包。ESTABLISHED
值将自动允许现有连接的数据包,RELATED
值将允许已建立连接的相关数据包。(这样就与SSH
会话特性相匹配上了)
-j ACCEPT
:指定匹配的数据包的目标。表示接受和允许符合标准的上述数据包通过。 - 配置后可以看一下规则:
sudo iptables –L
- 接受其他必要连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables –A INPUT –p tcp --dport 80 –j ACCEPT
sudo iptables –A INPUT –p tcp --dport 3306 –j ACCEPT
为保证我们的VPS
能够正常运行,我们需要添加一条允许规则。通常,计算机上的服务都会发送网络数据包以保持彼此之间的通信。这种通信会利用到一个名叫lookback
的伪网卡将流量引导回自己。因此,我们还需要为lookback网卡添加一条允许规则。
sudo iptables –I INPUT 1 –i lo –j ACCEPT
7 实时drop
规则
前面讲的内容都是基于一个前提假设的,但事先我们需要先把防火墙的两种常用模式说明一下。一种是明确定义允许通过防火墙的规则,不匹配的都丢弃。另一种是明确定义拒绝通过防火墙的规则,其余的都允许。我们采用的是第一种方式,这样匹配起来相对简单,规则也较少,也更加安全。
前面我们已经为INPUT
链接定义了一些允许规则,但默认INPUT
链是允许所有包,所以我们现在需要将INPUT
链的默认规则更改为“DROP”
即丢弃:
sudo iptables –P INPUT DROP
(默认accept
才能通)
- 查看和保存配置
sudo iptables –L --line-numbers
虽然iptables执行这些命令后会立即生效,但生效过程是临时的,系统在重启之后便会丢失。因此,我们还需要将这些配置添加到配置文件当中,以保证系统在下次重启后会自动载入我们的规则。
sudo apt-get update
sudo apt-get install iptables-persistent
总结:
设置防火墙规则了,端口也被监听了,但也有可能不起效果。因为端口开放语句不能在prohibited
的后面。
图片.png
如果返回404/403
错误,说明是nginx
的配置等因素。
如果显示无法连接,通常是防火墙或nginx
未启动的因素。
ubuntu中
不存在/etc/sysconf/iptables
文件,所以无法使用service
启动iptables
,需要用modprobe
命令:sudo modprobe ip_tables
sudo iptables –L –n --line-number
:显示端口开放情况(filter
表)
二、这些看看命令就好,可能有些不正确
Ubuntu 14.04配置iptables防火墙:
Ubuntu默认安装时没有开启任何防火墙的。
当使用service iptables status
时发现提示:iptables:unrecognized service。意思为无法识别的服务。
1.查看系统是否安装防火墙
sudo whereis iptables
图片.png
出现上述提示,表示已经安装
iptables
,如果没有安装,则可以通过以下命令安装:sudo apt-get install iptables
2.查看防火墙配置信息
sudo iptables –L
图片.png
3.新建规则文件
mkdir /etc/iptables
#先新建目录,本身无此目录vi /ect/iptables/rules.v4
或:
mkdir /etc/iptables & vi /etc/iptables/rules.v4
添加以下内容:
图片.png
4.使防火墙生效:
iptables-restore < /etc/iptables/rules.v4
5.创建文件,添加以下内容,使防火墙开机启动
vi /etc/network/if-pre-up.d/iptablesiptablesj
#!/bin/bash
iptables-restore < /etc/iptables/rules.v4
6.添加执行权限:
chmod +x /etc/netwoek/if-pre-up.d/iptables
7.查看规则是否生效:
iptables –L –n
启动防火墙:
在
ubuntu
中不存在/etc/init.d/iptables
文件,所以无法使用service
等命令来启动iptables
,需要用modprobe
命令。sudo modprobe ip_tables
关闭防火墙:
ubuntu
并没有关闭命令,所以要通过变通方法解决防火墙。图片.png
(在这过程中,xshell突然连接不上远程虚拟主机。然后在阿里云界面 云服务器ECS 实例里面的远程连接,登录服务器账号进行连接即可。然后xshell就可以连接了。原始密码是288320,改后密码:556699。也有可能(就是)是因为22端口没开,在阿里云重启一下服务器就可以了。)
建立文件 /etc/sysconfig/iptables
输入最下页配置内容。
执行:sudo service iptables start
;显示:iptables:unrecognized service
。
原因一:执行命令对应的路径不对
原因二:ubuntu
中不存在/etc/sysconf/iptables
文件,所以无法使用service
启动iptables
,需要用modprobe
命令:sudo modprobe ip_tables
ubuntu
将iptables
的配置文件放在了ufw
里面,而不是在/etc/sysconfig/iptables
里面(有说新安装的防火墙是默认被禁掉的,所以也没有配置过任何策略-错);更改或添加配置,直接用iptables
命令修改,然后sudo iptables-save
即可保存并查看配置文件信息。有说改动的信息被保存在了/etc/sysconfig
的iptables
文件中(并没有,不知道保存到哪了)。
iptables相关命令:
(删除了上面创建的所有文件和文件夹,重启服务器,查看iptables
时,出现原始界面)
iptables –F –n --line-number
查看每个表的默认规则:
iptables –S
图片.png
- 添加
filter
表
iptables (–t filter)–A INPUT –p tcp –m tcp --dport 21 –j ACCEPT
// 开放21端口 - 添加
nat
表
iptables –t nat –A POSTROUTING –s 192.168.10.0/24 –j MASQUERADE
将源地址为192.168.10.0/24
的数据包进行地址伪装 -
–A
默认插到尾部,-I
插入到指定位置;A:append;I:insert
;
iptables –I INPUT 3 –p tcp –m tcp –dport 21 –j ACCEPT
- 将
filter
表INPUT
链第3
条规则的动作改为DROP;R:replace
iptables –R INPUT 3 –j DROP
- 删除
iptables
规则
iptables –D INPUT 3
//删除input
的第三条规则(filter
表)
iptables –t nat –D POSTROUTING 1
//删除nat
表postrouting
第一条规则
iptables –F INPUT
//清空filter
表INPUT
所有规则
iptables –F
//清空所有规则
iptables –t nat –F POSTROUTING
//清空nat
表POSTROUTING
所有规则 - 查看端口开放情况:
sudo lsof –i
sudo iptables –L –n --line-number
:显示端口开放情况(filter
表)
sudo iptables –L –n --line-number |grep 80
:查看特定端口是否开放(filter
表)
sudo netstat –an|grep 80
:查看80
端口是否在被监听/sudo netstat -anp
sudo lsof –i:80
:查看80
端口占用情况
sudo iptables –t nat –vnl POSTROUTING –line-number
查看nat
表 - 设置默认规则:
sudo iptables –P INPUT DROP
//设置filter
表INPUT
默认规则为DROP
;
网友评论