iptables Поради та підказки [закрито]


60

Я впевнений, що Linux sysadmins добре знайомий з iptablesінтерфейсом користувача до інтерфейсу netfilterфільтрування пакетів.

Тепер це "запитання" покликане бути спільнотою Wiki для збору разом різних iptablesмудростей. Ніщо не є занадто поширеним або занадто незрозумілим. Опублікуйте все, що вам відомо, що допоможе іншим зробити це найкраще iptables.

Відповіді:


26

Використання білого списку та чорного списку з iptables

#!/bin/bash

WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt

#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F

#
## Whitelist
#

for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
        echo "Permitting $x..."
        $IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done

#
## Blacklist
#

for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
        echo "Denying $x..."
        $IPTABLES -A INPUT -t filter -s $x -j DROP
done

Сценарій для відкриття портів

#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"

#
## Permitted Ports
#

for port in $ALLOWEDTCP; do
       echo "Accepting port TCP $port..."
       $IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done

for port in $ALLOWEDUDP; do
        echo "Accepting port UDP $port..."
        $IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done

Блокування портовогоскану

# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Once the day has passed, remove them from the portscan list
iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

Підроблені / недійсні пакети

# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP

#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

Блокувати атаки Smurf

# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP

# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

Блокувати ICMP (aka ping)

# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

4
Розгляньте можливість додати коментар до "підроблених" коментарів, щоб менш досвідчені користувачі знали, чому адреси джерела вважаються підробленими (... при надходженні на wan інтерфейс).
3моло

1
Гарний дзвінок :-). Зроблено.
Барт Де Вос

чекати. Чи не є лінія блоку ICMP (ака ping) надмірною для лінії атаки блоку smurf: iptables -A INPUT -p icmp -m icmp -j DROP?
Стенн

2
Перегляньте сценарій білого списку: Theres iptablesна лінії 8, а потім $IPTABLESпізніше. Чи достатньо просто використовувати iptablesскрізь? Інакше я вважаю, що вам потрібно призначити щось на зразок IPTABLES=/sbin/iptables?
UpTheCreek

1
Я б не блокував портикани таким чином. Замість цього є щось, що прийме tcp / udp-з'єднання і шукає декілька пов'язаних пакетів. tcp - це просто, просто шукайте встановлений для цих портів. Все, що завгодно, інші можуть перевірити це за допомогою підроблених пакетів і заблокувати все, що не було у вашому списку, наприклад ваш шлюз.
Аарон

25

Оптимізуйте ефективність роботи Netfilter за допомогою ipset

Якщо ви пишете безліч подібних правил на основі простого IP, порту або обох, подумайте про використання ipsetдля оптимізації продуктивності netfilter.

Наприклад:

iptables -s 192.168.1.11 -j ACCEPT
iptables -s 192.168.1.27 -j ACCEPT
iptables -s 192.168.1.44 -j ACCEPT
... hundreds of similar rules ...
iptables -s 192.168.251.177 -j ACCEPT

Це означає, що пакет з адресою джерела 192.168.251.177 повинен спершу пройти сотні правил, перш ніж він може отримати свій вирок ACCEPT.

Звичайно, досвідчені сисадміни розділять правила за підмережею. Але це все ще означає сотні правил.

ipset на допомогу!

Спочатку визначте тип набору IP ipmap:

ipset -N Allowed_Hosts ipmap --network 192.168.0.0/16

Потім заповніть його адресами:

for ip in $LIST_OF_ALLOWED_IP; do ipset -A Allowed_Hosts $ip; done

Нарешті, замініть сотні правил iptables вище одним правилом:

iptables -m set --match-set Allowed_Hosts src -j ACCEPT

Коли пакет приходить, netfilter здійснить дуже швидкий растровий пошук для джерела (src) IP-пакета проти Allowed_HostsIP Set. Усі пакети, що надходять від 192.168.0.0/16, матимуть одне правило. І чи вірите мені, що пошук растрових зображень - принаймні на два порядки швидше, ніж виконання сотень перевірок правил iptables.

ipsetне обмежується IP-адресами. Він також може відповідати на основі портів, кортежу IP-портів, мережевих / підмереж, кортежу IP-MAC тощо, тощо. І він може відповідати цим критеріям як джерело або місце призначення або суміш обох (у випадку кортежів).

І нарешті, ipsetви можете автоматично помістити IP-адреси в чорні списки / білі списки. Ці чорні списки / білі списки також можуть «старіти», таким чином автоматично видаляючи IP-адресу після того, як пройде конфігурується кількість часу.

Будь ласка, зверніться до ipsetчоловічої сторінки для більш детальної інформації.

ДУЖЕ ВАЖЛИВО ПРИМІТКА:

Деякі дистрибутиви Linux можуть не мати підтримки "поза коробкою" ipset(наприклад, Ubuntu 10.04 мала цю проблему). У цих системах одним із способів є встановлення ipsetз вихідного коду.

Замість цього завантажте ipsetджерело з його веб-сайту: http://ipset.netfilter.org/install.html

З іншого боку , якщо ви використовуєте xtables-addons, ipset буде включений в його джерело: http://xtables-addons.sourceforge.net/


3
Дуже шкода, що він не підтримується за замовчуванням на Debian та Ubuntu. Я думав, ви збираєтесь перерахувати деякі незрозумілі дистрибутиви: /
UpTheCreek

@UpTheCreek Я відредагував свою відповідь ... "спеціальна примітка" застосовувалася під час опублікування відповіді, але зараз вона не застосовується.
pepoluan

21

Додайте коментарі до своїх правил:

