如何安装iptables
每个Linux内核都带有iptables,在大多数Linux系统上,iptables安装在 /usr/sbin/iptables 目录中。也可以在 /sbin/iptables 中找到它。
Ubuntu和Debian
apt-get install iptables
CentOS
yum install iptables-services
RHEL
yum install iptables
iptables版本
要知道iptables版本,请在终端中键入以下命令。
iptables --version
启动和停止iptables
OpenSUSE 42.1
停止:
/sbin/rcSuSEfirewall2 stop
重新启动:
/sbin/rcSuSEfirewall2 start
Ubuntu
停止:
service ufw stop
重新启动:
service ufw start
Debian和RHEL
停止:
/etc/init.d/iptables stop
重新启动:
/etc/init.d/iptables start
CentOS
停止:
service iptables stop
重新启动:
service iptables start
获取所有iptables规则列表
要了解您的iprables中当前存在并处于活动状态的所有规则,只需打开终端并输入以下内容。
iptables -L
如果iptables上没有规则退出,则意味着如果iptables防火墙中到目前为止还没有添加规则,您将看到类似下图的内容。
在上面的这张图中,您可以看到,共有三个chain ,它们分别是INPUT,FORWARD,OUTPUT,并且不存在任何规则。实际上我还没有添加。
输入以下内容以了解iptables防火墙链的状态。
iptables -S
使用以上命令,您可以了解chain 是否正在接受。
清除所有iptables规则
要清除iptables防火墙中的所有规则,请键入以下内容。这通常称为刷新iptables规则。
iptables -F
如果要仅刷新INPUT chain 或任何单个chain,请根据需要发出以下命令。
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
ACCEPT or DROP Chain
要接受或丢弃特定的chain,输入以下任何命令以满足您的要求。
iptables --policy INPUT DROP
上面的规则将不接受传入该服务器的任何内容。要将其重新还原为接受,请执行以下操作
iptables --policy INPUT ACCEPT
其他chain也一样
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
注意:默认情况下,所有iptables chain (INPUT,OUTPUT,FORWARD)都处于接受模式。这是chain的默认策略。
允许任何端口
如果您在主机上运行任何Web服务器,则必须允许iptables防火墙,以便服务器侦听或响应端口80。默认情况下,Web服务器运行在端口80上。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
在上面的行中,A代表添加意味着我们要向iptables列表添加一个新规则。INPUT代表INPUT链。P代表协议,dport代表目的端口。默认情况下,任何Web服务器都在端口80上运行。类似地,您也可以允许SSH端口。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
默认情况下,SSH在端口22上运行。但是,最好不要在端口22上运行SSH。请始终在其他端口上运行SSH。要在其他端口上运行SSH,请在您喜欢的编辑器上打开 /etc/ssh/sshd_config 文件,并将端口22更改为其他端口。
阻塞任何端口
假设我们要阻止端口135。
iptables -A INPUT -p tcp --dport 135 -j DROP
如果要阻止服务器启动从该服务器到另一台主机/服务器的任何SSH连接,请发出以下命令
iptables -A OUTPUT -p tcp --dport 22 -j DROP
这样一来,没有人可以使用您的服务器从服务器启动SSH连接。OUPUT chain 将过滤并丢弃到另一个主机的任何传出tcp连接。
允许特定IP端口
iptables -A INPUT -p tcp -s 0/0 --dport 22 -j ACCEPT
-s 0/0表示任何IP地址的任何传入源。因此,您的服务器无法响应目标端口为22的tcp数据包。如果只允许任何特定IP,则使用以下IP。
iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPT
在上面的示例中,您仅允许使用12.12.12.12 IP地址连接到端口SSH。其余IP地址将无法连接到端口22。类似地,您可以使用CIDR值来允许。如
iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j ACCEPT
上面的例子显示了如何允许IP段接受端口22上的连接。它将接受从12.12.12.1到12.12.12.255开始的IP。
如果要阻止此类IP地址范围,请执行以下相反操作,将DROP替换为ACCEPT,如下所示:
iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP
因此,将不允许在端口22上从12.12.12.1到12.12.12.255 IP地址进行连接。
阻止ICMP
如果要阻止往返于服务器上的ICMP(ping)请求,可以尝试以下操作。第一个将阻止不向另一个主机发送ICMP ping回显请求。
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
现在,尝试ping baidu.com。您的OpenSUSE服务器将无法ping baidu.com。
如果要阻止服务器的传入ICMP(ping)回显请求,只需在终端上键入以下内容。
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
现在,它不会回复任何ICMP ping回显请求。假设您的服务器IP地址为13.13.13.13。而且,如果您ping 服务器IP,则将看到服务器没有响应该ping请求。
阻止MySql / MariaDB端口
由于Mysql正在保存您的数据库,因此您必须保护数据库免受外部连接的影响。只允许您信任的应用程序服务器IP地址与MySQL服务器连接。阻止其他
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
因此,除192.168.1.0/24 IP块外,它将不进行任何MySql连接。默认情况下,MySql在3306端口上运行。
阻止SMTP
如果未在主机服务器上运行任何邮件服务器,或者未将服务器配置为充当邮件服务器,则必须阻止SMTP,以便服务器不会向任何域发送任何垃圾邮件或任何邮件。您必须执行此操作以阻止来自服务器的所有外发邮件。为此,
iptables -A OUTPUT -p tcp --dport 25 -j DROP
阻止DDoS
我们都熟悉术语DDoS。要摆脱它,请在终端中发出以下命令。
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT
您需要配置数值以满足您的要求。这只是维护的标准。
您可以通过以下方式保护更多
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog
阻止端口扫描
外面有数百人扫描服务器的开放端口,并尝试破坏服务器的安全性。阻止它
iptables -N block-scan
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
在这里,块扫描是新chain的名称。
阻止坏端口
您可能还需要为服务器阻塞一些错误的端口。这是您可以执行的操作。
badport="135,136,137,138,139,445"
iptables -A INPUT -p tcp -m multiport --dport $badport -j DROP
iptables -A INPUT -p udp -m multiport --dport $badport -j DROP
您可以根据需要添加更多端口。
什么是firewalld?
Firewalld提供了动态托管的防火墙,并支持网络/防火墙区域,该区域定义了网络连接或接口的信任级别。它支持IPv4,IPv6防火墙设置,以太网桥和IP集。运行时和永久配置选项分开。它还为服务或应用程序提供了一个接口,以直接添加防火墙规则。
具有system-config-firewall / lokkit的以前的防火墙模型是静态的,每次更改都需要重新启动防火墙。这还包括卸载防火墙netfilter内核模块和加载新配置所需的模块。模块的卸载破坏了状态防火墙和已建立的连接。另一方面,防火墙守护程序动态管理防火墙并应用更改,而无需重新启动整个防火墙。因此,无需重新加载所有防火墙内核模块。但是,使用防火墙守护程序需要对所有守护程序进行所有防火墙修改,以确保该守护程序中的状态与内核中的防火墙处于同步状态。防火墙守护程序无法解析iptables和ebtables命令行工具添加的防火墙规则。
因此,firewalld使用区域和服务而不是链和规则来执行操作,并且它可以动态管理规则,从而允许更新和修改而不会破坏现有的会话和连接。
它具有以下功能。
D-Bus API。
定时防火墙规则。
用于特定防火墙规则的丰富语言。
IPv4和IPv6 NAT支持。
防火墙区域。
IP设置支持。
拒绝数据包的简单日志。
直接界面。
锁定:将可能修改防火墙的应用程序列入白名单。
支持iptables,ip6tables,ebtables和ipset防火墙后端。
自动加载Linux内核模块。
与Puppet集成。
要了解有关firewalld的更多信息,请访问官网。
如何安装firewalld
在安装firewalld之前,请确保停止iptables,并确保iptables不在运行并且不再使用,
systemctl stop iptables
这将从您的系统停止iptables。
然后通过在终端中发出以下命令,确保系统不再使用iptables。
systemctl mask iptables
现在,检查iptables的状态。
systemctl status iptables
现在,我们准备将firewalld安装到我们的系统上。
Ubuntu
要在Ubuntu上安装它,必须先删除UFW,然后才能安装Firewalld。要删除UFW,请在终端上发出以下命令。
apt-get remove ufw
删除UFW之后,在终端中发出以下命令
apt-get install firewall-applet
要么
您可以打开Ubuntu软件中心,查找或搜索“防火墙小程序”,然后将其安装到Ubuntu系统上。
RHEL, CentOS和 Fedora
输入以下命令以在CentOS系统上安装firewalld。
yum install firewalld firewall-config -y
如何配置firewalld
在配置firewalld之前,我们必须在安装后了解firewalld的状态。要知道这一点,请键入以下内容。
systemctl status firewalld
由于firewalld基于区域工作,因此我们需要检查所有区域和服务,尽管我们尚未进行任何配置。
对于Zones
firewall-cmd --get-active-zones
要么
firewall-cmd --get-zones
要了解默认区域,请发出以下命令
firewall-cmd --get-default-zone
并且,对于Services
firewall-cmd --get-services
在这里,您可以看到firewalld涵盖的那些服务。
设置默认区域
重要说明是,每次修改之后,您都需要重新加载防火墙,以便进行更改。
设置Default Zone
firewall-cmd --set-default-zone=internal
或者
firewall-cmd --set-default-zone=public
更改区域后,检查其是否更改。
firewall-cmd --get-default-zone
在 Public Zone添加端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
这将在firewalld的公共区域中添加TCP端口80。您也可以通过将80替换为所需的端口来添加所需的端口。
现在重新加载防火墙。
firewall-cmd --reload
现在,检查状态以查看是否已添加tcp 80端口。
firewall-cmd --zone=public --list-ports
在这里,您可以看到已添加了TCP端口80。
甚至您也可以尝试类似的方法。
firewall-cmd --zone=public --list-all
在 Public Zone删除端口
要从公共区域删除Tcp 80端口,请键入以下内容。
firewall-cmd --zone=public --remove-port=80/tcp
您将在终端中看到“成功”文本回显。
您也可以通过用自己的端口替换80来放置所需的端口。
在Firewalld中添加Services
要在firewalld中添加ftp服务,请发出以下命令
firewall-cmd --zone=public --add-service=ftp
您将在终端中看到“成功”文本回显。
同样,要添加smtp服务,请发出以下命令
firewall-cmd --zone=public --add-service=smtp
将ftp和smtp替换为您要在firewalld中添加的自己的服务。
在Firewalld中删除Services
要从firewalld中删除ftp&smtp服务,请在终端中发出以下命令。
firewall-cmd --zone=public --remove-service=ftp
firewall-cmd --zone=public --remove-service=smtp
阻止任何传入和传出Packet(s)
如果愿意,可以使用firewalld阻止任何传入或传出的数据包/连接。这称为防火墙的“紧急启动”。为此,发出以下命令。
firewall-cmd --panic-on
您将在终端中看到“成功”文本回显。
完成此操作后,您将无法ping通主机,甚至无法浏览任何网站。
要关闭此功能,请在终端中发出以下命令。
firewall-cmd --panic-off
在Firewalld中添加IP Address
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" accept'
这样,firewalld将接受来自源IP 192.168.1.4的IPv4数据包。
在Firewalld中阻止IP Address
同样,阻止任何IP地址
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" reject'
这样,firewalld将丢弃来自源IP 192.168.1.4的每个IP v4数据包。