一、iptables简介
在企业6以及之前的版本,使用iptables别写火墙策略,iptables是编写火墙策略的工具而不是火墙,iptables默认通过3张表5条链管理火墙。
filter表(实现包过滤)
nat表(实现网络地址转换)
mangle表(实现包修改,即不属于filter和nat表的都归mangle表)
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTIONG:发送到网卡接口之前。
具体可参考http://blog.csdn.net/longbei9029/article/details/53056744
二、iptables基本管理
yum install iptables
systemctl stop firewalld
systemctl mask firewalld
systemctl start iptables
systemctl enable iptables
iptables -nL
n:不解析 L:列表
iptables -F
F:刷新
> /etc/sysconfig/iptables
清空火墙配置文件
iptables -A INPUT -j ACCEPT
添加火墙策略(临时)
service iptables save
保存火墙策略(永久)
三、添加策略
iptables参数:
-t 指定表 -s 来源
-R 修改策略 -d 目的地
-A 添加策略 -p 方式
-I 插入策略 –dport 端口
-D 删除策略 -j ACCRPT|DROP|REJECT 动作
策略读取顺序由上至下,REJECT策略一般在最后
四、火墙优化
iptables -A INPUT -m state –state RELATED ESTABLISHED -j ACCEPT
iptables -A INPUT -m state –state NEW -i lo -j ACCEPT
iptables -A INPUT -m state –state NEW -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -m state –state NEW -p tcp –dport 53 -j ACCEPT
iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -m state –state NEW -p tcp –dport 443 -j ACCEPT
iptables -A INPUT ! -s 172.25.254.9
放行回环接口,放行ssh,samba和http端口,放行已连接的和正在连接的接口,拒绝不会死来自172.25.254.9d的端口,有效减少火墙压力和加快端口进程
五、nat的设置
环境搭建:desktop ip为192.168.0.209 server ip为172.25.254.109 192.168.0.109 真机为172.25.254.9
路由后地址转换SNAT(源地址转换)
desktop虚拟机网关为:192.168.0.109
在server虚拟机上:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.109
(路由后地址转换为172.25.254.109)
sysctl -a | grep ip_forward
(查看内核路由功能是否开启0关1开)
vim /etc/sysctl.conf
(编辑内核配置文件添加路由功能)
net.ipv4.ip_forward=1
sysctl -p
(刷新配置文件)
在desktop虚拟机上
ping 172.25.254.9
可以通信
路由前地址转换DNAT(目的地地址转换)
在server虚拟机上
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 192.168.0.209
(路由前地址转换为192.268.0.209)
在真机上
ssh root@172.25.254.109
ifconfig
六、、使用命令行接口配置火墙
firewall-cmd --state
查看火墙状态
firewall-cmd --get-active-zones
查看已经激活的域
firewall-cmd --get-default-zone
查看默认域
firewall-cmd --get-zones
列出所有域名
firewall-cmd --zone=public --list-all
列出公共域的详细信息
firewall-cmd --get-services
列出所有服务
firewall-cmd --list-all-zones
列出所有域的详细信息
firewall-cmd --set-default-zone=dmz
设置默认域为dmz
七、网络接口的管控
在server主机上
yum install httpd -y
echo 172.25.254.109 > /var/www/html/index.html
systemctl start http
firewall-config
在public域加入http服务
firewall-cmd --change-interface=eth1 --zone=trusted
将eth1网卡加入到trusted域中
firewall-cmd --get-active-zones
在真机上
打开浏览器访问http://172.25.254.109
在desktop虚拟机上
打开浏览器访问http://192.168.0.109
firewall-cmd --remove-interfacr=eth1
将eth1网卡接口移除火墙
firewall-cmd --add-interface=eth1 --zone=public
将eth1网卡接口添加到public域中
修改source控制端口
在server虚拟机中
firewall-cmd --add-source=172.25.254.0/32 --zone=trusted
在desktop中
打开浏览器访问http://172.25.254.109
firewall-cmd --remove-source=172.25.254.0/32 --zone=trusted
修改端口号
在server虚拟机上
vim /etc/httpd/conf/httpd.conf
修改为8080端口
systemctl restart httpd
vim /usr/lib/firewalld/services/http.xml
修改为8080端口
systemctl restart firewalld.service
firewall-cmd --add-service=http
在desktop虚拟机上
即时与延时中断服务(ssh为例)
在server虚拟机上
firewall-cmd --permanent --remove-service=ssh
在火墙中移除ssh服务
firewall-cmd --list-all
此时在火墙中还能看到
firewall-cmd --reload
刷新火墙
在desktop虚拟机上
ssh root@192.168.0.109
连接失败
但不中断已经连接好ssh服务(filter策略中写到established)
在server虚拟机上
firewall-cmd --complete-reload
在desktop虚拟机上
ssh root@192.168.0.109 连接失败
已经连接好的ssh服务也会中断
编写特殊策略(类似iptables)
在server虚拟机上
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.209 -p tcp --dport 80 -j REJECT
在desktop虚拟机上
访问http://192.168.0.109 失败
在真机上
端口转发
在server虚拟机上
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --perment --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.9
在desktop上
ssh root@任意ip
都会通过server转发到172.25.254.9
地址伪装
在server虚拟机上
firewall-cmd --permanent --remove-masquerade
firewall-cmd --perment --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.9
在desktop虚拟机上
ping 172.25.254.9
可以通信
ssh root@172.25.254.9
无法连接
在server虚拟机上
firewall-cmd --add-rich-rule='rule family=ipv4 masquerade'
在desktop上
ssh root@172.25.254.9
成功,且显示连接地址为中转站ip172.25.254.109而不是192.168.0.209
八、tcpwrap设置
查看哪些服务支持tcpwaper
ldd /usr/sbin/sshd
存在libwrap的支持该服务
基本设置
vim /etc/hosts.deny
ALL:ALL 拒绝所有人连接所有服务
vim /etc/hosts.allow
sshd:172.25.254. :spawn echo date
from %c to %s > /dev/pts/0
网段 监控 打印 时间 客户端 服务端 当前设备上
发送到root用户的邮件里 | mail -s warning root
发送到日志里 >> /var/log/messahes
九、守护进程
yum install xinetd telnet-server telnet -y
cd /etc/xinetd.d
vim telnet
service telnet
{
socket_type = stream
protocol = tcp
user = root
server = /usr/sbin/in.telnetd
disable = no
flags = REUSE
wait = no
}
systemctl restart xinetd.service
chkconfig --list
telnet localhost