-m comment --comment "Comments help to read output of iptables -nvL"

16

Блокуйте відомі TCP-атаки

Додайте такі правила, бажано в -t raw -A PREROUTING

-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP

Атаки, які блокуються, відповідно:

  • SYN-FIN атака
  • SYN-RST атака
  • Напад X-Mas
  • nmap FIN сканування
  • NULLflags атакують
  • ALLFlags атакують

(сміливо редагуйте назви атак вище)


4
Можливо, її -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROPможна буде видалити, оскільки -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROPзасіб буде ловити кожен пакет, який він може заблокувати.

4
Відповідно до security.stackexchange.com/questions/4603/… . "Немає необхідності скидати недійсні або неправильно сформовані пакети. Усі ці атаки мають десятиліття. Програми ядра Linux набагато актуальніші, ніж ви щодо того, які пакети є дійсними, а які ні. Що з майбутніми недоліками" дехто може заперечити. Ну, як ти знаєш, що майбутня вада буде в обробнику TCP, а не в TCP-аналізаторі iptables? "
Метт

1
@VlastimilBurian теоретично вони більше не потрібні. Але додавання цих наборів правил ні гальмує мережу, ні збільшує завантаження процесора, тому я не бачу причин не додавати їх і забувати про них 😊
pepoluan

7

Увімкнення NAT

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Крок 1 встановлює параметр ядра, щоб дозволити пересилання ip, крок 2 встановлює правило iptables, яке дозволяє NAT на інтерфейсі eth0.


4
Це не буде стійким через перезавантаження, чи не так? Вам потрібно відредагувати /etc/sysctl.conf net.ipv4.ip_forward = 1. (Припустимо, Red Hat або похідне.)
Аарон Коплі

6

Блокуйте ICMP-атаки

Додайте такі правила, бажано в -t raw -A PREROUTING

-p icmp -m u32 ! --u32 "4&0x3FFF=0"   -j DROP
-p icmp -m length --length 1492:65535 -j DROP

Перше правило блокує всі пакети ICMP, у яких "прапор фрагментації" не дорівнює 0. (ICMP ніколи не повинен бути фрагментованим; вони повинні мати невеликі корисні навантаження)

Друге правило блокує негабаритні нефрагментовані пакети ICMP.


Чи не перервав би цей шлях MTU Discovery?
Метт

@Matt ні, тому що для відкриття Path MTU використовуються пакети настільки ж великі, як розмір корисної навантаження Ethernet, тобто 1500 байт, з яких 8 байт використовуються заголовком IP та заголовком ICMP.
pepoluan

Дякую за уточнення, але 1492-64k? чому це не 1500-65k. Я можу зрозуміти 1492 для PPPoE, але прямо Ethernet.
Метт

Це все ще застосовується?
LinuxSecurityFreak

@VlastimilBurian Я б сказав так. Досі немає необхідності у великих розмірах пакетів ICMP.
pepoluan

4

за допомогою FireHOL - зручної обгортки iptables

Я вважав це набагато більш інтуїтивно зрозумілим, ніж прямі команди iptables. Особливо для людей, які мають досвід роботи з іншими брандмауерами:

FireHOL - це генератор брандмауера iptables, який виробляє брандмауер фільтрування пакетів iptables, на хостах і маршрутизаторах Linux з будь-якою кількістю мережевих інтерфейсів, будь-якою кількістю маршрутів, будь-якою кількістю обслуговуваних служб, будь-якою кількістю складностей між варіантами послуг (включаючи позитивні та негативні) вирази).


2
Я віддаю перевагу Shorewall, який активно розробляється, підтримує IPv4 та IPv6 і може генерувати брандмауери для інших iptables систем.
BillThor

4

(з мого файлу iptables_tricks.txt, перекомпільований з багатьох місць: P)

Змушує iptables чекати 15 секунд між новими з’єднаннями з того самого IP на порту 22 (SSH):

 iptables -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --update --seconds 15 -j DROP
 iptables -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --set -j ACCEPT

1
Те саме, але з підрахунком спроб:-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
alexm


3

Набори IP переглянуті

Уже є відповідь, де згадуються набори IP. Однак він досить одномірний, оскільки фокусується на підвищенні продуктивності в порівнянні з класичними правилами та на тому, що набори IP пом'якшують проблему, що виникає з великою кількістю індивідуальних IP-адрес, які не можуть бути легко виражені як підмережа в нотаціях CIDR.

Позначення, що використовуються нижче

Бо ipsetя буду використовувати позначення, прочитані ipset restoreі написані ipset save.

Відповідно для iptablesip6tables) правил я буду використовувати позначення, прочитані iptables-restoreі написані автором iptables-save. Це робить коротшими позначення, і це дозволяє мені виділити потенційні правила, що стосуються лише IPv4 (префіксованого -4) або лише для IPv6 (префіксованого -6).

У деяких прикладах ми будемо перенаправляти потік пакетів в інший ланцюг. Припускається, що ланцюг існує в цій точці, тому рядки для створення ланцюгів не виробляються (також не згадується назва таблиці або команди COMMITв кінці).

Розширені набори IP

Набори IP можуть зробити набагато більше, ніж було зазначено в іншій відповіді, і ви обов'язково повинні ознайомитися з документацією щодо встановлення IP-адрес ( ipset(8)), а також iptables-extensions(8)додатково до цього короткого запису тут.

Наприклад , я буду в основному зосереджений на три типи набору: hash:ip, hash:netі list:set, але є більше , ніж ті , і всі вони мають дійсні випадки використання.

