网络世界总是很危险,你直接把服务器放至到网络世界,没有加防火墙之类的防护措施,就超级不安全,容易受到攻击。
所以我们需要对防火墙进行配置,进行配置之前也需要了解一些防火墙知识。
首先需要知道iptables并非真正的防火墙,而是用来定义防火墙规则的管理工具,它会将定义好的规则交由内核中的netfilter即网络过滤来读取,从而实现防火墙功能。定义问题,按我理解还是可以把iptables当作保护服务器的外壳
iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链。规则链则依据处理数据包的位置不同分类:
PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包 POSTROUTING:
在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,当规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。
规则表也分为以下:
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记(较少使用)
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)/最常用
而规则链的先后顺序:
入站顺序:PREROUTING→INPUT
出站顺序:OUTPUT→POSTROUTING
转发顺序:PREROUTING→FORWARD→POSTROUTING
iptables命令中则常见的动作有:
ACCEPT:允许通过.
LOG:记录日志信息,然后传给下一条规则继续匹配.
REJECT:拒绝通过,必要时会给出提示.
DROP:直接丢弃,不给出任何回应
注意:命令配置中若没有指定那张表,一般默认为filter表;不指定规则链则指表内所有的规则链;过滤数据包的过程中会在规则链中匹配规则,它是从第一条开始匹配,会依次匹配,匹配到即停止(LOG规则例外),若没匹配项则按链的默认状态处理
iptables的用法解析
参数 | 作用 |
---|---|
-P | 设置默认策略.如:iptables -P INPUT (DROP |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I 链名 num | 在规则链的前头或者在指定的链编号前加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外 |
-d | 匹配目标地址 |
-i eth0 | 匹配从eth0流入的数据 |
-0 eth0 | 匹配从eth0流出的数据 |
-p | 匹配协议,如tcp,udp,icmp |
–dport num | 匹配目标端口号 |
–sport num | 匹配源端口号 |
具体命令显示
查看iptables服务规则配置
我进行开放了80,53,20,21…….等等端口,并且预设规则动作是INPUT链是DROP,OUTPUT链是ACCEPT,FORWARD链是DROP。
清除原有规则
然后需要保存配置才可以生效,不然重启之后又会复原的
保存配置之后也要记得重启让配置生效
现在iptables什么规则都没有了,需要进行手动开始配置了
①设定预设规则
建议三条链都预设DROP,因为这样比较安全
服务器现在都是默认拒绝连接的,所以需要进行一些规则的配置才可以让服务器正常运行
②针对服务需求开启端口
一:接受与响应ICMP包,因为我是个人虚拟机上做实验的,为了方便我会开放这个功能,如果你是在公司业务,看个人需求开不开
二:开启SSH服务,它开启端口是22端口
三:开启web服务,开启端口为80
四:开启ftp服务,开启端口为20,21
因为ftp服务是比较特殊的,它还有一些端口是 数据传输端口,例如目录列表,上传,下载文件都要用到这些端口
这时需要修改一下ftp配置文件/etc/vsftpd/vsftpd.conf
这两句话的意思告诉vsftpd, 要传输数据的端口范围就在30001到31000 这个范围内传送
修改配置,要重启vsftpd服务使其生效
然后添加防火墙规则,打开30001至31000端口
五:开启DNS解析服务,端口为53,且使用的是udp协议
六:开启邮件服务,端口为25,110端口
七:一些细节配置
目标来自 192.168.2.200 这个 IP 的封包都予以接受
只准192.168.2.100连接ssh服务
iptables -A INPUT -s 192.168.2.100 -p tcp --dport 22 -j ACCEPT
iptables –A OUTPUT –s 192.168.2.100 –p –tcp –sport 22 –j ACCEPT
若在IP前面加上“!”,即是只不准192.168.2.100连接ssh服务
删除某条规则
这样也可以查看规则,并按照上述规则进行删除
但又一个简单的方法使用iptables –nL –line-n (n指定number)可以查看命令的编号,并进行编号删除,比较简单
指定链名和编号即可进行删除
关于FORWARD链和其他规则表我并没有涉及,等我下次有空再补充