INPUT:对进入本机的数据包进行过滤
OUTPUT:对从本机出去的数据包进行过滤
FORWARD:对目标主机非本机,而从该接点通过的数据包进行过滤通常用在保护一个内部网络中。
包过滤:
#iptables -A INPUT -p icmp -j DROP 丢弃
ACCEPT 接受
REJECT 弹回
LOG 日志
包处理方法通常有以上几种:Drop,ACCEPT,REJECT,LOG等方式
手动添加
-A 添加
INPUT 添加到INPUT 规则里
-p 协议类型匹配后面指定协议的
-j 对匹配条件的包做后面的处理或跳转到相关规则上
已经配置好的防火墙规则可以通过
iptables -L -n命令来查看
具体可参考 # iptables --help
具体的一一条规则
iptables -A INPUT -p tcp -d 192.168.0.200 --dport 21 -j DROP
关闭本地的FTP对外服务
# iptables -F
在配置服务器规则时通常把默认的规则全部设置为REJECT即全部拒绝,在根据需要开放部分端口
为了不在定义规则后SSH服务被拒绝而断开了服务器连接,在设置默认规则为REJECT之前先设置好SSH规则为ACCEPT
分别为
[root@happyboy root]# iptables -A INPUT -p tcp -d 192.168.0.200 --dport 22 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp -s 192.168.0.200 --sport 22 -j ACCEPT
然后再改变发防火墙的默认配置由
Chain INPUT (policy ACCEPT)更改为
Chain INPUT (policy DROP)
其中更改为的Drop或者为REJECT也可以
命令为
[root@happyboy root]# iptables -P INPUT DROP
[root@happyboy root]# iptables -P OUTPUT DROP
[root@happyboy root]# iptables -P FORWARD DROP
做好规则后要记得保存
# service iptablles save //保存文件为/etc/sysconfig/iptables
再添加web方式的访问
[root@happyboy root]# iptables -A INPUT -p tcp -d 192.168.0.200 --dport 80 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp -s 192.168.0.200 --sport 80 -j ACCEPT
在INPUT 的目标主机是自己和OUTPUT 中的源主机是自己时可以省略,如上面的-d 192.168.0.200和-s 192.168.0.200
[root@happyboy root]# iptables -A INPUT -p tcp -d 192.168.0.200 --dport 21 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp -s 192.168.0.200 --sport 21 -j ACCEPT
指定端口范围:如果我们在vsftp中开启pasv模式,则需要允许pasv模式的端口范围
[root@happyboy root]# iptables -A INPUT -p tcp --dport 9000:9045 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 9000:9045 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
[root@happyboy root]# iptables -A INPUT -p udp --sport 53 -j ACCEPT
允许DNS查询,注意:如果自身是既是客户机也是服务器,那也要添加对应规则。比如本身也是自己的DNS服务
[root@happyboy root]# iptables -A INPUT -p udp --dport 53 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
注意netstat -tnl 可以看到很多服务守护在127.0.0.1上,对本机提供服务,如果本机无法正常访问本机的某些资源会影响本机内部的正常运行,打开本地对本机的访问
[root@happyboy root]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
[root@happyboy root]# ^INPUT^OUTPUT //这里直接将上一条命令中的INPUT替换为OUTPUT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
为了防止机器漏洞被利用造成的从本地主动发出的连接请求,比如ssh的22。我们可以利用iptables防火墙的状态检查功能
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-m表示扩展条件,state表示匹配状态检查,添加成功后将原来规则删除
ACCEPT tcp -- 192.168.0.200 0.0.0.0/0 tcp spt:22
[root@happyboy root]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果是客户机也可以做响应规则来保护自己,只有自己一主动发出过的连接请求才接收:eg
[root@happyboy root]# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
[root@happyboy root]# iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
当然很少有在客户机上做防火墙规则:当时如果既做为服务器也做为客户机时就需要了!
[root@happyboy root]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT //这两条针对80服务
[root@happyboy root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
[root@happyboy root]# iptables -A INPUT -p tcp --dport 9000:9045 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 9000:9045 -m state --state ESTABLISHED -j ACCEPT //这四条针对FTP服务
DNS服务以及守护在127.0.0.1 不变
[root@happyboy root]# iptables -L -n --line-numbers //以编号形式显示每个链中的规则
--delete -D chain rulenum Delete rule rulenum (1 = first) from chain 该帮助说明可以编号形式删除某条链中的规则
[root@happyboy root]# iptables -D OUTPUT 1 //这里的1为看到的对应规则的编号
=================================================================================
LOG目标,将已经设置规则可以通过的信息记录到日志中。
1.
[root@happyboy root]# iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "IPTABLES:"
日志级别5 可以参考syslog帮助 man syslog,
#define KERN_NOTICE "<5>" /* normal but significant condition */ 定义级别5日志类型。
--log-prefix指定日志文件前缀,以便查看。
2.
编译日志配置文件
[root@happyboy root]# vi /etc/syslog.conf
kern.=notice /var/log/firewall.log
增加上述一行,这里配置要与iptables中级别一致。
[root@happyboy root]# service syslog restart
由于在input中同样对22端口的判断有两条,日志的在后面不起作用,
[root@happyboy root]# iptables -D INPUT 9 //删除刚刚添加的LOG那条规则
[root@happyboy root]# iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "iptables"
即将该规则插入到最前面,即序号为1。原来规则编号自动递增。
[root@happyboy root]# tail -f /var/log/firewall.log //可以看到相关数据包已经记录入日志文件了
阅读(369) | 评论(0) | 转发(0) |