Наприклад, ви можете також відповідати номерам портів, а не лише IP-адресам .

Збереження та відновлення наборів IP як iptables-saveіiptables-restore

Ви можете створювати декларації набору IP оптом та імпортувати їх, перекладаючи їх у ipset restore. Якщо ви хочете зробити свою команду більш стійкою до вже існуючих записів, використовуйте ipset -exist restore.

Якщо ваші правила містяться у файлі, який default.setви називаєте :

ipset -exist restore < default.set

Такий файл може містити записи до createнаборів та addзаписів до них. Але, як правило, більшість команд з командного рядка, здається, мають у файлах відповідну версію. Приклад (створення набору серверів DNS):

create dns4 hash:ip family inet
create dns6 hash:ip family inet6
# Google DNS servers
add dns4 8.8.8.8
add dns4 8.8.4.4
add dns6 2001:4860:4860::8888
add dns6 2001:4860:4860::8844

Тут один набір створений для IPv4 ( dns4) і один для IPv6 ( dns6).

Часи очікування на IP-набори

Часи очікування в наборах IP можуть бути встановлені як за замовчуванням для набору, а також для запису. Це дуже корисно для сценаріїв, коли ви хочете тимчасово заблокувати когось (наприклад, для сканування портів або спроби грубої сили вашого SSH-сервера).

Це працює таким чином (за замовчуванням під час створення IP-наборів):

create ssh_loggedon4 hash:ip  family inet  timeout 5400
create ssh_loggedon6 hash:ip  family inet6 timeout 5400
create ssh_dynblock4 hash:ip  family inet  timeout 1800
create ssh_dynblock6 hash:ip  family inet6 timeout 1800

Ми повернемося до цих конкретних наборів нижче та обґрунтування того, чому вони встановлені таким, яким вони є.

Якщо ви хочете встановити час очікування на конкретну IP-адресу, ви можете просто сказати:

add ssh_dynblock4 1.2.3.4 timeout 7200

Блокувати IP 1.2.3.4 на дві години замість (встановленого) півгодини за замовчуванням.

Якщо ви подивитесь на це ipset save ssh_dynblock4через короткий час, ви побачите щось уздовж:

create ssh_dynblock4 hash:ip family inet hashsize 1024 maxelem 65536 timeout 1800
add ssh_dynblock4 1.2.3.4 timeout 6954

Застереження про час очікування

  • тайм-аути - це функція для будь-якого набору. Якщо набір не створений із підтримкою тайм-аута, ви отримаєте помилку (наприклад Kernel error received: Unknown error -1).
  • тайм-аути задаються в секундах. Використовуйте арифметичні вирази Баша, щоб, наприклад, пройти від хвилин до секунд. Наприклад:sudo ipset add ssh_dynblock4 1.2.3.4 timeout $((120*60))

Перевірка наявності запису в даному IP-наборі

Всередині ваших сценаріїв може бути корисним, щоб дізнатись, чи вже існує запис. Цього можна досягти, при ipset testякому повертається нуль, якщо запис існує, а не нульове в іншому випадку. Тож у сценарії можна застосувати звичайні чеки:

if ipset test dns4 8.8.8.8; then
  echo "Google DNS is in the set"
fi

Однак у багатьох випадках ви хочете скористатися -existперемикачем ipset, щоб направити його не скаржитися на існуючі записи.

Популяція наборів IP з iptablesправил

Це, на мій погляд, одна з вбивчих особливостей наборів IP. Ви не тільки можете співставити записи з набором IP, ви можете також додати нові записи до існуючого набору IP.

Наприклад, у цій відповіді на це запитання у вас є:

-A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --update --seconds 15 -j DROP
-A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --set -j ACCEPT

... з наміром обмежити швидкість спроб підключення до SSH (порт 22 TCP). Використовуваний модуль recentвідстежує останні спроби з'єднання. Замість stateмодуля я все ж віддаю перевагу conntrackмодулю.

# Say on your input chain of the filter table you have
   -A INPUT -i eth+ -p tcp --dport ssh -j SSH
# Then inside the SSH chain you can
# 1. create an entry in the recent list on new connections
   -A SSH -m conntrack --ctstate NEW -m recent --set --name tarpit
# 2. check whether 3 connection attempts were made within 2 minutes
#    and if so add or update an entry in the ssh_dynblock4 IP set
-4 -A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock4 src --exist
-6 -A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock6 src --exist
# 3. last but not least reject the packets if the source IP is in our
#    IP set
-4 -A SSH -m set --match-set ssh_dynblock4 src -j REJECT
-6 -A SSH -m set --match-set ssh_dynblock6 src -j REJECT

У цьому випадку я перенаправляю потік до SSHланцюга таким чином, що мені не доведеться повторюватись -p tcp --dport sshза кожним правилом.

Повторюю:

  • -m setробить в iptablesкурсі , що ми використовуємо перемикачі з setмодуля (який обробляє набори IP)
  • --match-set ssh_dynblock4 srcповідомляє iptablesвідповідати адресу джерела ( src) проти названого набору ( ssh_dynblock4)
    • це відповідає sudo ipset test ssh_dynblock4 $IP(де $IPміститься вихідна IP-адреса пакета)
  • -j SET --add-set ssh_dynblock4 src --existдодає або оновлює адресу джерела ( src) з пакету в набір IP ssh_dynblock4. Якщо запис існує ( --exist), він буде просто оновлений.
    • це відповідає sudo ipset -exist add ssh_dynblock4 $IP(де $IPміститься вихідна IP-адреса пакета)

Якщо ви хочете, щоб замість цільової / цільової адреси замість цього, ви використовуєте dstзамість src. Для отримання додаткових варіантів зверніться до посібника.

Набори наборів

Набори IP можуть містити інші набори. Тепер, якщо ви дотримувались статті до цього пункту, ви задумалися, чи можна комбінувати набори. І звичайно, це так. Для IP-наборів зверху ми можемо створити два спільних набори ssh_dynblockі, ssh_loggedonвідповідно, містити набори лише для IPv4 та лише для IPv6:

create ssh_loggedon4 hash:ip  family inet  timeout 5400
create ssh_loggedon6 hash:ip  family inet6 timeout 5400
create ssh_dynblock4 hash:ip  family inet  timeout 1800
create ssh_dynblock6 hash:ip  family inet6 timeout 1800
# Sets of sets
create ssh_loggedon  list:set
create ssh_dynblock  list:set
# Populate the sets of sets
add ssh_loggedon ssh_loggedon4
add ssh_loggedon ssh_loggedon6
add ssh_dynblock ssh_dynblock4
add ssh_dynblock ssh_dynblock6

Наступне питання, яке повинно з’явитися у вашій свідомості, - чи це дозволяє нам співставляти та маніпулювати наборами IP в АГ-версії IP-версії.

І відповідь на це звучить: ТАК! (на жаль, востаннє це не було задокументовано)

Отже, правила з попереднього розділу можна переписати, щоб прочитати:

-A INPUT -i eth+ -p tcp --dport ssh -j SSH
-A SSH -m conntrack --ctstate NEW -m recent --set --name tarpit
-A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock src --exist
-A SSH -m set --match-set ssh_dynblock src -j REJECT

що набагато більш стисло. І так, це перевірено і працює як шарм.

Зведення все це разом: захист грубої сили SSH

На своїх серверах у мене працює сценарій як cronзавдання, яке займає купу імен хостів і вирішує їх на IP-адреси, а потім подає їх у IP-набір для "довірених хостів". Ідея полягає в тому, що довірені хости отримують більше спроб увійти в сервер і не обов'язково блокуються до тих пір, як ніхто інший.

І навпаки, у мене цілі країни заблоковані підключенням до мого SSH-сервера, за винятком (потенційного) виключення надійних хостів (тобто порядок питань має значення).

Однак це залишається як вправа для читача. Тут я хотів би додати акуратне рішення, яке використовуватиме набори, що містяться в ssh_loggedonнаборі, щоб дозволяти подальшим спробам з'єднання передаватись, а не піддаватися такому ж уважному контролю, як інші пакети.

Важливо пам’ятати про затримки за замовчуванням 90 хвилин ssh_loggedonі 30 хвилин для ssh_dynblockперегляду таких iptablesправил:

-A INPUT -i eth+ -p tcp --dport ssh -j SSH
-A SSH -m set --match-set ssh_loggedon src -j ACCEPT
-A SSH -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A SSH -m conntrack --ctstate NEW -m recent --set --name tarpit
-A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock src --exist
-A SSH -m set --match-set ssh_dynblock src -j REJECT

На даний момент ви повинні запитати себе, як з'єднувальна IP-адреса закінчується в ssh_loggedonпідмножинах. Тож читайте далі ...

Бонус: додавання IP-адреси, з якою ви входите під час входу в SSH

Якщо ви експериментували з sshrcдрузями та з друзями, ви дізналися про його недоліки. Але PAM приходить на допомогу. Модуль з назвою pam_exec.soдозволяє нам викликати скрипт під час входу в SSH в точці, коли ми знаємо, що користувач прийнятий в систему.

В /etc/pam.d/sshdнижче pam_envі pam_selinuxзаписи додайте наступний рядок:

session    optional     pam_exec.so stdout /path/to/your/script

і переконайтеся, що ваша версія сценарію ( /path/to/your/scriptвище) існує та працює у виконанні.

PAM використовує змінні середовища для повідомлення про те, що відбувається, тому ви можете використовувати простий сценарій, як цей:

#!/bin/bash
# When called via pam_exec.so ...
SETNAME=ssh_loggedon
if [[ "$PAM_TYPE" == "open_session" ]] && [[ -n "$PAM_RHOST" ]]; then
    [[ "x$PAM_RHOST" != "x${PAM_RHOST//:/}" ]] && SETNAME="${SETNAME}6" || SETNAME="${SETNAME}4"
    ipset -exist add $SETNAME "$PAM_RHOST"
fi

На жаль, ipsetутиліта, схоже, не має вбудованих смартфонів netfilter. Отже, нам потрібно розрізняти IPv4 та IPv6 набір IP при додаванні нашого запису. В іншому випадку ipsetприпустимо, що ми хочемо додати ще один набір до набору, а не IP. І звичайно, навряд чи знайдеться набір, названий на честь IP-адреси :)

Тому ми перевіряємо :IP-адресу та додаємо 6до встановленого імені в такому випадку та в 4іншому випадку.

Кінець.


2

Інший графічний інтерфейс, який можна використовувати для налаштування iptables, - це Firewall Builder . Він дозволяє користувачам створювати елементи правил як об’єкти в базі даних, а потім перетягувати ці об’єкти в редактор правил для створення потрібної політики брандмауера. Потім програма генерує файл сценарію з усіма командами iptables, необхідними для реалізації правил.

На відміну від деяких інших iptables GUI-рішень, де ви можете керувати лише однією конфігурацією iptables одночасно, за допомогою Firewall Builder ви можете керувати великою кількістю конфігурацій iptables, все з однієї програми. Firewall Builder працює на Linux, Windows та Mac OS X, існує вже більше 10 років і має тисячі активних користувачів у всьому світі.

Повне розкриття інформації - я співзасновник NetCitadel - компанії, яка розробляє Firewall Builder.


1

журнал вихідного з'єднання з uid

iptables -A OUTPUT -m state --state NEW -m tcp -p tcp -m limit --limit 5/m -j LOG --log-uid --log-prefix="outgoing connection: "

переадресація порту / з'єднання:

iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j DNAT --to 10.0.1.7:80
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -i eth1 -j ACCEPT

1
Я віддаю перевагу NFLOGцілі. Це дозволяє більш тривалий префікс рядка і демон режиму користувача може також увійти до баз даних.
0xC0000022L

1

Зіставте декілька імен інтерфейсу з підстановкою

Приклад: у вас є eth0 і eth1 хочете дозволити будь-який трафік між ними?

iptables -A FORWARD -i eth+ -o eth+ -j ACCEPT

Я раніше використовував це для того, щоб відповідати veth<something>інтерфейсам, які динамічно створював і називав LXC. Тож я можу зрівнятись відразу з усіма veth+.

Я також навмисно назвав деякі інтерфейси _<something>, щоб відповідати _+.


1

Блокувати нечасті значення MSS

iptables -t mangle -A PREROUTING -p tcp \
-m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

SYNPROXY ціль для захисту DDos

Мета цієї мети - перевірити, чи встановлює хост, який надісланий SYN-пакет встановлює з'єднання, або нічого не робить після ініціювання з'єднання SYN. Якщо нічого не робить, він відкидає пакет з мінімальними зусиллями.

Встановіть пакети синхронізації для таблиці відстеження з'єднань у необробленій таблиці

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 80 --syn -j CT --notrack

Увімкніть синпроксі для http-сервера:

iptables -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate INVALID,UNTRACKED \
-j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460

Ресурс: ціль SYNPROXY з блогу RHEL


1

Обмеження всіх окремих IP-адрес до вихідної квоти пропускної здатності за допомогою IP-наборів

Ви можете налаштувати ваш сервер, щоб дозволити кожному окремому IP 15GiByte використання пропускної здатності на місяць, сподіваючись відобразити або уникнути нападу використання пропускної здатності, можливо, для вашої дозованої квоти пропускної здатності у вашого провайдера. Це може бути здійснено наступним чином:

Спочатку створіть набори IP для IPv4 та IPv6:

ipset create IP_QUOTA_SET_OUT hash:ip timeout 345600 counters
ipset create IP_QUOTA_SET_OUT_INET6 hash:ip timeout 345600 counters family inet6

Тепер додайте свої правила iptables. Перший рядок додасть IP до набору, якщо його вже немає. Другий рядок не збігатиметься, якщо байт, переданий для IP в наборі, перевищує вказану суму. Потім те ж саме робиться для IPv6.

iptables -I OUTPUT -m set ! --match-set IP_QUOTA_SET_OUT dst -j SET --add-set IP_QUOTA_SET_OUT dst --timeout 345600
iptables -I OUTPUT -m set --match-set IP_QUOTA_SET_OUT dst --bytes-gt 16106127360 -j DROP

ip6tables -I OUTPUT -m set ! --match-set IP_QUOTA_SET_OUT_INET6 src -j SET --add-set IP_QUOTA_SET_OUT_INET6 src --timeout 345600
ip6tables -I OUTPUT -m set --match-set IP_QUOTA_SET_OUT_INET6 src --bytes-gt 16106127360 -j DROP

Це запобіжить атакам, таким як користувач вимагає великого файлу від вашого веб-сервера протягом тривалого періоду часу або від будь-якої служби з цього питання. Те саме можна зробити для ланцюга INPUT.


0

Щось я роблю, головним чином через своє незнання більш елегантного рішення, - це вручну перевіряти мої журнали Nginx кожні 4 години, а поштовий сервер проводити журнал кожні 2 хвилини для надмірного доступу окремими IP-адресами. Я запускаю кілька сценаріїв разом, які:

  1. Перевірте access.logта перелічіть список найкращих 10 IP-адрес, організованих залежно від кількості звернень до сервера
  2. Скиньте результати у файл журналу
  3. Подивіться інший скрипт на цей файл журналу і забороніть будь-яку IP-адресу, яка потрапила на сервер більше X разів за останні X години
  4. Врятуй мою iptables.save

Ось як це виглядає:

autoBanIPs_mail.sh
#!/bin/bash

# This script checks the last 2 minutes of log entries to see if any 
# IP has made over 99 connections

now=$(date +"%m_%d_%Y")

/root/bin/checkBadIPs_mail.sh > /home/ipChecker/ipcheckMAIL_$now.txt
cat /home/ipChecker/ipcheckMAIL_$now.txt | \
    grep " \\(\\([9][9]\\)\\|\\([0-9][0-9][0-9]\\+\\)\\) " | \
    awk '{print $2}' > /home/ipChecker/badMailIPs_$now.sh
sed -i "s/^/\/usr\/local\/sbin\/blockIP /g" /home/ipChecker/badMailIPs_$now.sh
/bin/bash /home/ipChecker/badMailIPs_$now.sh
cat /home/ipChecker/ipcheckMAIL_$now.txt >> /home/ipChecker/ipcheckMAIL_$now.log
rm /home/ipChecker/ipcheckMAIL_$now.txt
rm /home/ipChecker/badMailIPs_$now.sh
checkBadIPs_mail.sh

Одне, що ДУЖЕ важливо зазначити тут, це те, що вам НЕОБХІДНО налаштовувати білий список або ви збираєтесь почати блокувати безліч автентичних IP-адрес від серверів, на які ви отримуєте багато електронної пошти або у випадку інших журналів, IP-адреси, які просто сильно натисніть ваш сервер з законних причин. Мій білий список просто вбудований у цей сценарій, додавши греп-труби відразу після | grep ']' | які виглядають приблизно так "grep -v 127.0 |" .
Вам потрібно витратити час, щоб навчити ваш сервер, які IP-адреси з високим трафіком є ​​законними, а які - ні. Для мене це означало, що мені довелося витратити перший тиждень або близько того, перевіряючи свої журнали вручну кожні пару годин, шукаючи ip із високим трафіком на iplocation.net, а потім додаючи законні, як-от amazon, box.com або навіть мій дім / офіс IP-діапазон до цього списку. Якщо ви цього не зробите, то, швидше за все, будете заблоковані з вашого власного сервера або ви почнете блокувати легітимні поштові / веб-сервери та спричинити перебої в електронній пошті чи трафіку.

cat /var/log/mail.log | awk \
    -v d1="$(date --date="-2 min" "+%b %_d %H:%M")" \
    -v d2="$(date "+%b %_d %H:%M")" \
    '$0 > d1 && $0 < d2 || $0 ~ d2' | \
    grep '\[' | grep '\]' | \
    grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -v 127.0 | \
    awk '{print $1}' | sort | uniq -c | sort -n | tail -10
BlockIP
#!/bin/bash
sudo iptables -I INPUT -s $1 -j DROP
sudo bash -c "iptables-save > /etc/network/iptables.save"

Знову я знаю, що це жорстоко, як пекло, і, мабуть, є приємний чистий ефективний протокол, який робить все це, але я не знав про це, і ця річ триває вже рік-два і тримає поганих хлопців у страху. Я дуже рекомендую те, що у вас є проксі-сервер або інший сервер, який ви можете використовувати для доступу до свого основного сервера. Причина полягає в тому, що якщо ви один день займаєтеся веб-розробкою, ви не хочете пінг себе 2000 разів за 5 годин для деякого тестування ви можете заблокуватись назад, за винятком проксі.

Ви можете бачити, що checkBadIPs.shя помістив grep -v 127.0 і в моїх фактичних файлах я маю тону правил ігнорування для власних IP-адрес та інших надійних діапазонів IP, але іноді ваш IP-код змінюється, ви забудете оновити, і тоді ви заблоковані з власного сервера.

У будь-якому випадку, сподіваюся, що це допомагає.

ОНОВЛЕННЯ

Я трохи змінив речі, так що тепер замість того, щоб перевіряти кожні пару годин, я перевіряв журнали кожні 2 хвилини, в основному мій журнал підтвердження ssh auth та поштовий журнал, коли вони забивались :(.

Я встановлюю конкретні сценарії для кожного файлу журналу, хоча це буде досить просто з ручного сценарію, який я використовую сам, коли хочу перевірити журнали. Виглядає так:

#!/bin/bash

log=$1 time=$2

cat /var/log/${log} | awk \
    -v d1="$(date --date="-${time} min" "+%b %_d %H:%M")" \
    -v d2="$(date "+%b %_d %H:%M")" \
    '$0 > d1 && $0 < d2 || $0 ~ d2' | \
    grep '\[' | grep '\]' | \
    grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
    sort | uniq -c | sort -n | tail -10

Для цього потрібні два входи під час запуску, файл журналу, який ви хочете сканувати, і про те, наскільки далеко в минуле ви хочете сканувати.

Тож якби я хотів перевірити mail.log на наявність значень ip, скажімо, 75 хвилин у минуле, я би запустив:

$ sudo script.sh mail.log 75

Швидкий гугл знайшов мені це, що, здається, робить те, що я описав вище: cyberciti.biz/faq/iptables-connection-limits-howto
unc0nnected

1
Приємно! Я б ipsetскоріше використовував, а не подовжував ланцюжок iptables, але ідея чудова, і я думаю, я застосую їх до своїх виробничих серверів. Дякую, що поділились!
pepoluan

2
Я просто прочитав про ipset вперше на другий день і був радісно з радістю дізнатися про те, що він робить .. Мені трохи страшно реалізувати це лише тому, що я, мабуть, вимкніть його на початку та закрию сервер але це в моєму списку речей, про які можна дізнатися тут. Це, на мою думку, мій iptable ланцюг, ймовірно, становить близько 30-40 предметів і отримує лише 1 новий кожен день або два, так що я не переживаю надто.
unc0зв’язано

Чи вважали ви fail2ban?
пташенята

0

Я погоджуюся з коментарями щодо ipsets та прапорців tcp, але ще багато чого не вистачає:

Використовуйте xtables-addons geoip match замість ipsets для списків країн. Регулярно оновлюйте дані геоіп (принаймні один раз на місяць). Дані є більш динамічними, ніж список ipset, заповнених пожежею та забуттям.

Розглянемо відстеження стану з'єднання прапорами tcp. Наприклад, tcp RST або ACK має сенс лише для встановленого з'єднання. SYN має сенс лише для нових та пов'язаних з ними з'єднань. SYN для встановленого з'єднання означає, що або ваш SYN + ACK був загублений, або спроба злому, і його слід скинути, оскільки обидві сторони з'єднання не згодні з заявою.

Хоча жоден, SYN + RST і FIN + RST є незаконними комбінаціями, SYN + FIN тепер дійсний під швидким відкриттям TCP (варіант 34 TCP), особливо для DNS. SYN-пакети, навіть з швидко відкритими, не повинні бути фрагментованими. Я не вважаю правила з прапорами PSH та URG корисними. Не плутайте стан відстеження з'єднання зі станом TCP: Відповідь RST на пакет SYN встановлюється для цілей відстеження.

SYNPROXY призначений для переадресованих пакетів і нічого не додає для локально доставлених пакетів за межами підтримки syncookie.

Пакети помилок ICMP завжди будуть у відповідному стані та довжиною 48: 576, якщо вони дійсні. Довжина 84: 1280 для IPv6. Усі інші слід ігнорувати. Оскільки їх максимальний розмір також є мінімальним MTU, вони ніколи не повинні бути фрагментованими. Запити ICMP (пінгви, часові позначки тощо) завжди будуть новими, а відповіді встановлюються. Відкиньте пакети ICMP в інші стани.

Як і приклад SSH з останнім списком і приймає лише наступні пакети SYN, те ж саме слід зробити і для SMTP, і це аналогічно "грайлінгу" лише в даній IP-адреси.

У таблиці фільтрів перше (або друге, якщо перше приймає встановлені пакети стану) у ланцюзі вводу та виводу повинні приймати все в інтерфейсі зворотного циклу. Ви повинні довіряти власним внутрішнім пакетам. Якщо ви не можете, у вас виникають більші проблеми поза рішенням брандмауера.

Нарешті, не сліпо копіюйте правила, якщо ви дійсно не розумієте, що вони роблять. Так багато подібних переліків правил це робить, і більшість часу результат є смішним.


-2
#!/bin/bash
# The following iptables/ip6tables configurations have
# been kindly shared with us from ArckWiki. There are
# a few additions apart from what has been defined.
#
#=================Flush current definitions==============
    iptables -F
    ip6tables -F
    iptables -X
    ip6tables -X

#
#=================Chains=================================
#
#----Define chains for opened ports
    iptables -N TCP
    ip6tables -N TCP
    iptables -N UDP
    ip6tables -N UDP

#
#----Setting up the filter table for NAT
#   iptables -N fw-interfaces
#   ip6tables -N fw-interfaces
#   iptables -N fw-open
#   ip6tables -N fw-open

#
#================Default Chain reactions=================
#
#----Default FORWARD reaction
    iptables -P FORWARD DROP
    ip6tables -P FORWARD DROP

#
#----Default OUTPUT reaction
    iptables -P OUTPUT ACCEPT
    ip6tables -P OUTPUT ACCEPT

#
#----Shellshock
    iptables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP
    ip6tables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP

#
#----Default INPUT reaction
    iptables -P INPUT DROP
    ip6tables -P INPUT DROP
#
#----Drop spoofing packets
    iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -i wlan0 -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -i wlan1 -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -s 10.0.0.0/8 -j DROP
    iptables -A INPUT -s 169.254.0.0/16 -j DROP
    iptables -A INPUT -s 172.16.0.0/12 -j DROP
    iptables -A INPUT -s 224.0.0.0/4 -j DROP
    iptables -A INPUT -d 224.0.0.0/4 -j DROP
    iptables -A INPUT -s 240.0.0.0/5 -j DROP
    iptables -A INPUT -d 240.0.0.0/5 -j DROP
    iptables -A INPUT -s 0.0.0.0/8 -j DROP
    iptables -A INPUT -d 0.0.0.0/8 -j DROP
    iptables -A INPUT -d 239.255.255.0/24 -j DROP
    iptables -A INPUT -d 255.255.255.255 -j DROP

#
#================Ping rate limiting globally=============
    iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 30/min --limit-burst 8 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 --icmpv6-type 8 --match limit --limit-burst 8 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    ip6tables -A INPUT -p icmpv6 --icmpv6-type 8 -j DROP

#
#----flooding RST packets, smurf attack Rejection
    iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
    ip6tables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

#
#----Bogus packet DROP
    iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    ip6tables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    ip6tables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

#
#================RELATED,ESTABLISHED reaction============
    iptables -A INPUT --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    ip6tables -A INPUT --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#
#================unfetered loopback======================
    iptables -A INPUT -i lo -j ACCEPT
    ip6tables -A INPUT -i lo -j ACCEPT

#
#================INVALID catagory of packets=============
    iptables -A INPUT -p 41 -j ACCEPT
    iptables -A INPUT --match conntrack --ctstate INVALID -j DROP
    ip6tables -A INPUT --match conntrack --ctstate INVALID -j DROP

#
#================IPv6 reactions and definitions==========
    ip6tables -A INPUT -s fe80::/10 -p icmpv6 -j ACCEPT
    ip6tables -t raw -A PREROUTING -p icmpv6 -s fe80::/10 -j ACCEPT
    ip6tables -t raw -A PREROUTING --match rpfilter -j ACCEPT
    ip6tables -t raw -A PREROUTING -j DROP
#
#=======Acceptable INVALIDs and a curteous response======
    iptables -A INPUT -p udp --match conntrack --ctstate NEW -j UDP
    ip6tables -A INPUT -p udp --match conntrack --ctstate NEW -j UDP
    iptables -A INPUT -p tcp --syn --match conntrack --ctstate NEW -j TCP
    ip6tables -A INPUT -p tcp --syn --match conntrack --ctstate NEW -j TCP

#
#================Defining the TCP and UDP chains
#
#########################################################
#            Notes for port open definitions            #
# It is important to note that this should be config-   #
# ured differently if you're providing any routing      #
# activity for any purpose. it is up to you to actively #
# define what suites your needs to get the job done.    #
# In this example, I'm exempting IPv6 from being able   #
# to interact with SSH protocols for two reasons. The   #
# first is because it is generally easier and more com- #
# for internal networks to be deployed with IPv4. The   #
# second reason is, IPv6 can be deployed globally.      #
#########################################################
#
#----SSH configured for eth0
    iptables -A TCP -i eth0 -p tcp --dport ssh -j ACCEPT

#!---Blocking SSH interactions in IPv6
    ip6tables -A TCP -p tcp --dport ssh -j DROP

#!---Leave commented for end service device
#   iptables -A TCP -p tcp --dport 80 -j ACCEPT
#   ip6tables -A TCP -p tcp --dport 80 -j ACCEPT
#   iptables -A TCP -p tcp --dport 443 -j ACCEPT
#   ip6tables -A TCP -p tcp --dport 443 -j ACCEPT
#
#!---Uncomment for remote service to this device
#   iptables -A TCP -p tcp --dport 22 -j ACCEPT
#   ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
#
#!---Uncomment if you're providing routing services
#   iptables -A UDP -p udp 53 -j ACCEPT
#   ip6tables -A UDP -p udp 53 -j ACCEPT
#
#=================Tricking port scanners=================
#
#----SYN scans
    iptables -I TCP -p tcp --match recent --update --seconds 60 --name TCP-PORTSCAN -j DROP
    ip6tables -I TCP -p tcp --match recent --update --seconds 60 --name TCP-PORTSCAN -j DROP
    iptables -A INPUT -p tcp --match recent --set --name TCP-PORTSCAN -j DROP
    ip6tables -A INPUT -p tcp --match recent --set --name TCP-PORTSCAN -j DROP

#
#----UDP scans
    iptables -I UDP -p udp --match recent --update --seconds 60 --name UDP-PORTSCAN -j DROP
    ip6tables -I UDP -p udp --match recent --update --seconds 60 --name UDP-PORTSCAN -j DROP
    iptables -A INPUT -p udp --match recent --set --name UDP-PORTSCAN -j DROP
    ip6tables -A INPUT -p udp --match recent --set --name UDP-PORTSCAN -j DROP

#
#----For SMURF attack protection
    iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
    iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
    iptables -A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 -m limit --limit 2/second --limit-burst 2 -j ACCEPT

#
#----Ending all other undefined connections
    iptables -A INPUT -j DROP
    ip6tables -A INPUT -j DROP

#
#=======Defining the IN_SSH chain for bruteforce of SSH==
#
#!---I've elected to keep IPv6 out of this realm for
#!---ease of use
    iptables -N IN_SSH
    iptables -A INPUT -p tcp --dport ssh --match conntrack --ctstate NEW -j IN_SSH
    iptables -A IN_SSH --match recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP
    iptables -A IN_SSH --match recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP
    iptables -A IN_SSH --match recent --name sshbf --set -j ACCEPT
    iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH

#
#==================Setting up a NAT gateway==============
#
#########################################################
#                                                       #
# I commented this half out because it's not something  #
# that will apply to all setups. Make note of all par-  #
# tinate interfaces and what exactly is going on.       #
#                                                       #
#########################################################
#
#----Setting up the FORWARD chain
#   iptables -A FORWARD --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#   ip6tables -A FORWARD --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#
#
#----Defining the fw-interfaces/open chains for FORWARD
#   iptables -A FORWARD -j fw-interfaces
#   ip6tables -A FORWARD -j fw-interfaces
#   iptables -A FORWARD -j fw-open
#   ip6tables -A FORWARD -j fw-open
#   iptables -A FORWARD -j DROP # Should be REJECT. But, fuck them
#   ip6tables -A FORWARD -j DROP
#   iptables -P FORWARD DROP
#   ip6tables -P FORWARD DROP
#
#
#----Setting up the nat table
#   iptables -A fw-interfaces -i ### -j ACCEPT
#   ip6tables -A fw-interfaces -i ### -j ACCEPT
#   iptables -t nat -A POSTROUTING -s w.x.y.z/S -o ppp0 -j MASQUERADE
#   ip6tables -t nat -A POSTROUTING -s fe::/10 -o ppp0 -j MASQUERADE
#----The above lines should be repeated specifically for EACH interface
#
#----Setting up the PREROUTING chain
#
#######################################################
#                             #
# The PREROUTING chain will redirect either port      #
# targets to be redirected. This can also redirect    #
# traffic inbound to your network from the gateway    #
# to this machine. This can be useful if you're using #
# a honeypot or have any service within your network  #
# that you want to be pointed to a specific device.   #
#                             #
#######################################################
#
#----SSH honeypot server
#   iptables -A fw-open -d HONEYPOT_IP -p tcp --dport 22 -j ACCEPT
#   ip6tables -A fw-open -d HONEYPOT_IP -p tcp --dport 22 -j ACCEPT
#----With intuition, you can configure the above to also direct specific
#----requests to other devices providing those services. The bellow will
#----be for a squid server
#   iptables -A fw-open -d SQUID_IP -p tcp --dport 80 -j ACCEPT
#   ip6tables -A fw-open -d SQUID_IP -p tcp --dport 80 -j ACCEPT
#   iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8000 -j DNAT --to SQUID_IP
#   ip6tables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8000 -j DNAT --to SQUID_IP
#
#===============Declare configurations=================
    iptables -nvL
    ip6tables -nvL

1
При всіх кричах я не можу зрозуміти повідомлення вашої публікації.
Мисливець на оленів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.